MySQL---增删改
我只想卷死各位,或者被各位卷死,在此特别感谢康师傅的MySQL教程
插入数据
方式1:VALUES的方式添加
为表的所有字段按默认顺序插入数据
1
2INSERT INTO 表名
VALUES (value1,value2,....);同时插入多条记录
1
2
3
4
5
6
7
8
9
10
11
12
13INSERT 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]);举例
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-- 准备工作
USE atguigudb;
CREATE TABLE IF NOT EXISTS emp1(
id INT,
`name` VARCHAR(15),
hire_date DATE,
salary DOUBLE(10,2)
);
DESC emp1;
-- 1. 添加数据
-- ① 没有指明添加的字段
INSERT INTO emp1
VALUES(1,'Tom','2022-01-15',5000); -- 注意:一定要按照声明的字段的先后顺序添加
-- ② 指明要添加的字段 (推荐)
INSERT INTO emp1(id,`name`,hire_date,salary)
VALUES(2,'Jim','2022-07-15',8000);
-- 没有进行赋值的hire_date 的值为 null
INSERT INTO emp1(id,`name`,salary)
VALUES(3,'Jarry',10000);
-- ③ 同时插入多条记录 (推荐)
INSERT INTO emp1(id,`name`,salary)
VALUES
(4,'张三',6000),
(5,'李四',7000)
方式2:将查询结果插入到表中
基本语法如下
1
2
3
4
5
6INSERT INTO 目标表名
(tar_column1 [, tar_column2, ..., tar_columnn])
SELECT
(src_column1 [, src_column2, ..., src_columnn])
FROM 源表名
[WHERE condition]在 INSERT 语句中加入子查询。
- 不必书写
VALUES
子句。 子查询中的值列表应与 INSERT 子句中的列名对应。
举例
1
2
3
4INSERT INTO emp1(id,`name`,hire_date,salary)
SELECT employee_id,last_name,hire_date,salary -- 查询的字段一定要与添加到的表的字段一一对应
FROM employees
WHERE department_id IN (60,70);
更新数据
- 使用 UPDATE 语句更新数据。语法如下:
1
2
3UPDATE table_name
SET column1=value1, column2=value2, ... , column=valuen
[WHERE condition] - 可以一次更新多条数据。
如果需要回滚数据,需要保证在DML前,进行设置:SET AUTOCOMMIT = FALSE;
举例
1
2
3
4
5
6
7
8
9
10
11
12
13UPDATE emp1
SET hire_date = CURDATE()
WHERE id = 3;
-- 同时修改一条数据的多个字段
UPDATE emp1
SET hire_date = CURDATE(),salary = 8000
WHERE id = 4;
-- 题目:将表中姓名带a的提薪20%
UPDATE emp1
SET salary = salary * 1.2
WHERE `name` LIKE "%a%";
删除数据
使用
DELETE
语句从表中删除数据1
DELETE FROM table_name [WHERE <condition>];
使用
WHERE
子句删除指定的记录。1
2DELETE FROM departments
WHERE department_id = 50; --- 在删除数据时,也有可能因为约束的影响,导致删除失败
- 小结:DML操作默认情况下,执行完以后都会自动提交数据。
- 如果希望执行完以后不自动提交数据,则需要使用
SET autocommit = FALSE
.计算列
1
2
3
4
5
6
7
8
9
10
11
12CREATE TABLE test01(
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL -- 字段c即为计算列,此时不允许插入数据时为c赋值
);
INSERT INTO test01(a,b) --这里不能带上c哦,不然会报错The value specified for generated column 'c' in table 'test01' is not allowed.
VALUES
(10,20),
(200,520);
SELECT * FROM test01; -- 查看表中内容时,c的结果已经自动计算完毕了综合案例
1 | CREATE DATABASE test01_library; |
字段名 | 字段说明 | 数据类型 |
---|---|---|
id | 书编号 | INT |
name | 书名 | VARCHAR(50) |
authors | 作者 | VARCHAR(100) |
price | 价格 | FLOAT |
pubdate | 出版日期 | YEAR |
note | 说明 | VARCHAR(100) |
num | 库存 | INT |
1 | CREATE TABLE IF NOT EXISTS books( |
1 | INSERT INTO books |
1 | INSERT INTO books(id,`name`,`authors`,price,pubdate,note,num) |
1 | INSERT INTO books(id,`name`,`authors`,price,pubdate,note,num) |
id | NAME | AUTHORS | price | pubdate | note | num |
---|---|---|---|---|---|---|
1 | Tal of AAA | Dickes | 23 | 1995 | novel | 11 |
2 | EmmaT | Jane lura | 35 | 1993 | joke | 22 |
3 | Story of Jane | Jane Tim | 40 | 2001 | novel | 0 |
4 | Lovey DAY | George Byron | 20 | 2005 | novel | 30 |
5 | OLD land | Honore Blade | 30 | 2010 | law | 0 |
6 | The Battle | Upton Sara | 30 | 1999 | medicine | 40 |
7 | Rose Hood | Richard haggard | 28 | 2008 | cartoon | 28 |
1 | UPDATE books |
1 | UPDATE books |
1 | DELETE FROM books |
1 | SELECT * FROM books |
1 | SELECT COUNT(*),SUM(num) |
1 | SELECT * |
1 | SELECT * |
1 | SELECT COUNT(*),note |
1 | SELECT SUM(num) sum_num,note |
1 | SELECT * |
1 | SELECT note,SUM(num) sum_num |
1 | SELECT note,SUM(num) |
1 | SELECT * |
1 | SELECT `name` AS "书名",CASE note |
1 | SELECT `name`,num,CASE |
1 | SELECT IFNULL(note,'库存总量') AS note,SUM(num) |
1 | SELECT IFNULL(note,'合计总量') AS note,COUNT(*) |
1 | SELECT * |
1 | SELECT * |
1 | SELECT * |
1 | SELECT * |
课后练习
练习一
1. 创建数据库dbtest111 | CREATE DATABASE IF NOT EXISTS dbtest11 CHARACTER SET 'utf8'; |
1 | USE dbtest11; |
1 | DESC 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 |
1 | INSERT INTO my_employees(id,first_name,last_name,userid,salary) |
id | userid | department_id |
---|---|---|
1 | Rpatel | 10 |
2 | Bdancs | 10 |
3 | Bbiri | 20 |
4 | Cnewman | 30 |
5 | Aropebur | 40 |
1 | INSERT INTO users(id,userid,department_id) |
1 | UPDATE my_employees |
1 | UPDATE my_employees |
1 | DELETE FROM users |
1 | DELETE m,u |
1 | DELETE FROM my_employees; |
1 | SELECT * FROM users; |
1 | TRUNCATE TABLE my_employees; |
练习二
1. 使用现有数据库dbtest111 | USE dbtest11; |
字段名 | 字段说明 | 数据类型 |
---|---|---|
name | 宠物名称 | VARCHAR(20) |
owner | 宠物主人 | VARCHAR(20) |
species | 种类 | VARCHAR(20) |
sex | 性别 | CHAR(1) |
birth | 出生日期 | YEAR |
death | 死亡日期 | YEAR |
1 | CREATE TABLE IF NOT EXISTS pet( |
NAME | OWNER | species | sex | birth | death |
---|---|---|---|---|---|
Fluffy | harold | Cat | f | 2003 | 2010 |
Claws | gwen | Cat | m | 2004 | |
Buffy | Dog | f | 2009 | ||
Fang | benny | Dog | m | 2000 | |
bowser | diane | Dog | m | 2003 | 2009 |
Chirpy | Bird | f | 2008 |
1 | INSERT INTO pet |
1 | UPDATE pet |
1 | UPDATE pet |
1 | UPDATE pet |
1 | SELECT `NAME` |
1 | SELECT `NAME`,`OWNER`,death |
1 | DELETE FROM pet |
1 | SELECT * FROM pet; |
练习三
1. 使用已有的数据库dbtest111 | USE dbtest11; |
id | name | sex | tel | addr | salary |
---|---|---|---|---|---|
10001 | 张一一 | 男 | 13456789000 | 山东青岛 | 1001.58 |
10002 | 刘小红 | 女 | 13454319000 | 河北保定 | 1201.21 |
10003 | 李四 | 男 | 0751-1234567 | 广东佛山 | 1004.11 |
10004 | 刘小强 | 男 | 0755-5555555 | 广东深圳 | 1501.23 |
10005 | 王艳 | 女 | 020-1232133 | 广东广州 | 1405.16 |
1 | CREATE TABLE employee( |
1 | SELECT * |
1 | SELECT id,`name`,addr |
1 | UPDATE employee |
1 | SELECT `name` |
评论