如何自动在表中插入一行?

时间:2011-10-02 10:24:02

标签: mysql insert

我的数据库中有两个表(parent& child)。如何将新记录插入父表中,以便将记录自动插入子表?

2 个答案:

答案 0 :(得分:1)

您可以使用(插入后)触发器,请参阅MySQL manual了解语法。

答案 1 :(得分:0)

以下是使用触发器插入刚生成的父自动增量ID的新子记录的示例。

mysql> create table ParentTable (id int auto_increment primary key);

mysql> create table ChildTable (id int auto_increment primary key,
       parentId int, foreign key (parentId) references ParentTable(id));

mysql> CREATE TRIGGER MyTrigger AFTER INSERT ON ParentTable
    -> FOR EACH ROW
    -> INSERT INTO ChildTable (parentId) VALUES (NEW.id);

mysql> insert into ParentTable () values ();
Query OK, 1 row affected (0.02 sec)

mysql> select * from ChildTable;
+----+----------+
| id | parentId |
+----+----------+
|  1 |        1 |
+----+----------+

这是一个简单的例子,因为除了主键和外键之外,这两个表没有任何其他列。

但是如果你想将其他列插入子表呢?

触发器只能访问刚刚插入父级的行的NEW.*列。它还可以SELECT来自数据库中其他地方的其他现有数据。或者它可以使用硬编码的文字值。

子表中的其他列可能还有默认值,否则它们可能暂时为NULL,直到您可以使用后续UPDATE语句填充它们。

您必须接受触发器在插入子表时可能无法为相关列提供特定值。