一、DDL 语句(Data Definition Languages,数据定义语言)
这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象。
1.创建数据库
create database db_name;
2.删除数据库
drop database db_name;
3.创建表
create table tb_name (
column_name_1 column_type_1 constraints,
column_name_2 column_type_2 constraints,
column_name_3 column_type_3 constraints,
...
)default charset = utf8; //指定中文字符集,可以给字段赋值中文
column_name 为列的名字, column_type 为列的数据类型, constraints 为列的约束条件。
4.查看表定义
desc tb_name;
5.查看创建表的SQL语句
show create table db_name;
6.删除表
drop table tb_name;//删除整个表连表名一起删除
7.修改表
修改表的数据类型
alter table tb_name modify [COLUMN] column_name column_definition [first | after column_name];
增加表字段
alter table tb_name add [COLUMN] column_name column_definition [first | after column_name];
删除表字段
alter table tb_name drop [COLUMN] column_name;
修改字段名
alter table tb_name change [COLUMN] old_column_name column_name column_definition [first | after column_name];
修改字段顺序
alter table tb_name modify [COLUMN] column_name column_definition [first | after column_name];
修改字段顺序主要是通过 first 和 after,在其后指定字段名则是调整至该字段前一位或后一位,不指定字段名则是调整至最前或者最后。
更改表名
alter table tb_name RENAME [to] new_tb_name;
二、DML 语句(Data Manipulation Language,数据操纵语句)
1.插入记录
insert into tb_name (field1, field2, ..., fieldn) values(value1, value2, ...,valuen);
可空字段、非空但是含有默认值的字段、自增字段可以不列在字段列表中。
insert into tb_name values(value1, value2, ...,valuen);
也可以不指定字段名称,VALUES 顺序和字段排列顺序一致。
insert into tb_name (field1, field2, ..., fieldn)
values
(record1_value1, record1_value2, ...,record1_valuen),
(record2_value1, record2_value2, ...,record2_valuen),
...
(recordn_value1, recordn_value2, ...,recordn_valuen);
也可以同时插入多行的记录。
2.更新记录
update tb_name set field1=value1, field2=value2, ... [where condition];
3.更新多个表中的数据
update tb_name1, tb_name2, ... set tb_name1.field=value, ... [where condition];
4.删除记录
- delete from tb_name [where condition];
- truncate table tb_name;//删除整个表数据,释放磁盘空间,自动增长的列的值返回为默认的种子,不能按条件删除,速度比delete快
5.删除多个表中的数据
delete tb_name1, tb_name2, ... FROM tb_name1, tb_name2, ... [where condition];
真正要删除的记录在 from前的 tb_name 中,FROM 后的 tb_name 是用于 WHERE 中的条件判断。
6.查询记录
select column_name from tb_name;
查询不重复的记录
在要查询的 column_name 前添加字段 distinct
select distinct column_name from tb_name;
条件查询
select column_name from tb_name WHERE condition;
排序
select * from tb_name [where condition] [order by field1 [desc|asc], field2 [desc|asc], ...,]];
desc 表示按照字段进行降序排序, asc 表示升序排序,不指定默认升序排序。
限制
select * from tb_name [limit offset_start, row_count];
offset_start 表示偏移量, row_conut 表示显示的行数。
select * from tb_name [limt row_count];
只指定一个参数时,默认偏移量为0。
聚合
很多情况下,需要对一些数据进行汇总。
select [field1, field2, ...] function_name
from tb_name
[where condition]
[group by field1, field2, ..., fieldn
[WITH ROLLUP]
[HAVING condition]];
- function_name 表示要做的聚合操作,又称聚合函数。常用的有 sum()、 count(*)、 max() 和 min()。
- group by 关键字表示要进行分类聚合的字段。
- with rollup 表明是否对分类聚合后的结果进行再汇总。
- having 关键字表示对分类后的结果再进行条件的过滤。
注意:having 和 where的区别在于,having 是对聚合后的结果进行条件的过滤,而 where 是对聚合前的记录进行过滤。
- 表连接
需要同时显示多个表中的字段的时候,通过表连接可以实现,表连接分为内连接和外连接两种。
内连接选出两张表中互相匹配的记录。外连接会选出其它的记录。 - 内连接
select field1, field2, ...,fieldn from tb_name1, tb_name2, ... [where condition];
外连接
外连接分为左连接和右连接
左连接:包含左边表中的所有记录,左边表中某些字段的记录在右边表中有没有匹配项会被显示为空。
右连接:包含右边表中的所有记录,右边表中某些字段的记录在左边表中有没有匹配项会被显示为空。
- select left_field, right_field from left_tb_name
LEFT JOIN right_tb_name ON condition; - select left_field, right_field from right_tb_name
LEFT JOIN left_tb_name ON condition;
子查询
查询的时候,condition 需要的条件是另外一个 select 语句的结果,称为子查询。
子查询的关键字主要包括:in、 not in、 =、 !=、 exists 和
not exists 等。
- 记录联合
将两个表的数据按照一定的查询条件查询出来后,将结果合并到一起显示出来。关键字是 union 和 union all。
select * from tb_name1 [where condition]
union | union all
select *from tb_name2 [where condition]
...
union | union all
select * from tb_namen [where condition]
union all 是表示全部记录,包括了多个查询结果的重复记录。如果希望去掉多个查询结果的重复记录,使用 union 关键字。
三、DCL 语句(Data Control Language,数据控制语句)
这些语句主要是 DBA 用于管理系统中的对象权限
1.权限控制
授权
grant 权限列表 on 库名 to 用户名@"客户端地址"
idetified by "密码" //授权用户密码
with grant option ; //有授权权限,可选项
- grant all on . to mydba@"%" identified by "passwd" with grant option;
- grant all on db_name.tb_name to 'user_name'@'host_name';
撤权
revoke 权限列表 on 库名.表名 from 用户名@"客户端地址" ; - revoke all on db_name.tb_name from 'user_name'@'host_name';
2.grant授权
- 权限列表
- all //所有权限
- usage //无权限
- select,update,insert //个别权限
- select,update(字段1,...字段N)//指定字段
- 库名
- . //所有库所有表
- 库名.* //一个库
- 库名.表名 //一张表
- 用户名
- 授权时自定义要有标示性
- 存储在msql库的user表里
- 客户端地址
- % //所有主机
- 192.168.1.% //网段
- 192.168.1.1 //单台主机
- localhost //本机
查询权限
select user();//显示登陆用户名及客户端地址
show grants;//用户显示自身访问权限
show grants for 用户名@"客户端地址"; // 仅限管理员查看普通用户权限
set password for 用户名@"客户端地址" = password("密码"); //管理员重置授权用户连接密码
drop user 用户名@"客户端地址"; //删除授权用户(必须有管理员权限)
四、DTL语句(数据事务语言)
如:commit ,rollback, savepoint