我有两张桌子,我的工作方式与以下概念相同......
当任何记录插入第一个表的'id'时('id'是唯一的并且auto_increment),我想使用这个id值进一步插入我的第二个表(这意味着id将是外键)。如何我应该设计我的桌子吗?
如果我正在插入值并进一步提取最后插入的值以再次插入第二个表,那么单个插入将执行更多查询,这可能需要更多时间在mysql中执行。
如果我将使用额外的表(counter_id_table)来保持id值并自动增加。当任何新记录将首先插入时,我将获取'counter_id_table'的值,这个值将是我的第一个表的id,这个值将是第二个表中的外来id。当我再次从'counter_id_table'获取值时,我将在一个增量后更新。
我应该如何设计我的表以便更好地执行?
答案 0 :(得分:1)
第一种选择是通常如何做。在插入查询之后,您可以使用MySQL的mysql_insert_id()
来检索您插入的条目的ID。不要担心速度或负载,这种情况发生在几分之一秒内,MySQL可以在睡眠状态下执行此操作。
所以你会得到这样的东西:
`user`
- id
- name
- etc
`user_stuff`
- id
- userId // foreign key
- stuff
- etc
$sql = "INSERT INTO user (name) VALUES ('foo')";
mysql_query($sql) or die(mysql_error());
$userId = mysql_insert_id();
$sql = "INSERT INTO user_stuff (userId, stuff) VALUES ($userId, 'stuff')";
mysql_query($sql) or die(mysql_error());