mysql如何设置数据表的主键及自增长

这是一个陷阱:建表时直接指定自增,然后修改字段类型会导致自增失败。

实用提醒:建表时,先设置主键,并开启自增,避免字段类型变化出现问题。

数据库自增主键,指定主键插入后自增变化

嘿,报告一下数据库的事情。
记得有一次,我在做一个老项目,使用的是MySQL 5 .7 ,当时还在使用InnoDB引擎。
当时我遇到的问题是,自我提升的问题是首要的。
我插入了几个表,所有表都指定了主键值,但是自增值根本没有改变。
当时我就很困惑,以为出了什么问题。
插入信息后发现,在MySQL 5 .7 中,自增值是保存在内存中的,所以插入主键不会达到指定的自增值。

还有一次,我将两个表插入到一个事务中,一个具有指定的主键,另一个没有。
这样一来,插入指定主键的记录会先滚动,但自增值仍然根据没有指定主键的记录增加。
我当时非常惊讶。
我没想到自动创建的主键可以这样处理。

后来升级到MySQL 8 ,发现自增主键的流程更紧了。
例如,在MySQL 8 中,即使插入固定第一个键的注释,自增值也不会改变。
即使对象回滚,其增长的值也不会恢复到之前的状态。

是什么让我明白数据库的设计和运行确实需要考虑版本差异。
和之前的设计一样,没有考虑到这一点会导致数据出现一些不一致的情况。
所以以后开发数据库的时候,我一定会密切关注这些细节。

您见过类似的问题吗?您还有其他数据库问题吗?我们可以谈谈。

oracle中如何设置主键并且让其自动增长

那天,我看着咖啡馆桌子上的女士快速输入订单,我突然想到在数据库中设置一个主键。
Oracle 不直接支持自我增长,因此您必须自己解决这个问题。
我试图让这两种方法变得有趣。

我们先来说说自我提升的关键。
I have built a user table, UserNo is the primary key and I used triggers + sequences to do this.创建序列时从1 开始,递增1 ;不要循环或缓存。
在写Trigger之前,我发现了一个小漏洞:第一次插入时UserNo不能为空。
因此,必须使用 WHEN (new.userNo IS NULL) 条件。
比如我尝试了两次:
to userinfo(userName,userpwd)values('d','d');
第一次说UserNo为空,报错; The second time succeeds because the trigger has already entered a 1 in the sequence.这让我想起了我上次的实验; I forgot to initialize the batch and tried to install it, but the system directly reported an error.神谕的愤怒必须遵循规则。

再次尝试 SYS_GUID。
这个方法很有趣。
它使用混合了时间戳和设备 ID 的 3 2 位私有代码。
在我的测试中,它产生的值看起来像乱码:
从 Dual 选择 sys_guid(),
每次结果都是不同的新值,例如“6 4 6 D7 F7 F-BF4 C-4 A0D-9 C8 A-0F7 F9 C3 D4 E5 F”。
但文件称,它们在普通情况下属于例外情况。
这很好。
I tried it on both 1 0g and 1 9 c and the results were completely different. But there is one question that makes me wonder - if the system crashes suddenly, we will lose 2 0 useless values ​​in the sequence cache.这是隐藏的活动坑吗? For example, While I was tuning in last week, I found that the buffer of some sequence is full and the query is getting slower.最后,添加了缓存来解决问题。
The sequence of the SYS_GUID is not important, however.每次都需要访问系统目录。
查询速度会变慢吗? When I tested it, Under high consensus, Input response time was found to be about 1 5 % slower than sequential.
两者都很好吃。
序列适用于小型应用。
For example, My e-commerce system has 3 000 users per day.序列完全足够了。
However, if you are building a global distribution system; SYS_GUID 会更受欢迎吗? Using the SYS_GUID in Beijing, what I generate is '6 4 6 D7 F7 F-BF4 C-4 A0D-9 C8 A-0F7 F9 C3 D4 E5 F'. Will it be completely different after restarting the London database?这很有趣。