DML语句

1
2
3
4
5
6
/*
	数据操作语言:
	插入:INSERT
	修改:UPDATE
	删除:DELETE
*/

1、插入语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#方式一:经典的插入
    /*
        语法:
            INSERT INTO 表名(列名,...) VALUES (值1,...);
    */
	USE girls;
	SELECT * FROM beauty;
	#1.插入的值的类型要与列的类型一致或兼容
		INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
		VALUES(13, '唐艺昕', '女','1990-4-23', '1898888888', NULL, 2);

	#2.不能为null的列必须插入值。可以为null的列如何插入值?
		#方式一:
			INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
			VALUES(13, '唐艺昕', '女', '1990-4-23', '1898888888', NULL, 2);
		#方式二:
			INSERT INTO beauty(id, NAME, sex, phone)
			VALUES(15, '娜扎', '女', '1388888888');

	#3.列的顺序可以调换,与原表不同
		INSERT INTO beauty(NAME, sex,id, phone)
		VALUES('蒋欣', '女', 16, '110');    
		
	#4.列数和值的个数必须一致
		INSERT INTO beauty(NAME, sex, id, phone)
		VALUES('关晓彤', '女', 17, '110');

	#5.可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
		INSERT INTO beauty
		VALUES(18, '张飞', '男', NULL, '119', NULL, NULL);

#方式二:
    /*
        语法:
            insert into 表名
            set 列名=值,列名=值,...
    */
	INSERT INTO beauty
	SET id = 19, NAME = '刘涛', phone = '999';   

#两种方式大pk ★
	#1、方式一支持插入多行,方式二不支持
		INSERT INTO beauty
		VALUES(23, '唐艺昕1', '女', '1990-4-23', '1898888888', NULL, 2)
		,(24, '唐艺昕2', '女', '1990-4-23', '1898888888', NULL, 2)
		,(25, '唐艺昕3', '女', '1990-4-23', '1898888888', NULL, 2);

	#2、方式一支持子查询,方式二不支持
		INSERT INTO beauty(id, NAME, phone)
		SELECT 26, '宋茜', '11809866';

		INSERT INTO beauty(id, NAME, phone)
		SELECT id, boyname, '1234567'
		FROM boys WHERE id < 3;

2、修改语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
	1.修改单表的记录★
		语法:
			UPDATE 表名
			SET 列=新值, 列=新值,...
			WHERE 筛选条件;
	2.修改多表的记录【补充】
		语法:
			sql92语法:
				UPDATE 表1 别名, 表2 别名
				SET 列 = 值,...
				WHERE 连接条件
				AND 筛选条件;
			sql99语法:
				UPDATE 表1 别名
				INNER | LEFT | RIGHT JOIN 表2 别名
				ON 连接条件
				SET 列=值,...
				WHERE 筛选条件;
*/

#1.修改单表的记录
	#案例1:修改beauty表中姓唐的女神的电话为13899888899
		UPDATE beauty SET phone = '13899888899'
		WHERE name LIKE '唐%';
	#案例2:修改boys表中id为2的名称为张飞,魅力值 10
		UPDATE boys SET boyName = '张飞', userCP = 10
        WHERE id = 2;
    
#2.修改多表的记录
	#案例 1:修改张无忌的女朋友的手机号为114
		UPDATE boys bo
        INNER JOIN beauty b ON b.boyfriend_id = bo.id
        SET b.phone = '114'
        WHERE bo.boyName = '张无忌';
	#案例2:修改没有男朋友的女神的男朋友编号都为2号
		UPDATE boys bo
        RIGHT JOIN beauty b ON b.boyfriend_id = bo.id
        SET b.boyfriend_id = 2
        WHERE bo.id IS NULL;

3、删除语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/*
	方式一:delete
		语法:
			1、单表的删除【★】
				DELETE FROM 表名 WHERE 筛选条件
			2、多表的删除【补充】
				sql92语法:
					DELETE 表1的别名,表2的别名
					FROM 表1 别名,表2 别名
					WHERE 连接条件
					AND 筛选条件;
				sql99语法:
					DELETE 表1的别名,表2的别名
					FROM 表1 别名
					INNER | LEFT | RIGHT JOIN 表2 别名 ON 连接条件
					WHERE 筛选条件;
	方式二:TRUNCATE(删除整个表的数据)
		语法:TRUNCATE TABLE 表名;
*/
#方式一:delete
	#1.单表的删除
		#案例:删除手机号以9结尾的女神信息
			DELETE FROM beauty WHERE phone LIKE '%9';
	#2.多表的删除
		#案例1:删除张无忌的女朋友的信息
			DELETE b
			FROM beauty b
			INNER JOIN boys bo ON b.boyfriend_id = bo.id
			WHERE bo.boyName = '张无忌';
			
        #案例2:删除黄晓明的信息以及他女朋友的信息
			DELETE b, bo
            FROM beauty b
            INNER JOIN boys bo ON b.boyfriend_id = bo.id
            WHERE bo.boyName = '黄晓明';
	
#方式二:truncate语句
	#案例:将男神信息全部删除
		TRUNCATE TABLE boys;
    
#DELETE pk TRUNCATE【面试题★】
	/*
		1.DELETE 可以加 WHERE 条件,TRUNCATE不能加
		2.TRUNCATE删除,效率高一丢丢
		3.假如要删除的表中有自增长列,
			如果用DELETE删除后,再插入数据,自增长列的值从断点开始,
			而TRUNCATE删除后,再插入数据,自增长列的值从1开始。
		4.TRUNCATE删除没有返回值,DELETE删除有返回值
		5.TRUNCATE删除不能回滚,DELETE删除可以回滚.
	*/    
    
	DELETE FROM boys;
    
	INSERT INTO boys (boyname,usercp)
	VALUES('张飞', 100), ('刘备', 100), ('关云长', 100);  #自增长列从断点开始
    
	TRUNCATE TABLE boys;
    
	INSERT INTO boys (boyname,usercp)
	VALUES('张飞', 100), ('刘备', 100), ('关云长', 100);  #自增长列从1开始

习题

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#1.	运行以下脚本创建表my_employees
	USE myemployees;
	CREATE TABLE my_employees(
		Id INT(10),
		First_name VARCHAR(10),
		Last_name VARCHAR(10),
		Userid VARCHAR(10),
		Salary DOUBLE(10,2)
	);
	CREATE TABLE users(
		id INT,
		userid VARCHAR(10),
		department_id INT
	);
#2.	显示表my_employees的结构
	DESC my_employees;

#3.	向my_employees表中插入下列数据
/* 
	ID	FIRST_NAME	LAST_NAME	USERID	SALARY
	1	patel		Ralph		Rpatel	895
	2	Dancs		Betty		Bdancs	860
	3	Biri		Ben		Bbiri	1100
	4	Newman		Chad		Cnewman	750
	5	Ropeburn	Audrey		Aropebur	1550 
*/

	#方式一:
		INSERT INTO my_employees
		VALUES
			(1, 'patel', 'Ralph', 'Rpatel', 895),
			(2, 'Dancs', 'Betty', 'Bdancs', 860),
			(3, 'Biri', 'Ben', 'Bbiri', 1100),
			(4, 'Newman', 'Chad', 'Cnewman', 750),
			(5, 'Ropeburn', 'Audrey', 'Aropebur', 1550);
		DELETE FROM my_employees;
	#方式二:
		INSERT INTO my_employees
		SELECT 1, 'patel', 'Ralph', 'Rpatel', 895 UNION
		SELECT 2, 'Dancs', 'Betty', 'Bdancs', 860 UNION
		SELECT 3, 'Biri', 'Ben', 'Bbiri', 1100 UNION
		SELECT 4, 'Newman', 'Chad', 'Cnewman', 750 UNION
		SELECT 5, 'Ropeburn', 'Audrey', 'Aropebur', 1550;
				
#4.向users表中插入数据
		/*
			1	Rpatel	10
			2	Bdancs	10
			3	Bbiri	20
			4	Cnewman	30
			5	Aropebur	40
		*/

	INSERT INTO users
	VALUES
		(1, 'Rpatel', 10),
		(2, 'Bdancs', 10),
		(3, 'Bbiri', 20);

#5.将3号员工的last_name修改为“drelxer”
	UPDATE my_employees SET last_name = 'drelxer' WHERE id = 3;
	
#6.将所有工资少于900的员工的工资修改为1000
	UPDATE my_employees SET salary=1000 WHERE salary < 900;

#7.将userid 为Bbiri的user表和my_employees表的记录全部删除
	DELETE u, e
	FROM users u
	JOIN my_employees e ON u.userid = e.Userid
	WHERE u.userid = 'Bbiri';

#8.删除所有数据
	DELETE FROM my_employees;
	DELETE FROM users;

#9.检查所作的修正
	SELECT * FROM my_employees;
	SELECT * FROM users;

#10.清空表my_employees
	TRUNCATE TABLE my_employees;