我有2张桌子,像这样:
1-private_messages表:
messageId | message
--------------------
1 | text1
4 | text4
2-public_messages表:
messageId | message
----------------------
2 | text2
3 | text3
5 | text5
在两个表中,messageId列是primaryKey
现在,我希望这两列是自动递增的,并且在两个表中都具有唯一的ID,如上所示。
现在,当我想在一个表中插入一行时,我必须找到每个表的最大Id并进行比较以找到它们的最大。然后增加它并插入新行。
我想知道,在插入新行时,数据库是否有自动的更好或自动的方法?
谢谢
您可以通过如下所示的编程模式在MySQL中获得唯一编号。
首先为序列创建一个表。它具有一个自动递增字段,仅此而已。
CREATE TABLE sequence (
sequence_id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`sequence_id`)
)
然后,当您需要在一个表中插入一个唯一的数字时,请使用类似以下查询的内容:
INSERT INTO sequence () VALUES ();
DELETE FROM sequence WHERE sequence_id < LAST_INSERT_ID();
INSERT INTO private_messages (messageID, message)
VALUES (LAST_INSERT_ID(), 'the message');
保证第二个INSERT使用唯一的序列号。即使您有数十个不同的客户端程序连接到数据库,该保证仍然有效。这就是AUTO_INCREMENT的优点。
第二个查询(DELETE)防止表变大和浪费空间。除了最近的那一行,我们不在乎表中的任何行。
编辑。如果您使用的是php,只需mysqli_query()
在您为程序选择的MySQL接口中使用三个调用或等效方法,一个接一个地发出三个查询。
话虽如此,当心虚假的经济。别忘了,Amazon S3的存储成本为每GB每年0.36美元。那是最昂贵的存储。将您的两种类型的表放到一个表中的“浪费”存储成本可能会达到几美元。对生产中损坏的数据库应用程序进行故障排除将花费数千美元。把事情简单化!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句