mySQL 中的所有表是否有适当的本机非解决方法自动递增可能性?我的意思是,不仅仅是每张表自动增加,我的意思是数据库中的每个新行都有一个数字?
我在专业的预言机(?)设置上看到了这一点。主要优点是您对所有表中的所有行/元素都有唯一的 id,而不仅仅是 PER TABLE。
mySQL 中的所有表是否有适当的本机非解决方法自动递增可能性?我的意思是,不仅仅是每张表自动增加,我的意思是数据库中的每个新行都有一个数字?
我在专业的预言机(?)设置上看到了这一点。主要优点是您对所有表中的所有行/元素都有唯一的 id,而不仅仅是 PER TABLE。
PostgreSQL 可以像这样在每次插入时使用 aCREATE SEQUENCE seq_name
和 using进行设置。nextval(seq_name)
MySQL 对此没有本机支持,您可以通过创建一个只有一列和AUTO_INCREMENT
该列上的表来模拟 PostgreSQL SEQUENCE 的行为。
您总是先插入该表,然后读取该LAST_INSERT_ID
表的 id 以获取您需要插入到表中的 id。这将是交易安全的,因此不会产生重复。
实现此目的的另一种方法是创建一个表,其中一列没有AUTO_INCREMENT
,只有一行保存当前最大值。
每次您需要递增时,您执行UPDATE seq_table SET seq_column = seq_colum+1;
递增更新本身就是原子的,但是您还需要在之后读取值,这会产生两个语句并且它们不是原子的,除非您围绕它们设置事务和适当的隔离级别。这种方法可以节省空间,但也会生成锁定查询。
尝试的多个线程INSERT
将不得不等待其他人更新,seq_table
然后才能自己更新并读取新值。
此外,您还必须使用适当的方法UPDATE
将 on 和SELECT
on包装在事务中,以避免读取其他线程在您增加它后增加的值。seq_table
ISOLATION LEVEL
这意味着这会INSERTS
成为交易问题,但通常不会,所以我不推荐第二种方法。