一、插入数据
首先创建一张表:
mysql> CREATE TABLE IF NOT EXISTS emp1(
-> id INT,`name` VARCHAR(15),hire_date DATE,salary DOUBLE(10,2)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> DESC emp1;
+-----------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(15) | YES | | NULL | |
| hire_date | date | YES | | NULL | |
| salary | double(10,2) | YES | | NULL | |
+-----------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
添加数据方式1:
INSERT INTO emp1
VALUES (1,'JSJ','2000-9-30',2200);
要清楚声明的字段的先后顺序
mysql> SELECT * FROM emp1;
+------+------+------------+---------+
| id | name | hire_date | salary |
+------+------+------------+---------+
| 1 | JSJ | 2000-09-30 | 2200.00 |
+------+------+------------+---------+
1 row in set (0.00 sec)
添加数据方式2:
按照自己声明的字段顺序添加
INSERT INTO emp1(id,`name`,salary,hire_date)
VALUES(2,'WZC',0,'2002-01-22');
mysql> SELECT * FROM emp1;
+------+------+------------+---------+
| id | name | hire_date | salary |
+------+------+------------+---------+
| 1 | JSJ | 2000-09-30 | 2200.00 |
| 2 | WZC | 2002-01-22 | 0.00 |
+------+------+------------+---------+
2 rows in set (0.00 sec)
没有进行赋值的值为null
INSERT INTO emp1(id,`name`,salary)
VALUES(3,'LWM',0);
同时插入多条记录
INSERT INTO emp1(id,`name`,salary,hire_date)
VALUES(4,'Z',0,'2000-01-22'),(5,'X',0,'2001-01-22');
添加数据方式3:
将查询结果插入到表中
INSERT INTO 目标表名
(tar_column1 [, tar_column2, …, tar_columnn])
SELECT
(src_column1 [, src_column2, …, src_columnn])
FROM 源表名
[WHERE condition]
INSERT INTO emp1(id,`name`,salary,hire_date)
#查询语句
SELECT employee_id,last_name,salary,hire_date #查询的字段一定要与添加到表的字段一一对应
FROM employees
WHERE department_id IN (60,70);
目标表中要添加的字段的长度不能低于源表中查询的字段的长度,否则报错。因此使用之前应先查看对应的表结构字段的类型是否符合标准。如果目标表中要添加数据的字段的长度低于源表中查询的字段的长度的话,就有添加不成功的风险。
- 在 INSERT 语句中加入子查询。
- 不必书写 VALUES 子句。
- 子查询中的值列表应与 INSERT 子句中的列名对应。
二、更新数据&修改数据
UPDATE dbname SET 字段=新数据 WHERE 具体哪个字段
如果没有WHERE的约束,可以实现批量修改数据
UPDATE emp1
SET hire_date = CURDATE()#返回当前日期
WHERE id = 5;
同时修改多个字段
UPDATE emp1
SET hire_date = CURDATE(),salary = 6000
WHERE id = 4;
三、删除数据
DELETE FROM… WHERE…
DELETE FROM emp1
WHERE id = 1;
四、小结
DML的操作默认情况下,是会自动提交数据的
如果希望执行后不自动提交数据,则需要使用 SET autocommit = FALSE
五、MySQL8新特性:计算列
什么叫计算列呢?简单来说就是某一列的值是通过别的列计算得来的。例如,a列值为1、b列值为2,c列不需要手动插入,定义a+b的结果为c的值,那么c就是计算列,是通过别的列计算得来的。
在MySQL 8.0中,CREATE TABLE 和 ALTER TABLE 中都支持增加计算列。下面以CREATE TABLE为例。
举例:定义数据表tb1,然后定义字段id、字段a、字段b和字段c,其中字段c为计算列,用于计算a+b的值。 首先创建测试表tb1,语句如下:
CREATE TABLE tb1(
id INT,
a INT,
b INT,
c INT GENERATED ALWAYS AS (a + b) VIRTUAL #字段C即为计算列
);