DML语句的语法
与DDL操作数据库对象不同,DML主要操作数据表里的数据insert into,update,delete from
- 插入新数据
- 修改已有数据
- 删除不需要的数据
inster into 语句
对于标准的SQL语句而言,每次只能插入一条记录
insert into table_name[(column [, column...])]
value(value [, value...]);
执行插入操作时,表名后可以用括号列出所有需要插入值得列,而values后用括号列出对应需要插入的值,如果省略了表名后的括号及括号里的列名列表,默认将为所有列都插入值,则需要为每一列都指定一个值
mysql> insert into davieyang_test(test_id, test_name, test_price, test_desc, test_img, test_date) values(1, 'davieyang', 10.1,'davieyang','path','2020-09-25 00:00:00');
Query OK, 1 row affected, 1 warning (0.35 sec)
mysql> desc davieyang_test
-> ;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| test_id | int | YES | | NULL | |
| test_name | text | YES | | NULL | |
| test_price | decimal(10,0) | YES | | NULL | |
| test_desc | text | YES | | NULL | |
| test_img | blob | YES | | NULL | |
| test_date | datetime | YES | | NULL | |
+------------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
mysql> select * from davieyang_test;
+---------+-----------+------------+-----------+--------------------+---------------------+
| test_id | test_name | test_price | test_desc | test_img | test_date |
+---------+-----------+------------+-----------+--------------------+---------------------+
| 1 | davieyang | 10 | davieyang | 0x70617468 | 2020-09-25 00:00:00 |
+---------+-----------+------------+-----------+--------------------+---------------------+
1 row in set (0.00 sec)
mysql> insert into davieyang_test_table values('yes', 'davieyang', 1, 10.2, null, '2020-09-25 00:00:00', null, null,null,null, null);
Query OK, 1 row affected, 1 warning (0.29 sec)
mysql> select * from davieyang_test_table;
+-------------+-----------+---------+------------+-----------+------------------------------------------+-----------+---------------+--------------+-----------+----------+
| test_jmeter | test_name | test_id | test_price | test_desc | test_img | test_date | test_selenium | test_pycharm | test_idea | test_qtp |
+-------------+-----------+---------+------------+-----------+------------------------------------------+-----------+---------------+--------------+-----------+----------+
| yes | davieyang | 1 | 10 | NULL | 0x323032302D30392D32352030303A30303A3030 | NULL | NULL | NULL | NULL | NULL |
+-------------+-----------+---------+------------+-----------+------------------------------------------+-----------+---------------+--------------+-----------+----------+
1 row in set (0.00 sec)
- 根据外键约束,外键里的值必须是被参照列里已有的值,所以向从表中插入记录之前,应先向主表插入记录,否则从表记录的外键列只能是null
- 外键约束保证被参照的记录必须存在,但并不保证必须有被参照的记录,即外键列可以为null,如果想保证每条从表记录必须存在对应的主表记录,则应使用非空、外键两个约束
扩展情况一
可以使用带子查询的插入语句,带子查询的插入语句可以一次插入多条记录
insert into davieyang_test(davieyang_name) select teacher_name from teacher_table;
带子查询的插入语句甚至不要求查询数据的源表和插入数据的目的表同一个表,他只要求选择出来的数据列和插入目的表的数据列个数相等,数据类型匹配即可
扩展情况二
MySQL还提供了一个扩展语法,可以一次性插入多条记录,MySQL允许在values后使用多个括号包含多条记录,用逗号隔开即可
insert into davieyang_test values(null, 'davieyang01'), (null, 'davieyang02');
update 语句
update语句用于修改数据表的记录,每次可以修改多条记录,还可以使用where子句限定条件
update table_name
set column1 = value1[, column2=value2]...
[WHERE condition];
delete from 语句
delete from 语句用于删除指定数据表的记录,它不需要指定列名,总是整行地删除,可以一次删除一行也可以删除多行,同样的也可以结合WHERE子句限定条件
delete from table_name
[WHERE condition];
当主表记录被从表记录参照时,主表记录不能被删除,只有先将从表中参照主表记录的所有记录全部删除后,才可删除主表记录
定义外键约束时定义了主表记录和从表记录之间的级联删除on delete cascade或者on delete set null用于指定当主表记录被删除时,从表参照该记录的从表记录吧外键列的值设为null
2451

被折叠的 条评论
为什么被折叠?



