在插入新行的情况下,我们可以使用条件插入,即 WHERE 子句和 INSERT INTO 命令。可以通过以下方式完成 -
借助虚拟表
在这种情况下,我们插入虚拟表中的值以及一些状况。语法如下 -
INSERT INTO table_name(column1,column2,column3,…) Select value1,value2,value3,… From dual WHERE [conditional predicate];
示例
mysql> Create table testing(id int, item_name varchar(10));
Query OK, 0 rows affected (0.15 sec)
mysql> Insert into testing (id,item_name)Select 1,'Book' From Dual Where 1=1;
Query OK, 1 row affected (0.11 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> Select * from testing;
+------+-----------+
| id | item_name |
+------+-----------+
| 1 | Book |
+------+-----------+
1 row in set (0.00 sec)
在上面的示例中,我们创建了一个表“testing”,为了向其中插入行,我们使用了带有条件的虚拟表对偶。如果条件为真,MySQL 会将行插入到表中,否则不会。
借助相同结构的表
如果我们想插入结构与另一个表相同的表,然后在下面的示例中演示了如何进行条件插入,即如何将 WHERE 子句与 INSERT INTO 语句一起使用。
mysql> Insert into dummy1(id,name)select id, name from dummy Where id =1;
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from dummy;
+------+--------+
| id | Name |
+------+--------+
| 1 | Gaurav |
| 2 | Aarav |
+------+--------+
2 rows in set (0.00 sec)
mysql> select * from dummy1;
+------+--------+
| id | Name |
+------+--------+
| 1 | Gaurav |
+------+--------+
1 row in set (0.00 sec)
在上面的示例中,我们在表“dummy1”中插入了值,其结构与表“dummy”相同,条件是仅插入“id = 1”的行。