Mysql 限制SQL';自动递增';作为主键

Mysql 限制SQL';自动递增';作为主键,mysql,mariadb,primary-key,auto-increment,Mysql,Mariadb,Primary Key,Auto Increment,我想创建一个在线广告牌系统,每个人都可以发布一个主题作为我的项目 我尝试使用SQL设计数据库来存储每个主题的信息,包括主题id作为主键 首先,我使用带有自动递增的整数数据类型设计id,因为我认为这是最简单的方法。然后我想了想,发现整数有限制(数字可能很高,但它在那里),所以我在这里找到另一种方法 现在我想到了一些伪随机算法,或者使用了主题名称的散列,但仍然不清楚 我在这里也从研究中找到了GUID,但不确定它是否可以使用 我希望您能为我提供一些方法来处理作为主键的整数大小限制,或者为我提供任何关键

我想创建一个在线广告牌系统,每个人都可以发布一个主题作为我的项目

我尝试使用SQL设计数据库来存储每个主题的信息,包括主题id作为主键

首先,我使用带有自动递增的整数数据类型设计id,因为我认为这是最简单的方法。然后我想了想,发现整数有限制(数字可能很高,但它在那里),所以我在这里找到另一种方法

现在我想到了一些伪随机算法,或者使用了主题名称的散列,但仍然不清楚

我在这里也从研究中找到了GUID,但不确定它是否可以使用


我希望您能为我提供一些方法来处理作为主键的整数大小限制,或者为我提供任何关键字,以便我做进一步的研究。

这个答案假设MySQL/MariaDB,因为它使用术语“自动递增”来表示这类列(与使用
identity
serial
的其他数据库不同)

如果
int
不够大,可以使用
bigint

虽然我认为你不太可能超过INT/COM>(它适用于许多应用程序)的阈值,但是<>代码> Bigint 需要花费大量的精力在你和你的计算机上超过很长的时间才能超过最大值。


关于这一点,请参见。

中的说明。对于int,SQL Server支持的最大值为2147483647

为了完整起见,我还将添加另一个选项,即将列的数据类型更改为bigint(最大值9223372036854775807-这将允许您每秒插入一百万行,连续插入近300000年)。 或者,如果你担心你会溢出,即使如此,你也可以考虑使用十进制(38,0)-这里最大的是一个由38个9组成的数字(这将允许你保持一个惊人的317099636645 86504312531年席)。

一个bigint有限制:-2^63(-9223372036854775808)到2^63-1(9223372036854775807)如果你期望得到9223372036854775807篇文章,你还有另一个问题……你在使用什么数据库?MariaDB和MySQL你应该知道MariaDB和MySQL是不同的软件产品。MariaDB在2010年左右从MySQL派生出来,它们逐渐变得互不兼容;本论坛98%的问题和答案同样适用于MySQL和MariaDB。这个问题同样适用。在事实发生1小时后,就不再添加任何内容了。MySQL/MariaDB不允许将
DECIMAL
用于
AUTO_INCREMENT