介绍
主要包括 插入insert、更新update、删除delete
语法总结
insert into 表名(列1,列2....)
values (值1,值2.....)
update 表1 别名1 表2 别名2
set 列 = 值, 列 = 值...
on 连接条件
where 筛选条件;
delete 别名1 ,别名2
from 表1 别名1,表2 别名2
on 连接调价
where 筛选条件;
语法
insert into 表名(列名,......)
values(值1,......)
插入的值的类型要与列的类型一致或兼容。
兼容性说明:
假如字段是int类型,但是输入的是‘123’这样是不会报错的,原因对于这个字符型可以隐式的转换为数值。
假如拿到的是‘join’,则不可行。
不可以为null的列必须插入值,可以为null的列可以通过如下两种方式插入值
字段的个数和顺序不一定与原始表中的字段个数和顺序一致,但是插入values要与列字段顺序一一对应
列数和值的个数必须一致,否则会报错
可以省略字段名,默认插入所有列,而且列的顺序和表中字段的顺序一致
语法
insert into 表名
set 列名 = 值 , 列名 = 值......
方式1支持多行插入,方式2不支持
# 方式1:
insert into 表名 (列名1,列名2.....)
values (值1,值2,......),
(值1,值2,.......);
案例:
方式1支持子查询,方式2不支持
insert into 表名(字段1,字段2,...)
查询语句;
案例
语法
update 表名
set 字段 = 新值,字段 = 新值....
[where 筛选条件];
语法sql92
update 表1 别名,表2 别名
set 列 = 值, 列 = 值...
where 连接条件
and 筛选条件;
语法sql99
update 表1 别名
[inner | left | right ] join 表2 别名
on 连接条件
where 筛选条件;
单表修改
多表修改
语法
delete from 表名
where 筛选条件
[limit 条目数];
语法sql92
delete 别名1,别名2
from 表1 别名1,表2 别名2
where 连接条件
and 筛选条件;
语法sql99
delete 别名1.别名2
from 表1 别名1
[inner | left |right ] join 表2 别名2
on 连接条件
where 筛选条件;
注意
delete后面的别名,取决于要删除的是哪个表的信息。
语法
truncate table 表名;
作用
主要用于删除整个表的信息
区别 | delete | truncate |
---|---|---|
where条件 | 可加 | 不可加 |
效率 | 略差 | 较高 |
删除自增长列 | 删除再插入,自增长列的值从断点开始 | 删除再插入数据,自增长列从头开始(即1) |
删除内容 | 可以删除部分记录 | 删除全部记录,但是不删除表 |
– | 扩展 | drop 删除整张表 |
返回值 | 有返回值 返回删除的行数 | 没有返回值 |
回滚 | 可以回滚 | 不可以回滚 |
高水线 | 不影响高水线 | 会将高水线复位 |
扩展2022/7/31
所有的segments段(segment作为表的一个同义词) 都有一个在段内 容纳数据的上限,这个就是高水线(High Water Mark)。这个HWM是一个标记,用来说明已经有多少没有使用的数据块分配给这个segment。
HWM通常增长的幅度为一次5个数据块,原则上HWM只会增大,不会缩小,即使将表中的数据全部删除,HWM还是为原值。
打个比方,HWM很像一个水库的历史最高水位,当前水库没有水,不能说明该水库的历史最高水位线为0;
但是如果我们在表上使用了truncate命令,则该表的HWM会被重新置为0。