Java面向对象系列[v1.0.0][SQL语法之DML]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Davieyang.D.Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值