目录
2.3如果省略 WHERE 子句,则表中的所有数据都将被更新。
1. 插入数据
数据操作语言[插入]
语法
全列插入[不推荐]
insert into 表名 values | value (值,值,值...)
值的数量要等于表的所有列的数量
值的类型和顺序要和表的类的类型和顺序一一对应
指定列插入[推荐]
insert into 表名 (列名,列名...) values | value (值,值,值...)
值的数量要等于表的指定的列的数量
值的类型和顺序要和[指定列的]顺序一一对应
多行插入
insert into 表名 (列名,列名...) values | value (值,值,值...) ,(值,值,值...),(值,值,值...)
insert into 表名 values | value (值,值,值...) ,(值,值,值...),(值,值,值...)
注意
1. values 或者 value 推荐使用values
2. 插入的是字符串或者时间类型 ''
3. 值的顺序和类型要和表的列名或者指定的列名一一对应
1.1方式1:VALUES的方式添加
使用这种语法一次只能向表中插入一条数据。
INSERT INTO 表名
VALUES (value1,value2,....);
值列表中需要为表的每一个字段指定值,并且值的顺序必须和数据表中字段定义时的顺序相同。
举例
INSERT INTO departments
VALUES (70, 'Pub', 100, 1700);
1.2情况2:为表的指定字段插入数据
INSERT INTO 表名(column1 [, column2, …, columnn])
VALUES (value1 [,value2, …, valuen]);
为表的指定字段插入数据,就是在INSERT 语句中只向部分字段中插入值,而其他字段的值为表定义时的默认值。在 INSERT 子句中随意列出列名,但是一旦列出, VALUES 中要插入的 value1,....valuen 需要与column1,...columnn列一一对应。如果类型不同,将无法插入,并且 MySQL 会产生错误。
举例
INSERT INTO departments(department_id, department_name)
VALUES (80, 'IT');
1.3情况3:同时插入多条记录
INSERT语句可以同时向数据表中插入多条记录,插入时指定多个值列表,每个值列表之间用逗号分隔开
语法格式
INSERT INTO table_name
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
或
INSERT INTO table_name(column1 [, column2, …, columnn])
VALUES
(value1 [,value2, …, valuen]),
(value1 [,value2, …, valuen]),
……
(value1 [,value2, …, valuen]);
举例
INSERT INTO emp(emp_id,emp_name)
VALUES (1001,'shkstart'),
(1002,'atguigu'),
(1003,'Tom');
1.4使用INSERT返回含义
使用
INSERT
同时插入多条记录时,
MySQL
会返回一些在执行单行插入时没有的额外信息,这些信息的含义如下:
● Records :表明插入的记录条数。● Duplicates :表明插入时被忽略的记录,原因可能是这些记录包含了重复的主键值。● Warnings :表明有问题的数据值,例如发生数据类型转换。
一个同时插入多行记录的INSERT 语句等同于多个单行插入的 INSERT 语句,但是多行的 INSERT 语句在处理过程中 效率更高 。因为 MySQL 执行单条 INSERT 语句插入多行数据比使用多条 INSERT 语句快,所以在插入多条记录时最好选择使用单条INSERT 语句的方式插入。
小结
VALUES 也可以写成 VALUE ,但是 VALUES 是标准写法。字符和日期型数据应包含在单引号中。
1.3 方式2:将查询结果插入到表中
INSERT还可以将SELECT语句查询的结果插入到表中,此时不需要把每一条记录的值一个一个输入,只需要使用一条INSERT语句和一条SELECT语句组成的组合语句即可快速地从一个或多个表中向一个表中插入多行。
语法格式
INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
- 在 INSERT 语句中加入子查询。
- 不必书写 VALUES 子句。
- 子查询中的值列表应与 INSERT 子句中的列名对应。
举例
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 表名 set 列名 = 新值 , 列名 = 值 , 列名 = 值 ...
条件修改(条件筛选行)
update 表名 set 列名 = 新值 , 列名 = 值 , 列名 = 值 ... where 条件
注意
1. 不添加where,代表修改一个表中的所有行的数据,反之,只修改符合where条件的
2. 如果修改多个列 set 列名 = 值 , 列名 = 值
2.1语法
UPDATE table_name
SET column1=value1, column2=value2, … , column=valuen
[WHERE condition]
- 可以一次更新多条数据。
- 如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
2.2使用 WHERE 子句指定需要更新的数据。
UPDATE employees
SET department_id = 70
WHERE employee_id = 113;
2.3如果省略 WHERE 子句,则表中的所有数据都将被更新。
UPDATE copy_emp
SET department_id = 110;
2.4更新中的数据完整性错误
UPDATE employees
SET department_id = 55
WHERE department_id = 110;
3. 删除数据(使用 DELETE 语句从表中删除数据)
数据操作语言[删除]
语法
全表删除
delete from 表名;
条件行删除
delete from 表名 where 条件;
3.1语法
DELETE FROM table_name
[WHERE <condition>
table_name 指定要执行删除操作的表; “[WHERE ]” 为可选参数,指定删除条件,如果没有 WHERE 子句,DELETE语句将删除表中的所有记录。
3.2使用 WHERE 子句删除指定的记录。
DELETE FROM departments
WHERE department_name = 'Finance';
3.3如果省略 WHERE 子句,则表中的全部数据将被删除
DELETE FROM copy_emp;
3.4删除中的数据完整性错误
DELETE FROM departments
WHERE department_id = 60;
四大总结
/*
3.1 数据操作语言[插入]
语法
全列插入[不推荐]
insert into 表名 values | value (值,值,值...)
值的数量要等于表的所有列的数量
值的类型和顺序要和表的类的类型和顺序一一对应
指定列插入[推荐]
insert into 表名 (列名,列名...) values | value (值,值,值...)
值的数量要等于表的指定的列的数量
值的类型和顺序要和[指定列的]顺序一一对应
多行插入
insert into 表名 (列名,列名...) values | value (值,值,值...) ,(值,值,值...),(值,值,值...)
insert into 表名 values | value (值,值,值...) ,(值,值,值...),(值,值,值...)
注意
1. values 或者 value 推荐使用values
2. 插入的是字符串或者时间类型 ''
3. 值的顺序和类型要和表的列名或者指定的列名一一对应
练习
# 1.插入一名学生的所有信息,包括学号、名字、年龄、生日和身高。
# 2.插入一名学生的学号、名字、年龄,其他列使用默认值。
# 3.插入两名学生的信息,包括学号、名字、年龄、生日和身高。
# 4.插入一名学生的信息,只提供学号、名字和年龄,其他列为空值。
*/
#创建数据库dml_d1
CREATE DATABASE IF NOT EXISTS dml_d1;
#指定使用数据库
USE dml_d1;
CREATE TABLE students (
stu_id INT COMMENT '学号',
stu_name VARCHAR(100) COMMENT '姓名',
stu_age TINYINT UNSIGNED COMMENT '年龄',
stu_birthday DATE COMMENT '生日',
stu_height DECIMAL(4, 1) DEFAULT 200 COMMENT '身高,保留一位小数'
);
# 1.插入一名学生的所有信息,包括学号、名字、年龄、生日和身高。
INSERT INTO students VALUES (1,'二狗子',18,'1990-06-06',185.5);
INSERT INTO students(stu_name,stu_age,stu_birthday,stu_height,stu_id) VALUES ('二狗子',18,'1990-06-06',185.5,2);
# 2.插入一名学生的学号、名字、年龄,其他列使用默认值。
INSERT INTO students (stu_id,stu_name,stu_age) VALUES (3,'驴蛋蛋',29);
# 3.插入两名学生的信息,包括学号、名字、年龄、生日和身高。
INSERT INTO students VALUES (4,'狗剩子',20,'2020-02-20',223.5),(5,'石头子',18,'2020-02-20',223.5);
# 4.插入一名学生的信息,只提供学号、名字和年龄,其他列为空值。
INSERT INTO students(stu_id,stu_name,stu_age,stu_birthday,stu_height) VALUES
(6,'小笨蛋',20,NULL,NULL);
/*
3.2 数据操作语言[修改]
语法
全表修改(全行修改)
update 表名 set 列名 = 新值 , 列名 = 值 , 列名 = 值 ...
条件修改(条件筛选行)
update 表名 set 列名 = 新值 , 列名 = 值 , 列名 = 值 ... where 条件
注意
1. 不添加where,代表修改一个表中的所有行的数据,反之,只修改符合where条件的
2. 如果修改多个列 set 列名 = 值 , 列名 = 值
练习
# 1.将学号为8的学生的姓名改为'黄六'。
# 2.将年龄小于20岁的学生的身高增加2.0。
# 3.将学号为11的学生的生日修改为'2003-07-10',且年龄改成21。
# 4.将所有学生的年龄减少1岁。
*/
# 插入学生数据准备数据
INSERT INTO students (stu_id, stu_name, stu_age, stu_birthday, stu_height)
VALUES
(6, '张三', 21, '2002-05-10', 175.5),
(7, '李四', 20, '2003-02-15', 168.0),
(8, '王五', 22, '2001-09-20', 180.2),
(9, '赵六', 19, '2004-03-08', 165.8),
(10, '钱七', 23, '2000-12-01', 172.3),
(11, '孙八', 20, '2003-06-25', 160.5),
(12, '周九', 21, '2002-11-18', 175.0),
(13, '吴十', 22, '2001-04-30', 168.7),
(14, '郑十一', 19, '2004-08-12', 185.5),
(15, '王十二', 23, '2000-07-05', 170.1);
# 1.将学号为8的学生的姓名改为'黄六'。
UPDATE students SET stu_name = '黄六' WHERE stu_id = 8;
# 2.将年龄小于20岁的学生的身高增加2.0 (原有基础上添加2.0 )。
UPDATE students SET stu_height = stu_height + 2 WHERE stu_age < 20; # - * / 可以使用原列进行运算
# 3.将学号为11的学生的生日修改为'2003-07-10',且年龄改成21。
UPDATE students SET stu_birthday = '2003-07-10' , stu_age = 21 WHERE stu_id = 11;
# 4.将所有学生的年龄增加1岁。
UPDATE students SET stu_age = stu_age + 1 ;
/*
3.3 数据操作语言[删除]
语法
全表删除
delete from 表名;
条件行删除
delete from 表名 where 条件;
注意
1. 开发中很少使用全表删除
2. delete删除和清空表truncate 删除,都会删除表中的全部数据,truncate 不仅删除表数据,会删除数据库id的最大记录值!
练习
# 1.将年龄大于23的学员移除。
# 2.将身高高于200且学号大于10的数据移除
# 3.将身高高于200或学号大于10的数据移除
# 4.将所有学生数据移除
*/
# 1.将年龄大于23的学员移除。
DELETE FROM students WHERE stu_age > 23;
# 2.将身高高于200且学号大于10的数据移除
DELETE FROM students WHERE stu_height > 200 AND stu_id > 10;
# 3.将身高高于200或学号大于10的数据移除
DELETE FROM students WHERE stu_height > 200 OR stu_id > 10;
# 4.将所有学生数据移除
DELETE FROM students;