一.添加数据(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 * FROMtext; CREATE TABLE IF NOT EXISTStext( id INT,name` VARCHAR(15), hire_data DATE, salary DOUBLE(10,2) );

    方法1

    INSERT INTO text VALUES(1,’Tom’,’2001-10-25’,5000.32);

    一次性添加多行

    INSERT INTO text 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);

  1. <a name="nzmM9"></a>
  2. # 二.更新数据(UPDATE)
  3. <a name="vM7fd"></a>
  4. #### 1.更新一个字段:
  5. (1)语法:UPDATE 表名 SET 字段名=要修改的值 WHERE 筛选条件;<br />(2)一般都要指定筛选条件,不然就把该字段所有行都更新了<br />(3)可以实现批量修改
  6. <a name="olaCX"></a>
  7. #### 2.更新多个字段:
  8. (1)语法:UPDATE 表名 SET 字段名1=要修改的值,字段名2=要修改的值 ... WHERE 筛选条件;
  9. - 多个字段用逗号间隔
  10. (2)CURDATE():函数,作用是返回当前系统日期
  11. <a name="IKa0O"></a>
  12. #### 3.注意:更新可能会因为约束的原因导致失败
  13. <a name="UKtEo"></a>
  14. #### 4.代码实现
  15. ```sql
  16. #修改单个字段
  17. UPDATE `text`
  18. SET hire_data=CURDATE()#返回当前日期
  19. WHERE id=5;
  20. #修改多个字段
  21. UPDATE `text`
  22. SET hire_data=CURDATE(),salary=6000.99
  23. WHERE id=5;
  24. #将姓名中有T的提薪20%
  25. UPDATE `text`
  26. SET salary=1.2*salary
  27. WHERE `name` LIKE '%T%';

三.删除数据(DELETE)

1.语法:DELETE FROM 表名 WHERE 筛选条件;

(1)如果不指定筛选条件,就会删除表内所有数据

2.删除可能会因为约束的原因导致失败

3.代码实现:

  1. DELETE FROM `text`
  2. WHERE id=3;

四.小结

1.DML操作默认情况下,执行完会自动提交数据。如果希望执行完成以后不自动提交数据,则需要使用SET autocommit = False

五.计算列(MySQL8.0新特性)

1.计算列就是根据给定的其他列来计算值

  • 比如给定ab两列,c列是a+b的结果,c就是计算列

    2.CREATE和ALTER语句都可以增加计算列

    3.语法:列名 数据类型 GENERATED ALWAYS AS (计算方法) VIRTUAL

  • c INT GENERATED ALWAYS AS (a+b) VIRTUAL

    4.代码:

    1. CREATE TABLE ttb1(
    2. id INT,
    3. a INT,
    4. b INT,
    5. c INT GENERATED ALWAYS AS (a+b) VIRTUAL
    6. );
    7. INSERT INTO ttb1(a,b) VALUES (100,200);
    8. SELECT * FROM ttb1;

    image.png

    六.练习

    ```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; ```