插入操作
-- 插入操作:方法1 insert into 表名[(字段,字段)] values (值,值);
insert into mysql_learn (title, icon, href, target, status, pid, create_time, last_update_time)
values ('dml', 'iron', '_herf', null, 0, -1, '2025-01-01', '2025-01-01');
/*
值和字段需要一一对应
如果是字符型或日期类型,值需要用单引号引起来;如果是数值类型,不需要用单引号
字段和值的个数必须一致,位置对应
字段如果不能为空,则必须插入值
可以为空的字段可以不用插入值,但需要注意:字段和值都不写;或字段写上,值用null代替
表名后面的字段可以省略不写,此时表示所有字段,顺序和表中字段顺序一致。
*/
-- 插入操作:方法2 insert into 表名 set 字段 = 值,字段 = 值;
insert into mysql_learn set title='dmladd1',icon='icon',href='_herf';
-- 批量插入:方法1
insert into 表名 [(字段,字段)] values (值,值),(值,值),(值,值);
-- 批量插入:方法2
insert into 表 [(字段,字段)] 数据来源select语句;
insert into mysql_learn (title, icon, href, target, status, pid, create_time, last_update_time)
select title, icon, href, target, status, pid, create_time, last_update_time from mysql_learn where id = 1;更新操作
-- 单表更新【建议使用】
update 表名 [[as] 别名] set [别名.]字段 = 值,[别名.]字段 = 值 [where条件];
update mysql_learn as a set a.href = '_herf_' where id = 2;
-- 多表更新
update 表1 [[as] 别名1],表名2 [[as] 别名2] set [别名.]字段 = 值,[别名.]字段 = 值 [where条件];
update mysql_learn as a,sys_menu as b set a.href = '/',b.href='/' where a.id=b.id;
/*
多表更新条件必须设置为两个表条件关联否则会更新全表。
*/删除操作
-- 单表删除
delete [别名] from 表名 [[as] 别名] [where条件];
/*
注意:
如果无别名的时候,表名就是别名
如果有别名,delete后面必须写别名
如果没有别名,delete后面的别名可以省略不写。
*/
delete a from mysql_learn as a where a.id = 4;
-- 多表删除
delete [别名1,别名2] from 表1 [[as] 别名1],表2 [[as] 别名2] [where条件];
/*别名可以省略不写,但是需要在delete后面跟上表名,多个表名之间用逗号隔开。*/
delete a,b from mysql_learn a,sys_menu b where a.id = b.id;清除表数据
truncate 表名;删除操作的区别( drop,truncate,delete )
- drop (删除表):删除内容和定义,释放空间,简单来说就是把整个表去掉,以后要新增数据是不可能的,除非新增一个表。
- drop语句将删除表的结构被依赖的约束
(constrain),触发器(trigger)索引(index),依赖 于该表的存储过程/函数将被保留,但其状态会变为:invalid。 如果要删除表定义及其数据,请使用drop table语句
- drop语句将删除表的结构被依赖的约束
- truncate (清空表中的数据):删除内容、释放空间但不删除定义(保留表的数据结构),与drop不同的是,只是清空表数据而已。
- delete (删除表中的数据):delete 语句用于
删除表中的行。delete语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存,以便进行进行回滚操作。
truncate与不带where的delete :只删除数据,而不删除表的结构(定义) truncate table 删除表中的所有行,但表结构及其列、约束、索引等保持不变。 对于由foreign key约束引用的表,不能使用truncate table ,而应使用不带where子句的delete语 句。由于truncate table 记录在日志中,所以它不能激活触发器 ; delete语句是数据库操作语言(dml),这个操作会放到rollback segement中,事务提交之后才生 效;如果有相应的 trigger,执行的时候将被触发。truncate、drop是数据库定义语言(ddl),操作立即生效,原数据不放到rollback segment中, 不能回滚,操作不触发 trigger。** 如果有自增列,****truncate**方式删除之后,自增列的值会被初始化,**delete**方式要分情况(如果数 据库被重启了,自增列值也会被初始化,数据库未被重启,则不变)。
- 如果要删除表定义及其数据,请使用 drop table 语句;
- 删除速度,一般来说: drop> truncate > delete;
| drop | truncate | delete | |
|---|---|---|---|
| 条件删除 | 不支持 | 不支持 | 支持 |
| 删除表结构 | 支持 | 不支持 | 不支持 |
| 事务方式删除 | 不支持 | 不支持 | 支持 |
| 触发触发器 | 否 | 否 | 是 |