gpt4 book ai didi

MySQL Insert Foreign key 多个表使用ID

转载 作者:行者123 更新时间:2023-11-29 02:29:20 26 4
gpt4 key购买 nike

我有两个表,一个包含简单的“客户”数据,另一个包含客户的“状态”。我在两个表中都有 ID 的外键。

表A:
Id (int) PK AI
ClientId (bigint) UN PK
LastContact(日期时间)

表B:
Id (int) PK 表A Id的外键
其他列....

当我插入/更新我的“客户”表时,我依赖于 ClientId,而不是表 ID,就像这样。

INSERT INTO client (ClientId, ClientType, LastContact) Values (Client_Id, Client_Type, Last_Contact) ON DUPLICATE KEY 
UPDATE ClientType=Client_Type, LastContact=Last_Contact;

我如何知道我插入或更新的 ID,然后才能插入/更新我的第二个表。我认为与外键链接会使这更容易,但我似乎找不到办法。另外,我被告知使用 ClientId 作为我的 ID 不是一个好主意,因为它太大了,并且会随着表的增长而减慢速度。

最佳答案

mysql 手册中有一个片段涵盖了您的确切情况。

If a table contains an AUTO_INCREMENT column and INSERT ... UPDATE inserts a row, the LAST_INSERT_ID() function returns the AUTO_INCREMENT value. If the statement updates a row instead, LAST_INSERT_ID() is not meaningful. However, you can work around this by using LAST_INSERT_ID(expr). Suppose that id is the AUTO_INCREMENT column. To make LAST_INSERT_ID() meaningful for updates, insert rows as follows:

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;

因此在您的情况下,您只需将查询修改为:

INSERT INTO client (ClientId, ClientType, LastContact) Values 
(Client_Id, Client_Type, Last_Contact) ON DUPLICATE KEY
UPDATE ClientType=Client_Type, LastContact=Last_Contact,
ClientId = LAST_INSERT_ID(ClientId);

然后您可以获得使用 LAST_INSERT_ID() 添加/更新的行的 ID,或您正在使用的客户端库中的任何函数。

关于MySQL Insert Foreign key 多个表使用ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15530547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com