我不是一个全新的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并且不知道这是否适用。
谢谢!
答案 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()
我发现这很烦人,但我猜这不比服务器负载少得多。
答案 1 :(得分:1)
使用insert语句不能插入多个表(可写视图*,但AFAIK MySQL不支持它们)。
可能对您感兴趣的是transactions,它允许您将语句“分组”为一个单独的“atomic”操作。
*事实上,这只会允许更新,而不是插入(我相信,但现在我开始怀疑它......不管怎么说,这不是问题)
答案 2 :(得分:-1)
你可能需要在这里使用Triggers,这样每当table2获得一个insert操作时,就会执行一个触发器来对table1进行插入。