gpt4 book ai didi

php - 为 'item' 表创建一个(复合)主键,其中增量 'item_id' 根据 'order_id' 外键重置

转载 作者:行者123 更新时间:2023-11-30 21:35:18 25 4
gpt4 key购买 nike

<分区>

老师要我们讨论如何实现全局业务收据数据库的'line_item'表。他希望我们讨论这种“行项目”表的主要(复合?)键。如果我们的全局业务每分钟打印数千张收据(包含数百件元素),那么我们需要考虑多少达到 line_item_id 的 INT 上限的可能性?有没有更有效的方法来处理 line_item id?

“注意:编号中的间隙(通常由删除引起)是可以的。还要寻找可能的竞争条件。”

考虑一下:您添加了 3 张收据,每张收据包含 3 件商品。您删除了第三张收据的第二项。然后在第三张收据中添加一个新项目。

所以我想象这样的事情开始:(收据 #1 和 #3 在添加/删除练习之前最初是相同的。注意 #3 上的编号。)

|  receipt_id (FK)  |     line_id (INT)    |  line_text (TINYTEXT)  |
---------------------------------------------------------------------
| 1 | 1 | 'Apple' |
| 1 | 2 | 'Banana' |
| 1 | 3 | 'Coconut' |
---------------------------------------------------------------------
| 2 | 1 | 'Apple' |
| 2 | 2 | 'Apple' |
| 2 | 3 | 'Apple' |
---------------------------------------------------------------------
| 3 | 1 | 'Apple' |
| 3 | 3 | 'Coconut' |
| 3 | 4 | 'Dates' |
---------------------------------------------------------------------

我们一直在学习 SQL 和 PHP(如果这很重要,innoDB 中的 mySQLi。)不过我觉得这可能仅用 SQL 就可以完成,对吧?

看来我应该使用第二列中的 MAX() 函数来制作复合主键,以避免担心达到上限 INT 阈值。

我正在尝试编造一个 MySQL INSERT,它将对收据行的编号进行动态处理,例如:

INSERT INTO line_item (3, VALUES MAX(receipt_line)+1, 'Dates')

最后他有其他想法,例如:“如果您现在在第二张收据的末尾删除并添加一个项目怎么办?”

我想这些是他正在寻找的操作:

-- Delete the last line of the second receipt
DELETE FROM line_item WHERE receipt_id=2 AND line_id=MAX(line_id)

-- Add a new line to the second receipt.
INSERT INTO line_item VALUES ( 2, MAX(line_id)+1, 'Watermelon')

我期望这样的结果:

|  receipt_id (FK)  |     line_id (INT)    |  line_text (TINYTEXT)  |
---------------------------------------------------------------------
| 1 | 1 | 'Apple' |
| 1 | 2 | 'Banana' |
| 1 | 3 | 'Coconut' |
---------------------------------------------------------------------
| 2 | 1 | 'Apple' |
| 2 | 2 | 'Apple' |
| 2 | 3 | 'Watermelon' |
---------------------------------------------------------------------
| 3 | 1 | 'Apple' |
| 3 | 3 | 'Coconut' |
| 3 | 4 | 'Dates' |
---------------------------------------------------------------------

但是我得到了一堆错误和奇怪的结果。

我是否需要使用 PHP 来计算 line_id?我错过了什么?

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