我有一个库存表(用于零售店的产品/库存)和一个序列表(为每个库存发行的条形码)。
基本上,当新股票被引入数据库时,系统会根据序列表的索引/pri 自动增量值为每只股票发出一个序列号。
问题是他们都互相依赖...
我会解释:
STOCKS TABLE
stock_id int(11)
product_name varchar(50)
serial int(30) <--- relies on the serials generated by system, stored in the SERIALS TABLE
SERIALS
sn_id int(11)
stock_id int(11) <-- relies on the new stocks inserted in the stocks table
serial int(30) <---- serial NO generated for specific stock.
STOCKS 插入的位置需要存储为其生成的序列号,并且生成的序列号必须记录在表中,其中包含正在插入的股票的 stock_id (index/pri)。
这基本上意味着 3 个 SQL 语句/新库存:
- 获取序列表的下一个 auto inc 值(用于正确生成序列号)
- 将股票插入到表中,每个序列都有序列号
- 获取所述股票的 insert_id 并将其插入序列表
这行得通,但我想知道是否有更好的方法?到目前为止,这是我运行的内容:
在主目录上创建一个 serial_lock 文件(这可以防止其他脚本向其他股票发布新的序列号,=避免并发运行冲突..
通过获取序列表的下一个 auto_increment 值来生成所需的序列号并将其存储在变量中,例如
$assigned_serials_array[$index] = $prefix . $index; // results in BN-0001 ("BN-" is the prefix and the rest is padded auto inc value incremented per loop
INSERT INTO股票,每只股票,获取insert_ID
- INSERT INTO serials,发行给特定股票的序列号记录
- 循环完成后,删除锁定文件
PS。
我原来的实际上已经对连续表进行了 INSERT,然后在生成 stock_id 后对该连续表进行了更新。我对此感到不舒服,因为发出了另一条 SQL 语句,尽管这是最安全的方式不过,我不需要担心锁定文件和冲突。
嗯..有什么想法吗?
编辑:
我决定改变我的方法..
对于每个 SERIAL GENERATED,是一个 STOCK (stock_id).. 我决定忘记序列号 00001 0002 0003 的增量排序
决定继续使用正在发行 SN 的特定股票的 stock_id..
所以..
获取下一个插入ID,根据它生成SN,
INSERT STOCK,w/生成的SN
INSERT SERIAL记录,将stock_id也引用到相同的下一个插入ID..
完毕!
我只是真的很想拥有一个完美排序的 SN ..