我想插入购物车表
**orderId** | cartId | cartDate | cartStatus
____________________________________________
1 | 1 | 20120102 | complete
2 | 2 | 20120102 | complete
3 | 3 | 20120102 | complete
4 | 4 | 20120102 | complete
使用订单表中的自动递增值orderId
**orderId** | orderStatus | secret | sauce
____________________________________________
1 | 7 | 020200202 | bbq
2 | 6 | 020200202 | bbq
3 | 6 | 020200202 | t
4 | 4 | 020200202 | m
INSERT INTO ordertable VALUES(null,7,020200202,bbq)
然后使用orderId(现在将是5)
INSERT INTO carttable VALUES(orderId,20120102,complete)
然而, 此插入必须作为相同的查询完成。如果我使用mysql_last_id(php),那么在执行购物车插入之前,其他人有机会插入数据库。或者连接可能会超时。数据库是MyISAM(我不能改变这个,第三方解决方案)。
谢谢你, Ĵ
答案 0 :(得分:1)
我认为您对使用mysql_last_id
的担忧是没有根据的 - 它将返回当前连接的最后一个ID,而不是所有连接中全局的最后一个ID。
因此,除非您有多个线程共享相同的数据库连接,或者在调用mysql_last_id
之前在同一连接上执行另一个身份插入,否则您无需担心。
ETA:您可以通过一次发送多个查询来执行此操作,如下所示:
INSERT INTO ordertable VALUES(null,7,020200202,bbq);
INSERT INTO carttable VALUES(LAST_INSERT_ID(),20120102,complete);
但是如果您使用的是mysql_query
,它通常不会让您在同一个调用中发送多个查询(主要是作为一种安全措施来尝试阻止SQL注入)。