MySQL基本操作(复习篇)
MySQL基本操作文章摘要本文系统介绍了MySQL数据库的核心操作涵盖客户端连接、数据库管理、表操作、CRUD增删改查、数据库约束、表设计范式、关系模型、聚合函数、分组查询以及联合查询等关键知识点。内容从基础命令到高级查询提供了完整的MySQL操作指南适合初学者快速掌握MySQL基本操作。目录1.客服端和数据库操作2.表操作3.CRUD增删改查4.数据库约束5.表的设计6.关系模型7.聚合函数8.GROUP BY分组查询9.联合查询表连接查询正文1.客服端和数据库操作1.登录 mysql -uroot -p2.查看当前数据库的版本 select version3.显示所有数据库 show database4.创建数据库create database [if not exists] 数据库名 character set 字符编码集 collate 排序规则;(mysql8.0以上版本默认字符编码集是utf8mb4_0900_ai_ci5.选择数据库use 数据库名6.查看当前选择了哪个数据库 select database();7.删除数据库drop database if exists 数据库名8.查看警告信息show warnings;9.退出quit/exit2.表操作1.查看当前数据库中有哪些表 show tables;2.创建一张新表 create table if not exists 表名(列名/字段名 数据类型……列名/字段名 数据类型);3.查看表结构desc 表名;4.删除表drop 表名;//操作危险3.CRUD增删改查3.1.新增/插入insert into 表名(列名列名) values(值值);指定了多少列名就要指定多少个值值与列名一一对应不指定列名值的顺序与个数就与表中所有的列对应3.2查询操作2.1全列查询select *from 表名不加限制时会把所有列的数据都显示出来2.2指定列查询 select 列名列名 from 表名;2.3列为表达式的查询select 表达式 from 表名;2.4别名查询select 列名/表达式 as 别名 from 表名;//别名中如果有空格则需要加单引号2.5去重查询select destinct 列名[,列名] from 表名2.6排序查询 select * from 表名 order by 列名 asc/desc;//asc升序desc降序2.7条件查询 select 列名列名…… from 表名 where 列名/表达式 比较/逻辑运算符 order by 列名 asc/desc;2.8区间查询 select * from 表名 where 列名 between 开始条件 and 结束条件//等价于开始条件列的值结束条件2.9模糊查询select * from 表名 where 列名 like ‘%值_’;//%适配任意字符_匹配单个字符2.10分页查询select *from 表名 where 条件 order by 列名 asc/desc limit num;//查询前num条数据select * from 表名 where 条件 order by 列名 asc/desc limit start,num;//从第start条开始向后查询num条记录select * from 表名 where 条件 order by 列名 asc/desc limit num offset start;//从start 开始向后查num条记录3.3更新update 表名 set 列名更新值 where 条件 order by 子句 limit num//如果不指定条件和limit的数量就会更新整张表3.4删除delect from 表名 where 条件 order by 子句 limit num // 如果不指定条件和limit 的数量就会删除整张表中的数据4.数据库约束1.非空约束:not null// 标记了一个字段不能为空2.唯一约束 unique //标记一个字段的内容在当前列中唯一不能重复但是可以为null3.主键约束primary key //在约束的方式上相当于not nullunique4.默认约束default//当一个字段没有指定值的时候为null不指定列的值就用默认值去填充5外键约束foreign key;//一个表中的字段与另一个表中的主键建立关联关系当对表中的数据进行增删改查时候系统会帮我们进行检查5.表的设计5.1三大范式1.第一范式要求表中的每一列不可再分有一个简单的方法数据库中提供的数据类型可以描述这个字段。不满足第一范式的数据库就不是关系型数据库2.第二范式:在第一范式的基础上消除部分函数依赖只能出现在有复合主键的表中多个候选键如果有一字段只依赖于复合主键中的某一列那么就要把这个列删除单独建表3.第三范式在第二范式的基础上消除传递依赖6.关系模型1.一对一关系各自先建立各自的表在其中的一张表中加字段完成对另一张表的引用建立关系2.一对多关系各自先各自建立起各自的表在这一方设置一个主键在另一方加一个字段两张表建立引用关系3.多对多关系各自先建立各自的表另外再新加一张表7.聚合函数1.count(列/*//统计结果的条数2.sum(列求和3.avg(列名/表达式求pingjun4.min列求最小值5.max列求最大值8.GROUP BY分组查询SELECT 分组列, 聚合函数(列 FROM 表名 [WHERE 条件] GROUP BY 分组列 [HAVING 分组后的过滤条件] [ORDER BY 排序列] [LIMIT 数量];//对某一字段进行分组操作分组后可以结合聚合函数进行一些运算HAVING子句对GROUP BY的结果进行过滤9.联合查询表连接查询9.1内连接select *from table1,table2 where table1.xxxtable2.xxx;select *from student table1 join table2 on table1.xxxtable2.xxx;select * from table1 inner join table2 on table1.xxxtable2.xxx;表连接的执行过程1.确定参与表连接需要的表2.计算参与表连接的笛卡尔积3.确定连接条件过滤无效的数据4.精简列名得到最终想要查询的列9.2外连接分左外连接和右外连接select * from table1 left join table2 on table1.xxxtable2.xxx;select * from table1 right join table2 on table1.xxxtable2.xxx;9.3自连接要起别名select * from table t1,table2 t2 where t1.xxxt2.xxx;把行转换为列在查询的时候可以使用where条件进行过滤实现行与行之间的比较9.4子查询单行子查询select*fromtable1where列名(selectidfromtable2where列名xxx);多行子查询select*fromtable1where列名in(select列名fromtable2where列名xxx);内层查询的结果作为外层查询的条件把多条语句合并为一条语句执行子查询可以无限嵌套层数过多会影响效率9.5合并查询select*fromtable1unionselect*fromtable2;select*fromtable1unionallselect*fromtable2;作用是把两个结果集集中合并成一个返回注意合并查询时多个查询列表必须匹配MySQL不对结果做校验写的时候务必注意。9.6一条语句各部分的执行顺序from - join on - where - group by -having -select -distinct - order by - limit.记忆方法想象你去饭店吃饭from:从大门进来确定表格join on(拼桌子加入你带了多个朋友多表查询进门的第一件事情就是把这些朋友约到一张桌子where大概筛选一遍:确定不吃太辣的不吃太油的……group by:把第一遍筛选出来的菜按照品类分堆分为青菜肉菜面制品……having(二次筛选分好堆之后再筛选那一堆不要order by:确定了最后菜品之后上菜拍顺序排好拍照limit拍完照之后开吃但是每个人的胃口都是有限的没有办法把所有的菜品尝试一边于是选择了自己最想吃的几样