数据操纵语言-DML(Data Manipulation Language) 可以在下列条件下执行:
- 向表中插入数据
- 修改现存数据
- 删除现存数据
事务是由完成若干项工作的DML语句组成的
1. 插入数据
INSERT 语句:使用INSERT 语句向表中插入数据。
语法一:
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
特点:
(1)插入的值的类型要与列的类型一致或者兼容(字符和日期型数据应包含在单引号中)
INSERT INTO beauty(id, NAME, sex, borndate, phone, photo, boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','18988888888', NULL,2);
(2)不可以为null的列必须插入值,可以为null的列如何插入值呢?
-
隐式方式: 在列名表中省略该列的值
INSERT INTO departments (department_id, department_name □ □) VALUES (30, 'Purchasing');
-
显示方式: 在VALUES子句中指定空值。
INSERT INTO departments VALUES (100, 'Finance', NULL, NULL);
(3)列的顺序可以调换(但是插入的值的类型要与列的类型一致或者兼容)
INSERT INTO beauty(NAME,sex, id, phone)
VALUES ('蒋欣', '女', 16, '110');
(4)列数和值的个数必须一致
INSERT INTO beauty(NAME,sex, id, phone, boyfriend_id)
VALUES('关晓彤','女',17,'110'); #会报错!
(5)可以省略列名,默认所有列,而且列的顺序和表中列的顺序一致
INSERT INTO beauty
VALUES(18, '张飞','男',NULL,'119',NULL,NULL);
语法二:
INSERT INTO 表名
SET 列名=值,列名=值,...
INSERT INTO beauty
SET id=9,NAME='刘涛',phone='999';
两种方式对比:
(1)方法一支持插入多行
INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','18988888888', NULL,2)
,(24,'唐艺昕2','女','1990-4-23','18988888888', NULL,2)
,(25,'唐艺昕3','女','1990-4-23','18988888888', NULL,2)
(2)方法一支持子查询,方法二不支持
不必书写VALUES 子句。
子查询中的值列表应与INSERT 子句中的列名对应
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','11809866'; #将结果集插入上表
#从其它表中拷贝数据
INSERT INTO beauty(id,NAME,phone)
SELECT id,boyname,'1234566'
FROM boys
WHERE id<3;
INSERT INTO emp2
SELECT *
FROM employees
WHERE department_id = 90;
INSERT INTO sales_reps(id, name, salary, commission_pct)
SELECT employee_id, last_name, salary, commission_pct
FROM employees
WHERE job_id LIKE '%REP%';
2. 更改数据
UPDATE 语句:使用UPDATE 语句更新数据。
2.1 修改单表数据
语法:
UPDATE table
SET column= value[, column = value, ...]
[WHERE condition];
使用 WHERE子句指定需要更新的数据。如果省略WHERE 子句,则表中的所有数据都将被更新
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
1 row updated.
UPDATE copy_emp
SET department_id = 110;
22 rows updated.
2.2 修改多表数据
#sql92语法:
UPDATE 表1 别名, 表2 别名 #需要更改哪个就写哪个
SET column= value[, column = value, ...]
WHERE 连接条件
AND 筛选条件;
#sql99语法
UPDATE 表1 别名
INNER|LEFT|RIGHT join 表2 别名
ON 连接条件
SET column= value[, column = value, ...]
WHERE 筛选条件;
#案例1:修改张无忌的女朋友的手机号为114
UPDATE boys bo
INNER JOIN beauty b
ON bo.'id'=b.'boyfriend_id'
SET b.'phone'='114'
WHERE bo.'boyname'='张无忌';
#案例2:修改没有男朋友的女神的男朋友编号都为2号
SELECT boys bo
RIGHT JOIN beauty b
ON bo.'id'=b.'boyfriend_id'
SET b.'boyfriend_id'=2
WHERE b.'id' IS NULL;
3. 删除数据
使用DELETE 语句从表中删除数据。
DELETE FROM table
[WHERE condition];
使用WHERE 子句删除指定的记录, 如果省略WHERE 子句,则表中的全部数据将被删除
DELETE FROM departments
WHERE department_name= 'Finance';
1 row deleted.
DELETE FROM copy_emp;
22 rows deleted.
3.1 单表的删除
DELETE FROM 表名
WHERE 筛选条件
3.2 多表的删除
#sql92语法:
DELETE 表1的别名, 表2的别名
FROM 表1 别名, 表2 别名
WHERE 连接条件
AND 筛选条件;
#sql99语法
DELETE 表1的别名, 表2的别名
FROM 表1 别名
INNER|LEFT|RIGHT join 表2 别名
ON 连接条件
WHERE 筛选条件;
# 案例:删除张无忌的女朋友的信息
DELETE b
FROM beauty b
INNER JOIN boys bo
ON b.'boyfriend_id'=bo.'id'
WHERE bo.'boyName'='张无忌';
#删除张无忌的信息以及他女朋友的信息
DELETE b,bo
FROM beauty b
INNER JOIN boys bo
ON b.'boyfriend_id'=bo.'id'
WHERE bo.'boyName'='张无忌';
3.3 truncate删除
TRUNCATE table 表名;
truncate不能加筛选条件
delete与truncate的不同(面试重点)
(1)delete 可以加where条件,truncate不能加
(2)truncate删除,效率高一点
(3)假如要删除的表中有自增长序列,如果用delete删除后再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始
(4)truncate删除后没有返回值,delete删除后有返回值
(5)truncate删除不能回滚,delete删除可以回滚
4. 案例讲解