SQL基础4—DML数据操纵语言

关键字:INSERT、UODATE、DELETE(TRUNCATE)

1.insert插入

语法:

  • 1)插入单行
INSERT INTO 表名(字段1,字段2...) VALUES|VALUE(1,2...);
  • 2)插入多行:
/*方式1:直接插入*/
INSERT INTO 表名(字段1,字段2...) VALUES(1,2...),(1,2...)...;
/*方式2:从其他列表插入*/
INSERT INTO 表名(字段1,字段2...SELECT 值列表 UNION [ALL]
SELECT 值列表 UNION [ALL]
...
SELECT 值列表;

注意:

  • 1)字段列表和值列表要一一对应,包含:个数、类型、约束
  • 2)整型、bool型的值,可以不用单引号,其他类型的值要求使用单引号
  • 3)字段顺序无要求
  • 4)可以省略字段列表,此时值列表默认插入所有字段,顺序与字段定义一致
  • 5)特殊情况
    • 如果该字段可以为空,则插入时,可以使用null值填充,或直接字段和值都不写
    • 如果该字段是自增长列,则插入时,可以使用null值填充,或直接字段和值都不写
    • 如果该字段有默认值,则插入时,可以使用default值填充,或直接字段和值都不写

自增长列:auto_increment

  • 默认从1开始,步长为1
  • 1、自增长列要求设置的字段类型为数值型
  • 2、自增长列要求必须和键搭配使用
  • 3、一个表中最多有一个自增长列
  • 4、主键如果是自增长列(非空),添加记录时,可以选填

1)子增长列默认情况下递增间隔是1,若想按照1、3、5…这样顺序递增,方法是在创建语句前增加这样的语句:

set global auto_increment_increment =2;

2)在MySQL中如果想实现001、002、003…这样的自增效果:

create table tablename (
	id int(3) unsigned zerofill auto_increment primary key
); 

2.update 更新

1)单表更新语法:

UPDATE 表名	SET 字段名 = 新值,字段名 = 新值,... WHERE 筛选条件;

2)多表更新:

UPDATE 	boys  b 
JOIN	beauty  g	
ON b.id = g.boyfriend_id
SET g.borndate = '1990-01-01'
WHERE b.boyName = '张无忌';

update 表名 别名,表名 别名
set 字段名=新值,字段名 = 新值
where 连接条件
and 筛选条件

3.delete、truncate 删除

方式1:DELETE语句

1.单表删除★

deletefrom 表名 where 筛选条件;

2.多表级联删除:可以通过delete子句选择需要删除记录的表

delete 别名1,别名2
from 表 别名1,表 别名2  
where 连接条件 and 筛选条件;

方式2:truncate[属于DDL]

语法:

truncate table 表名;

面试题:delete和truncate的对比

1、DELETE语句,可以添加WHERE条件,支持部分删除
TRUNCATE语句,不能添加WHERE条件,只能全部删除

2、DELETE语句,可以返回受影响的行数
TRUNCATE语句,不能返回受影响的行数

3、TRUNCATE的效率较高

4、DELETE 删除带自增长列的表,重新插入数据时,自增长列的值从断点处继续
TRUNCATE删除带自增长列的表,重新插入数据时,自增长列的值从1开始

5、DELETE支持事务回滚
TRUNCATE不支持事务回滚。

原理:

  • truncate属于DDL,删除是表级操作:先删除表,再创建一个新表;
  • delete属于DML,删除是行级操作:删除表中指定的记录;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值