Mysql 如何减少SQL数据库中的自动递增数?
当前表结构如下所示:Mysql 如何减少SQL数据库中的自动递增数?,mysql,database,database-design,Mysql,Database,Database Design,当前表结构如下所示: user_preference --------------- id user_id pref_id 此表存储所有用户选项,id为auto-inc 问题是: 1) 是否需要为每个表保留一个ID?通常的做法似乎是为每个表保留一个系统生成的id 2) 每当用户更新他们的性能时,我将为他清除所有相关记录并插入更新记录,汽车公司编号将在以后变得非常大。我怎样才能防止呢 感谢您的帮助。您可以定期将自动递增计数器重置回1,以确保在频繁删除记录的过程中,id不会变得任意大(和稀疏) 在
user_preference
---------------
id
user_id
pref_id
此表存储所有用户选项,id为auto-inc
问题是:
1) 是否需要为每个表保留一个ID?通常的做法似乎是为每个表保留一个系统生成的id
2) 每当用户更新他们的性能时,我将为他清除所有相关记录并插入更新记录,汽车公司编号将在以后变得非常大。我怎样才能防止呢
感谢您的帮助。您可以定期将自动递增计数器重置回1,以确保在频繁删除记录的过程中,id不会变得任意大(和稀疏) 在MySQL中:
ALTER TABLE table_name AUTO_INCREMENT = 1
DBCC CHECKIDENT (table_name, RESEED, 0)
在SQL Server中:
ALTER TABLE table_name AUTO_INCREMENT = 1
DBCC CHECKIDENT (table_name, RESEED, 0)
每个命令都会将自动递增计数器重置为1,如果1已被另一条记录使用,则重置为最接近1的值。您可以定期将自动递增计数器重置为1,以确保在频繁删除记录的过程中,id不会变得任意大(和稀疏) 在MySQL中:
ALTER TABLE table_name AUTO_INCREMENT = 1
DBCC CHECKIDENT (table_name, RESEED, 0)
在SQL Server中:
ALTER TABLE table_name AUTO_INCREMENT = 1
DBCC CHECKIDENT (table_name, RESEED, 0)
每个命令都会将自动递增计数器重置为1,或者如果1已被另一条记录使用,则重置为最接近1的值。您不需要为每个表设置一个自动递增
主键。有时,有一个“自然”的关键是相当好的PK工作
不要操纵自动增量
值。不要依赖于唯一性以外的任何属性
您的user\u首选项
表闻起来像是一个多对多映射?如果是这样,这是最佳的:
CREATE TABLE user_preference (
user_id ...,
pref_id ...,
PRIMARY KEY(user_id, pref_id),
INDEX (pref_id, user_id)
) ENGINE=InnoDB;
有关“为什么”的讨论,请参见您不需要为每个表设置自动增量
主键。有时,有一个“自然”的关键是相当好的PK工作
不要操纵自动增量
值。不要依赖于唯一性以外的任何属性
您的user\u首选项
表闻起来像是一个多对多映射?如果是这样,这是最佳的:
CREATE TABLE user_preference (
user_id ...,
pref_id ...,
PRIMARY KEY(user_id, pref_id),
INDEX (pref_id, user_id)
) ENGINE=InnoDB;
有关“为什么”的讨论,请参见您使用的是哪个数据库?您同时标记了MySQL和SQL Server。常规的int
可以容纳2^32
或4294967296
——要超过这一限制,还需要很长时间。如果您担心您将超过42亿个数字,您可以很容易地使用bigint
,它相当于18446744073709551615
-相当充足的数字。您使用的是哪个数据库?您同时标记了MySQL和SQL Server。常规的int
可以容纳2^32
或4294967296
——要超过这一限制,还需要很长时间。如果您担心您将超过42亿个数字,您可以很容易地使用bigint
,它等于18446744073709551615
-非常足够的数字。或者需要id吗?如果重置,id将重叠。will Robinson:确保在包含引用要重置的主键的外键的任何表上正确设置了级联属性。或者id是必需的?如果重置,id将重叠。will Robinson:确保在包含引用要重置的主键的外键的任何表上正确设置了级联属性。