SQL关系插入到单个查询中的2个表,而不使用mysql_insert_id()


SQL relational insert to 2 tables in single query without resorting to mysql_insert_id()

我对SQL并不完全陌生,但对MYSQL(使用PhPMyAdmin)感到生疏和困难。。。查看以下内容:MySQL插入多个表(关系型)以及其他一些相关话题,但尚未找到答案。我正在简化我的例子,以便把重点讲清楚。

如果你有两张桌子:

'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有两种方法可以完成两个查询,但我想在SQL中完成这一切,一定有办法吗?我应该用不同的方式摆桌子吗?我读过一些关于外键的文章,不知道这是否适用。

谢谢!

感谢@hackcattack,谁发现了这个?其他地方已经回答了。

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的方式,进行了两次单独的查询,并使用了mysql_insert_id()

我觉得这很烦人,但我想这并不比事务少多少服务器负载。

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

您可能感兴趣的是允许您将语句"分组"为一个"原子"操作的事务。

*事实上,这只允许更新,不允许插入(我相信,但现在我开始怀疑……无论如何,这不是这里的问题)

您可能需要在此处使用触发器,以便每当表2获得插入操作时,都会执行触发器来对表1执行插入操作。