07-数据处理之增删改


数据操纵语言-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语法:
UPDATE1 别名, 表2 别名    #需要更改哪个就写哪个
SET column= value[, column = value, ...]
WHERE 连接条件
AND 筛选条件;

#sql99语法
UPDATE1 别名
INNER|LEFT|RIGHT join2 别名
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语法:
DELETE1的别名, 表2的别名    
FROM1 别名,2 别名 
WHERE 连接条件
AND 筛选条件;

#sql99语法
DELETE1的别名, 表2的别名    
FROM1 别名
INNER|LEFT|RIGHT join2 别名
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. 案例讲解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值