6

我对 SQL 并不完全陌生,但对 MYSQL(使用 PhPMyAdmin)感到生疏和挣扎……看了这个:MySQL insert to multiple tables (relational) and some other related topics,但还没有找到答案。我正在简化我的示例以说明问题。

如果你有两张桌子:

'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 做这一切,一定有办法吗?我应该以不同的方式设置我的桌子吗?我读了一些关于外键的东西,不知道这是否适用。

谢谢!

4

3 回答 3

5

感谢@hackattack,谁找到了这个?已经在别处回答了

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;

但是,唉——那没用。 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 方式并进行了 2 个单独的查询并使用mysql_insert_id()

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

于 2012-07-19T20:30:19.010 回答
1

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

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

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

于 2012-07-19T20:24:36.110 回答
-1

您可能需要在此处使用触发器,以便每当 table2 获得插入操作时,都会执行触发器以在 table1 上执行插入操作。

于 2012-07-19T20:25:51.660 回答