- 一.添加数据(INSERT)
- 方法1
- 一次性添加多行
- 方法2
- 一次性添加多行
- 方法3
- 三.删除数据(DELETE)
- 四.小结
- 五.计算列(MySQL8.0新特性)
- 六.练习
- 1.创建数据库test01_library
- 2.创建表books
- 3.插入信息
- 4.将小说类型novel的价格都增加5
- 5.将名为EmmaT的书价格改为40,说明改为drama
- 6.删除库存为0的记录
- 7.统计书名包含a的书
- 8.统计书名包含a的书的数量和库存总量
- 9.找出novel类型的书,并按照价格降序排序
- 10.查询图书信息,并按照库存量降序排列,若库存量相同就按照note升序排列
- 11.按照note分组并统计数量
- 12.查询书名达到10个字符的书,不包括空格
一.添加数据(INSERT)
1.按顺序添加数据
(1)语法:INSERT INTO 表名 VALUES();
(2)values后的括号内填入数据,逗号隔开
(3)要严格按照字段声明的顺序
(4)必须添加所有字段
(5)添加多行就要在values后写多个括号
2.额外设置顺序并按顺序添加数据
(1)语法:INSERT INTO 表名(字段1,字段2) VALUES(字段1的值,字段2的值);
(2)值的添加顺序要严格按照表名后括号内指定的顺序
(3)可以不填入所有字段,没赋值的字段为NULL
(4)添加多行就要在values后写多个括号
3.将查询的结果添加到表中
(1)语法:INSERT INTO 表名(字段1,字段2) 后加SELECT语句
(2)SELECT中的字段必须于INSERT语句中的字段一一对应
(3)SELECT语句根据需求添加
(4)若查询表中的字段长度大于新表的字段长度会报错
- 比如varchar(20)->varchar(15)会报错
4.代码实现
``sql USE practice; SELECT * FROM
text; CREATE TABLE IF NOT EXISTS
text( id INT,
name` VARCHAR(15), hire_data DATE, salary DOUBLE(10,2) );方法1
INSERT INTOtext
VALUES(1,’Tom’,’2001-10-25’,5000.32);一次性添加多行
INSERT INTOtext
VALUES (3,’TIm’,’2001-01-25’,5000.32), (4,’Wom’,’2001-10-24’,5050.32), (5,’Jom’,’2001-10-23’,5010.32);
方法2
INSERT INTO text
(name
,hire_data,id,salary)
VALUES(‘Jack’,’2002-08-09’,2,6000.00);
SELECT * FROM text
;
一次性添加多行
INSERT INTO text
(name
,hire_data,id,salary)
VALUES
(‘TIm’,’2001-01-25’,5,5000.32),
(‘Wom’,’2001-10-24’,6,5050.32),
(‘Jom’,’2001-10-23’,7,5010.32);
方法3
INSERT INTO text
(name
,hire_data,id,salary)
SELECT employ_name,hire_date,employ_id,salary
FROM employees
WHERE department_id IN (60,70);
<a name="nzmM9"></a>
# 二.更新数据(UPDATE)
<a name="vM7fd"></a>
#### 1.更新一个字段:
(1)语法:UPDATE 表名 SET 字段名=要修改的值 WHERE 筛选条件;<br />(2)一般都要指定筛选条件,不然就把该字段所有行都更新了<br />(3)可以实现批量修改
<a name="olaCX"></a>
#### 2.更新多个字段:
(1)语法:UPDATE 表名 SET 字段名1=要修改的值,字段名2=要修改的值 ... WHERE 筛选条件;
- 多个字段用逗号间隔
(2)CURDATE():函数,作用是返回当前系统日期
<a name="IKa0O"></a>
#### 3.注意:更新可能会因为约束的原因导致失败
<a name="UKtEo"></a>
#### 4.代码实现
```sql
#修改单个字段
UPDATE `text`
SET hire_data=CURDATE()#返回当前日期
WHERE id=5;
#修改多个字段
UPDATE `text`
SET hire_data=CURDATE(),salary=6000.99
WHERE id=5;
#将姓名中有T的提薪20%
UPDATE `text`
SET salary=1.2*salary
WHERE `name` LIKE '%T%';
三.删除数据(DELETE)
1.语法:DELETE FROM 表名 WHERE 筛选条件;
2.删除可能会因为约束的原因导致失败
3.代码实现:
DELETE FROM `text`
WHERE id=3;
四.小结
1.DML操作默认情况下,执行完会自动提交数据。如果希望执行完成以后不自动提交数据,则需要使用SET autocommit = False
五.计算列(MySQL8.0新特性)
1.计算列就是根据给定的其他列来计算值
-
2.CREATE和ALTER语句都可以增加计算列
3.语法:列名 数据类型 GENERATED ALWAYS AS (计算方法) VIRTUAL
c INT GENERATED ALWAYS AS (a+b) VIRTUAL
4.代码:
CREATE TABLE ttb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a+b) VIRTUAL
);
INSERT INTO ttb1(a,b) VALUES (100,200);
SELECT * FROM ttb1;
六.练习
```sql
1.创建数据库test01_library
CREATE DATABASE IF NOT EXISTS test01_library CHARACTER SET ‘utf8’; USE test01_library;
2.创建表books
CREATE TABLE IF NOT EXISTS books( id INT,
name
VARCHAR(50),authors
VARCHAR(100), price FLOAT, pubdate YEAR, note VARCHAR(100), num INT );
3.插入信息
INSERT INTO books VALUES (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);
4.将小说类型novel的价格都增加5
UPDATE books SET price=price+5 WHERE note=’novel’;
5.将名为EmmaT的书价格改为40,说明改为drama
UPDATE books
SET price=40,note=’drama’
WHERE name
=’EmmaT’;
6.删除库存为0的记录
DELETE FROM books WHERE num=0;
7.统计书名包含a的书
SELECT name
FROM books
WHERE name
LIKE ‘%a%’;
8.统计书名包含a的书的数量和库存总量
SELECT COUNT(*),SUM(num)
FROM books
WHERE name
LIKE ‘%a%’;
9.找出novel类型的书,并按照价格降序排序
SELECT * FROM books WHERE note=’novel’ ORDER BY price DESC;
10.查询图书信息,并按照库存量降序排列,若库存量相同就按照note升序排列
SELECT * FROM books ORDER BY num DESC,note ASC;
11.按照note分组并统计数量
SELECT note,COUNT(*) FROM books GROUP BY note;
12.查询书名达到10个字符的书,不包括空格
SELECT name
FROM books
WHERE CHAR_LENGTH(REPLACE(name
,’ ‘,’’))>=10;
```