DDL: 数据定义语言 Definition,用来定义数据库对象(数据库、表、字段)CREATE、DROP、ALTER
DML: 数据操作语言 Manipulation,用来对数据库表中的数据进行增删改 INSERT、UPDATE、DELETE
注意:
DDL是改变表的结构
DML是改变表的数据
DQL: 数据查询语言 Query,用来查询数据库中表的记录 SELECT、FROM、WHERE
DCL: 数据控制语言 Control,用来创建数据库用户、控制数据库的控制权限 GRANT、REVOKE
注意:
DQL就是查询数据
DCL改变用户权限
数据库基本操作
1、查询所有数据库
show databases;
2、查询当前数据库
select database();
3、使用数据库
use 数据库名;
4、查询当前数据库所有表
show tables;
5、查询表的结构
desc 表名;
UTF8字符集长度为3字节,有些符号占4字节,所以推荐用utf8mb4字符集
DDL
1、创建数据库
create database 数据库名;
2、删除数据库
drop database 数据库名;
3、创建表(最后一个字段后面没有逗号)
create table 表名(
字段1 字段1类型,
字段2 字段2类型,
字段3 字段3类型,
…
字段n 字段n类型
);
4、查询指定表的建表语句
show create table 表名;
5、alter的使用:
添加字段:alter table 表名 add 字段名 类型;
修改数据类型:alter table 表名 modify 字段名 新的数据类型;
修改字段名和字段类型:
alter table 表名 change 原来字段名字 新的字段名字 字段类型;
删除字段:alter table 表名 drop 字段名;
修改表名:alter table 表名 rename to 新的表名;
6、删除操作
删除表:drop table 表名;
删除表并且重新创建该表:truncate table 表名;
数据类型
1、数值类型
有符号(signed)
无符号(unsigned)
区别: 是否允许出现负数
2、字符串类型
3、日期时间类型
DML
添加数据:insert
修改数据:update
删除数据:delete
添加数据
1、指定的字段
insert into 表名 (字段名1,字段名2,…) values(值1,值2,…);
2、全部的字段
insert into 表名 values(值1,值2,…);
批量的添加数据
insert into 表名 (字段名1,字段名2,…) values(值1,值2,…),(值1,值2,…),(值1,值2,…);
或者
insert into 表名 values(值1,值2,…),(值1,值2,…),(值1,值2,…);
注意
1、字符串和日期类型的数据应该包含在引号里面
2、插入的数据大小应该在字段的规定范围内
更新操作
修改数据
update 表名 set 字段名1 = 值1,字段名2 = 值2,… [where 条件];
注意:
修改语句的条件如果没有那么就会去修改整张表的所有数据 update
删除操作
删除数据
delete from 表名 [where 条件];
注意
删除语句的条件如果没有那么就会去删除整张表的所有数据 delete
delete语句是不可以去删除某一个字段的值的
可以使用update将其设置为null
DQL
模板:
SELECT
字段列表
FROM
表名字段
WHERE
条件列表
GROUP BY
分组字段列表
HAVING
分组后的条件列表
ORDER BY
排序字段列表
LIMIT
分页参数
1基础查询
1、查询多个字段
select 字段1,字段2,字段3,… from 表名;
select * from 表名;
2、设置别名
select 字段 as 别名 from 表名;
或者
select 字段 别名 from 表名;
3、去除重复记录
select distinct 字段 from 表名;
2条件查询
select 字段列表 from 表名 where 条件列表;
3聚合函数
将一列数据作为一个整体来进行纵向的计算
select 聚合函数(字段列表) from 表名;
注意:
null值是不参与聚合函数的运算的
4分组查询
注意
where和having的区别:
1、where是分组之前进行过滤,不满足where条件不参与分组,having是分组后对结果进行过滤。
2、where不能对聚合函数进行判断,而having可以。
执行顺序
where > 聚合函数 > having
分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义
5排序查询
asc 是 升序排序
desc 是 降序排序
注意
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序
6分页查询
limit 起始索引,查询记录数;
注意
1、起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
2、如果查询的是第一页数据,起始索引可以省略
DQL语句的执行顺序
执行顺序:from、where、group by、having、select、order by、limit
注意
根据sql的执行顺序可知:group by 和 having 是在select的前面的,那么select 里面起的别名怎么还可以在having里面使用呢?
--年龄小于45,并根据工作地址分组,获取员工数量大于等于3的工作地址
select workaddress, count(*) address_count from employee where age < 45 group by workaddress having address_count >= 3;
DCL
用来 管理数据库用户 以及 控制数据库的访问权限
管理用户
1、查询用户
user mysql;
select * from user;
2、创建用户
create user '用户名'@'主机名' identified by '密码';
3、修改用户密码
alter user ‘用户名’@‘主机名’ identified with mysql_native_password by ‘新密码’;
4、删除用户
drop user '用户名'@'主机名';
注意
创建用户test,能在任意主机访问
create user ‘test’@‘%’ identified by ‘123456’;
也就是说:主机名可以使用 % 通配
权限控制
1、查询权限
show grants for '用户名'@'主机名';
2、授予权限
grant 权限列表(all) on 数据库名.表名 to '用户名'@'主机名';
3、撤销权限
revoke 权限列表(all) on 数据库名.表名 from ‘用户名’@‘主机名’;
注意
1、多个权限用逗号分隔
2、授权时,数据库名和表名可以用 * 进行通配,代表所有