目录
一、插入
1、insert
2、replace(插入否则更新)
二、更新(update)
三、删除
1、delete
2、truncate(截断表,慎用)
一、插入
1、insert
(1) 单行 / 多行插入
全列插入:插入时可以省略要插入的字段
-- 插入单行
insert into 表名 values (...)
-- 插入多行(不同行之间使用逗号隔开)
insert into 表名 values (...),(...)
指定列插入:插入时必须明确要插入的字段(插入的字段必须要和对应的值一一对应)
-- 插入单行
insert into 表名 (字段1, 字段2, ...) values (值1, 值2...)
-- 插入多行(不同行之间使用逗号隔开)
insert into 表名 (字段1, 字段2, ...) values (值1, 值2...),(值1, 值2...)
(2) 插入否则更新(on duplicate key update)
如果插入的值和主键或者唯一键冲突时,会导致记录插入失败:
可以在最后加上 on duplicate key update 来补救,当插入的记录和主键或者唯一键冲突时,就直接更新对应的记录,语法格式如下:
-- 插入单行
insert into 表名 (主键, 字段2, ...) values (主键值, 值2...)
on duplicate key update 字段2=值2,...
2、replace(插入否则更新)
replace 和 on duplicate key update 的作用类似,如果主键或者唯一键没有冲突,直接插入;主键或唯一键有冲突,那么删除以后再插入。
注意是删除以后插入, on duplicate key update 是在原本的基础上更新。
-- 支持全列/指定列替换
replace into 表名 (字段名) values (字段值)
替换前:
替换后:
二、更新(update)
一般update需要搭配 where子句使用,如果没有where子句,更新的是全表某个字段的值,有了where子句,更新的是指定记录对应的字段值。
update 表名 set 字段名=新的字段值 where 筛选条件
在某一个字段原本值的基础上加上一个值
将某一个字段的值改为一个全新的值
三、删除
1、delete
delete的作用是删除某一条记录或者删除整个表,无论是哪种,自动索引都不会重置,而是保留历史最大值。所谓自动索引,指的是下次插入记录的时候,主键自增的值。
(1) 删除某一条记录
一般需要搭配where子句使用,否则删除的是整个表的数据。
delete from 表名 where 筛选条件
(2) 删除整个表的内容(慎用)
delete from 表名
2、truncate(截断表,慎用)
只能对整表操作,不能像delete那样针对部分数据操作;除了清零,还会重置自动索引。实际上 MySQL 不对数据操作,所以比 delete 更快,但是 truncate 在删除数据的时候,并不经过真正的事物,所以无法回滚。
truncate 表名