将表的默认值插入另一个表

时间:2016-01-05 12:45:32

标签: php postgresql

简化版:

我有一个名为books(book_id,book_title)的表,其中book_id是主键,类型为serial(所以它是在没有我插入的情况下自动分配的)。

我还有一个名为book_version(id,book_id,book_version)的表,其中book_id是第一个表的外键。

用表格我拿书名和版本。我将标题插入到第一个表中,并且必须将生成的book_id和版本一起插入到第二个表中。

如果没有3个单独的查询(一个插入第一个表,一个选择获取它的id和一个插入第二个表),我怎么能这样做?

这里的想法是,同一本书可能已经多次发布并略有变化,所以我想跟踪不同的版本。

4 个答案:

答案 0 :(得分:1)

在第一个表格上使用后插入触发器:

http://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html

插入后触发器可以引用插入的行,然后您只需要运行1个语句来插入版本。

你只需要通过PHP插入第一行,你的触发器就会安装在数据库中并在那之后完成工作。

这是最好的方法,IMO。

答案 1 :(得分:1)

我会使用存储过程并将工作委托给它。仍然会有3个查询,但这3个查询将在MySQL中执行。您的PHP代码只会将其视为1个查询,

答案 2 :(得分:1)

 mysql_insert_id() is mysql function which gets last inserted id into database.

<?php
    $link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }
mysql_select_db('mydb');

here book_id is autofill 

mysql_query("INSERT INTO books ('book_title') values ('kossu')");

$ last_insert_id = mysql_insert_id();

现在,对于第二个表,id是自动填充

mysql_query("INSERT INTO book_version ('book_id', 'book_version') values ($last_insert_id,'6.48' )");

&GT;

答案 3 :(得分:1)

虽然这里有一些非常好的想法(即触发器,存储过程或最后插入的行),使用返回功能似乎是最好的解决方案,至少在我的情况下。