用PHP插入mysql的auto_increment字段的问题

iProgram 2004-07-04 02:01:46
我要把用户输入的数据分快慢表保存, 常用的数据存在表A中, 不常用的数据存在表B中. 假设用户输入两个数据: 姓名和地址, 我把姓名存在表A, 地址存在表B, 用相同的id连接两个表. AB两表设计如下:
表A:
id INT PRIMARY, auto_increment
name varchar(10)
表B
id INT PRIMARY
address varchar(200)
用的时候:
SELECT A.name, B.address FROM A, B where A.id=B.id

我的问题是如何在插入的时候保证两个表的ID同步. 比如我在PHP中得到了$name和$address, 最省脑子的插入步骤是:
1 INSERT INTO A VALUES (NULL, $name); //NULL让id取自增值
2. SELECT id FROM A ORDER BY id DESC LIMIT 0, 1//然后得到刚插入的那个记录的id, 把id存在$id中
3. INSERT INTO B VALUES($id, $address) //再用得到的id插表B

但我觉得这样效率太低了, 尤其是第二步,不仅慢, 还有紊乱的危险(比如两个人同时执行完第一步1 - 要是用锁表的办法就太过分了)

要是你的话该怎么做呢?
(我用name和address简化叙述, 实际情况是B中有很长的TEXT)
...全文
269 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
iProgram 2004-07-04
  • 打赏
  • 举报
回复
谢谢. 在我给的那个URL里有一个user comment不错:
frumler at the-beach dot no_spam dot net
04-Aug-2001 11:17
If you want to use the ID that was generated for one table and insert it into a second table, you can use SQL statements like this:

INSERT INTO foo (auto,text)
VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text'); # use ID in second table

...found here:
http://www.mysql.com/doc/en/Getting_unique_ID.html
我决定用这种方法.
ccterran 2004-07-04
  • 打赏
  • 举报
回复
这个应该是取得同一个连接下的上一次insert的id,所以应该不会有什么问题
ccterran 2004-07-04
  • 打赏
  • 举报
回复
即使有也要一前一后。。。
iProgram 2004-07-04
  • 打赏
  • 举报
回复
谢谢.
不会有紊乱的情况吧? 有没有可能一下插两个表的技术或者更好的表设计?
http://cn.php.net/manual/zh/function.mysql-insert-id.php
ccterran 2004-07-04
  • 打赏
  • 举报
回复
第2步用
$id=mysql_insert_id();
就可以得到刚刚插入的id,然后再进行第三步操作
内容概要:本文详细介绍了 MySQLAUTO_INCREMENT 属性的使用方法,这是一种用于模拟序列行为的方式。它允许在表中创建自增字段,通常作为主键,确保每行数据都有唯一的标识符。文中提供了创建带有自增字段的表的示例,解释了插入数据时如何自动分配自增值,并介绍了如何使用 LAST_INSERT_ID() 函数获取最近插入行的自增值。还说明了如何查看表的当前自增值以及注意事项,如删除行后自增值不会被重用。此外,文章展示了在 PERL 和 PHP 中获取自增值的方法,并讨论了重置序列和设置序列开始值的具体操作。; 适合人群:对 MySQL 数据库有一定了解的数据库管理员或开发人员,尤其是那些需要理解和使用自增字段进行数据管理的人群。; 使用场景及目标:① 学习如何在 MySQL 中创建具有自增字段的数据表;② 掌握插入数据时不指定自增字段值的情况下,数据库如何自动分配唯一标识符;③ 了解如何在不同编程语言中获取最近插入行的自增值;④ 掌握重置序列和设置序列开始值的方法。; 其他说明:AUTO_INCREMENT 属性只能应用于整数类型的字段,并且在实际应用中应谨慎处理自增字段的重置,以免造成数据混乱。同时,在设置自增值时要注意避免唯一性冲突。

21,893

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧