MySQL学习笔记之DML 数据操纵语言,增删改表中的数据insert、update、delete、truncate

前言、DML 数据操纵语言

  • Data Management Language,主要的操作对象是表中的数据,主要做的事情就是表中数据的增删改

  • 管理表中数据时主要用到的关键字

插入:insert
修改:update
删除:delete

一、插入语句(经典插入方式) insert into

  • 语法:

    insert into 表名(列名,......) values(1,......);
    
  • 特点:

​ ① 插入的值的类型要与列的类型一致或兼容
​ ② 可以为null的列如何插入值?
方式1:写上列名,插入值时写null ,如案例1
方式2:列名和值都不写 ,如案例2
​ ③ 列的顺序可以调换,列数和值必须匹配,如案例3
​ ④ 可以省略列名,默认所有列,而且列的顺序和表中列的顺序要一致,如案例4

案例1 在beauty表中插入一个行的记录

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-02-23','11112222333',NULL,2);

SELECT * FROM beauty;

不可以为null的字段必须插入值,可以为null的列如何插入值?

  • 方式1:写上列名,插入值时写null ,如案例1

  • 方式2:列名和值都不写 ,如案例2

案例2

INSERT INTO beauty(id,NAME,sex,borndate,phone,boyfriend_id)
VALUES(14,'周迅','女',NULL,'100100',4);

案例3

INSERT INTO beauty(NAME,id,sex,borndate,phone,boyfriend_id)
VALUES('小小',15,'女','1996-02-19','11111111',3);

案例4

INSERT INTO beauty VALUES(16,'王菲','女','1978-09-18','1100101010',NULL,2);

二、插入方式二(巧用set关键字)

  • 语法:
insert into 表名
set 列名1=1, 列名2=2, .....

案例5

INSERT INTO beauty 
SET id=17,NAME='孙俪',sex='女',phone='11111111';
插入方式1和方式2的对比:
  • 1.方式1支持插入多行,方式2不支持插入多行
INSERT INTO beauty(id,NAME,phone)
VALUES(18,'宋茜','1919191919'),(19,'赵李颖','198298298');
  • 2.方式1支持子查询,方式2不支持
INSERT INTO beauty(id,NAME,phone)
SELECT 20,'蔡依林','78650678';

三、修改语句

1.修改单表的记录
语法:
UPDATE 表名
SET 列=值,列=值…
where 筛选条件

2.修改多表的记录
语法:
update 表名
inner|left outer|right outer join 表2
on 筛选条件
set 列=值,列=值,…
where 筛选条件

案例6:修改单表记录

UPDATE beauty
SET NAME='蔡林林',phone='0000000'
WHERE id = 20;

UPDATE beauty
SET phone='0000001',NAME='蔡林林'
WHERE id = 20;

注意:修改多表记录,所谓多表记录,其实是将多个表连接之后再修改的意思

案例7:修改张无忌的女友的电话号码为1114

UPDATE beauty g
INNER JOIN boys b
ON g.`boyfriend_id` = b.`id`
SET g.`phone` = 1114
WHERE b.`boyName` = '张无忌'; 

案例8:修改没有男朋友的女神的男友编号为2

UPDATE beauty g
LEFT OUTER JOIN boys b
ON g.`boyfriend_id` = b.`id`    #通过连接条件g.`boyfriend_id` = b.`id`
			     				 #连接两个表,beauty为主表
SET g.`boyfriend_id` = 2
WHERE b.`id` IS NULL;	        #where放在set之后

四、删除语句

  • 方式一:delete (每次删除以为最小单位,或者直接删除整张表)

  • 语法

    单表的删除
    语法:
    	delete from 表名(不加where 筛选条件时删除整张表) 
    	where 筛选条件
    	
    多表的删除
    语法:
    	delete1的别名,2的别名(注:如果只删除表1中的内容,就只写上表1别名)
    	from1 别名
    	inner | left outer | right outer join2 别名
    	on 连接条件
    	where 筛选条件
    
  • 方式二:truncate (只能用于删除整个表)

  • 语法:

    truncate table 表名; 
    
4.1 单表的删除

案例9 删除手机号以9结尾的女神信息 (我给beauty加了别名,发现并不符合语法)

DELETE FROM beauty WHERE phone LIKE '%9';
4.2 多表的删除

案例10 删除张无忌的女友的信息

DELETE g
FROM beauty g
INNER JOIN boys b
ON g.`boyfriend_id` = b.`id`
WHERE b.`boyName`= '张无忌';

案例11 删除黄晓明及其女友的信息

DELETE g,b
FROM beauty g
INNER JOIN boys b
ON g.`boyfriend_id` = b.`id`
WHERE b.`boyName` = '黄晓明';

SELECT * FROM boys;
SELECT * FROM beauty;

案例12:魅力值大于100的男神信息删除

注意:如果使用truncate,则不可以加where筛选条件,所以上述的案例很难满足

TRUNCATE TABLE boys; --直接删除boys表

五、delete与truncate的比较【面试题】

  1. delete 可以加where 筛选条件;truncate不可以加,且只能删除整张表
  2. truncate删除的效率高一点点
  3. 如果表中有自增长列:
    使用delete删除数据后,再插入数据,自增长列从断点处开始
    使用truncate删除数据后,再插入数据,自增长列从1开始:如下案例13
  4. truncate删除没有返回值,delete删除有返回值
  5. truncate删除后不能回滚,但是delete删除后可以回滚

案例13:

DELETE FROM boys;
SELECT * FROM boys;
INSERT INTO boys(boyName,userCP)
VALUES('张飞',100),('关羽',100),('刘备',100);

TRUNCATE TABLE boys;
SELECT * FROM boys;
INSERT INTO boys(boyName,userCP)
VALUES('张飞',100),('关羽',100),('刘备',100);

你可能感兴趣的:(MySQL学习,mysql,sql,DML,数据库管理语言,增删改)