SQL结构化查询语言
DDL 数据定义语言
create 创建表、视图、索引...
drop 删除表、视图、索引...
alter 修改表
truncate 截断
1,alter(修改)
给已有表中添加一列:
alter table 表名 add (字段);
修改表中的字段:
alter table 表名 modify (修改的字段<主要修改其数据类型>);
2,truncate(截断)
delete from 表; -- 如果和事务sql结合使用,是有机会恢复
truncate table 表; -- 没法和事务结合,不能恢复,效率更高
DML 数据操控语言 (**)
insert 插入数据
update 修改数据
delete 删除数据
select 查询数据
标准语法:
insert into 表(多个列...) values (多个值...);
MySQL独有的:一次插入多行数据
insert into 表名 values(值),
(值),
(值),
...;
用insert插入另一张表的数据(列的个数和类型要一致)
insert into 表1(列1,列2...) select 列1,列2... from 表2;
update 对已有的数据进行更新
update 表名set 列名=更新的数据;
修改信息
update 表名set 修改的信息1,信息2 where 条件(需要被修改的字段信息);
注意:主键列主要用于查询条件,一般不会更新
删除
delete from 表; 全部删除
delete from 表 where 条件; 删除符合条件的记录
主键所在表可以称为`主表`,而外界所在表称为`从表`
主表中删除的记录,如果被从表引用,那么会删除失败,违反外键约束(外键约束默认行为)。
外键约束还有一种行为,主表记录删除,把从表中与之关联的记录一块删除(级联删除)
在外键约束后面加上on delete cascade关键字即可
select 查询
select 列名... from 表名 where 条件;
比较运算
表示相等的 =
大于 >
大于等于 >=
小于 <
小于等于 <=
不等于 !=
逻辑运算 and(并且) or(或者) not(取反)
null值
数据库中的null,比较特殊,不能使用=来比较,必须用is null
like(模糊查询)
例如:
查询以s开头的数据信息
select * from 表名 where 列名 like's%';
通配符%识匹配0到任意个字符.
通配符_表示匹配一个任意字符.
between...and...范围匹配
语法:
select * from 表名 where 条件 and 条件.
必须按照从小到大的顺序
between 包含等于条件
limit(MySQL特有的)
用来限制返回的结果数
limit n; n 表示最多返回几条记录
limit m n ; m代表偏移量,注意偏移量从0 开始.
order by(排序)
语法: order by 列名 asc(升序)|desc(降序),列名 asc(升序)|desc(降序)......
如果不写asc|desc,默认升序.
select语句顺序:
select *from 表 where 条件 order by 排序 limit;
时间加减
date_add(原始时间, 时间间隔)
时间间隔的语法: interval 数字 时间单位
数字可以是正数或负数
select date_add(now(), interval 1 day );
提取时间的某个部分
extract(时间部分 from 原始时间)
select extract(year from now());
select extract(year_month from now());
返回的结果是一个数字类型
类型转换
select cast('11' as signed)+1;
select cast('12.55555' as decimal(5,2));
拼接字符串
concat(值1, 值2, ... 值n)
select concat('a', 'b', 'c');
select concat('a', 18, 'c'); /*可以把其它类型当做字符串拼接*/
求长度的函数
char_length 按字符为单位统计长度
length 按字节为单位统计长度
utf8mb4编码下,汉字一个字符占三个字节,英文一个字符占一个字节
标准sql:
case
when 条件1 then 值1
when 条件2 then 值2
...
else 值n
end
整个case...end 最后返回一个值
组函数
最大值 max(列)
最小值 min(列)
和 sum(列)
个数 count(列) 会排除null值
count(*) 针对这次查询,看看一共有多少行
平均值 avg(列)
去除重复(distinct)
语法;select distinct 列名 from 表名;
select查询语句执行顺序:
执行从先到后:
where 进行一遍条件过滤 , 再执行 group by 分组, 再执行 having中的条件, 再执行select, 再执行order by, 执行limit
语法顺序:
select ... from ... where ... group by ... having ... order by ... limit;