SQL关系在单个查询中插入2个表而不依赖于mysql_insert_id()

时间:2012-07-19 20:21:36

标签: php mysql sql database insert

我不是一个全新的SQL,但是生气并且在使用MYSQL(使用PhPMyAdmin)时很生气......看着这个:MySQL insert to multiple tables (relational) 和其他一些相关的主题,但没有找到答案。我正在简化我的例子来解决问题。

如果你有两张桌子:

'table1' has: id (primary key, auto-increment), description (text)
'table2' has: id (primary key, auto-increment), title (text), description_id (int)

如何创建单个INSERT语句,以便description_id存储table1.id的值?

我知道有php方法可以做2个查询,但我想在SQL中完成所有这些,必须有办法吗?我应该以不同方式设置表格吗? I read something about foreign keys并且不知道这是否适用。

谢谢!

3 个答案:

答案 0 :(得分:5)

感谢@hackattack,他发现了这个? answered already elsewhere

BEGIN
INSERT INTO users (username, password) 
  VALUES('test', 'test')
INSERT INTO profiles (userid, bio, homepage) 
  VALUES(LAST_INSERT_ID(),'Hello world!', 'http://www.stackoverflow.com');
COMMIT;

但是,ALAS - 这不起作用。 MySQL 5参考显示它的语法略有不同:

INSERT INTO `table2` (`description`) 
  VALUES('sdfsdf');# 1 row affected.
INSERT INTO `table1`(`table1_id`,`title`) 
  VALUES(LAST_INSERT_ID(),'hello world');

而且,看哪 - 这有效!

前方更麻烦 虽然查询将在phpMyAdmin中成功,但我的PHP安装会抱怨查询并引发语法错误。我使用php-way并使用mysql_insert_id()

进行2次单独查询

我发现这很烦人,但我猜这不比服务器负载少得多。

答案 1 :(得分:1)

使用insert语句不能插入多个表(可写视图*,但AFAIK MySQL不支持它们)。

可能对您感兴趣的是transactions,它允许您将语句“分组”为一个单独的“atomic”操作。

*事实上,这只会允许更新,而不是插入(我相信,但现在我开始怀疑它......不管怎么说,这不是问题)

答案 2 :(得分:-1)

你可能需要在这里使用Triggers,这样每当table2获得一个insert操作时,就会执行一个触发器来对table1进行插入。