当前位置: 首页 > news >正文

建设私人网站南部 网站 建设

建设私人网站,南部 网站 建设,网站分站的实现方法,网站建设的重要指标MySQL 8 和 MySQL 5.7 在自增计数上的区别 作者:Arunjith Aravindan 本文来源:Percona 博客,爱可生开源社区翻译。 本文约 900 字,预计阅读需要 2 分钟。 Auto-Increment 自增(Auto-Increment)计数功能可以…

MySQL 8 和 MySQL 5.7 在自增计数上的区别

作者:Arunjith Aravindan

本文来源:Percona 博客,爱可生开源社区翻译。

本文约 900 字,预计阅读需要 2 分钟。

Auto-Increment

自增(Auto-Increment)计数功能可以为主键列生成唯一值,这是数据库的一种设计。与 MySQL 5.7 相比,MySQL 8 为自增功能做了一项重要的升级。这个升级可以确保自增计数器的最大值在服务器重启后保持不变,从而为数据一致性和可靠性提供了更好的保障。在本文中,我们将对比 MySQL 5.7 和 MySQL 8 的不同之处,并提供实际示例来展示两者的区别。

MySQL 5.7 的自增

在 MySQL 5.7 中,自动增计数器的工作机制如下:当向包含自增列的表中插入新的一行数据时,计数器会自动加 1,生成的数值会作为插入行的主键使用。这个计数器值仅保存在内存中,在服务器重启后无法持久化。因此,如果服务器崩溃或重启,计数器可能会重置为一个较低的值。

MySQL 8 的自增持久化

随着 MySQL 8 的发布,自增计数器机制有了显著改进。在 MySQL 8 中,自增计数器的最大值现在可以在服务器重启后持久化。这意味着,即使服务器重启,自增计数器也会从上次结束的地方恢复,以确保自增主键的值保持连续。

示例对比

让我们用一个简单的例子来说明 MySQL 5.7 和 MySQL 8 在持久自增计数器方面的区别。我们将创建一个名为 users 的表,用于存储用户信息。

在 MySQL 5.7 中建表。

mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.42-46 |
+-----------+mysql> CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL
);
Query OK, 0 rows affected (0.02 sec)

在表中插入三条数据,可以查看到。

mysql> INSERT INTO users (username) VALUES ('user1');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO users (username) VALUES ('user2');
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO users (username) VALUES ('user3');
Query OK, 1 row affected (0.01 sec)mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  3 | user3    |
+----+----------+
3 rows in set (0.00 sec)

我们继续删除一条记录并插入一条新记录。

mysql> delete from users where id=3;
Query OK, 1 row affected (0.01 sec)mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
+----+----------+
2 rows in set (0.00 sec)mysql> INSERT INTO users (username) VALUES ('user4');
Query OK, 1 row affected (0.01 sec)

删除 ID 为 3 的记录和插入新记录后,与预期一致,我们观察到新记录的 ID 为 4。

mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  4 | user4    |
+----+----------+
3 rows in set (0.00 sec)

现在,我们从 users 表中删除最后一条记录(ID=4),重启服务器,并检查表内容。

mysql> delete from users where id=4;
Query OK, 1 row affected (0.01 sec)mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
+----+----------+
2 rows in set (0.00 sec)service mysql restartmysql> select * from users;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    2
Current database: db1+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
+----+----------+
2 rows in set (0.01 sec)

表中只剩下两条记录。我们插入第五条记录,判断它是否采用 ID 5,还是回退为ID 3。

mysql> INSERT INTO users (username) VALUES ('user5');
Query OK, 1 row affected (0.00 sec)mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  3 | user5    |
+----+----------+
3 rows in set (0.00 sec)

因此,在 MySQL 5.7 中,重启会导致自动增长计数器重置为较低的值,从而使新的记录插入时采用 ID 3。

MySQL 8 的解决方案

MySQL 8 解决了在服务器重启时 InnoDB 存储引擎出现的自增计数器丢失的问题。这项增强可以确保自增计数器的值在服务器重启后持久化,从而保证主键生成的一致性。

在 MySQL 8 中建表。

mysql> select version();
+-------------------------+
| version()               |
+-------------------------+
| 8.0.33-0ubuntu0.22.04.2 |
+-------------------------+
1 row in set (0.00 sec)mysql> CREATE TABLE users (->     id INT AUTO_INCREMENT PRIMARY KEY,->     username VARCHAR(50) NOT NULL-> );
Query OK, 0 rows affected (0.04 sec)

在表中插入三条数据,可以查看到。

mysql> INSERT INTO users (username) VALUES ('user1');
Query OK, 1 row affected (0.07 sec)mysql> INSERT INTO users (username) VALUES ('user2');
Query OK, 1 row affected (0.02 sec)mysql> INSERT INTO users (username) VALUES ('user3');
Query OK, 1 row affected (0.01 sec)mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  3 | user3    |
+----+----------+
3 rows in set (0.00 sec)

接下来,删除一条并插入一条。

mysql> delete from users where id=3;
Query OK, 1 row affected (0.01 sec)mysql> select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
+----+----------+
2 rows in set (0.00 sec)mysql> INSERT INTO users (username) VALUES ('user4');
Query OK, 1 row affected (0.01 sec)

删除 ID 为 3 的记录和插入新记录采用 ID 为 4。

mysql>  select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  4 | user4    |
+----+----------+
3 rows in set (0.00 sec)

删除最后一条记录(ID=4)后,重启服务器并查看表。

mysql> delete from users where id=4;
Query OK, 1 row affected (0.01 sec)mysql>  select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
+----+----------+
2 rows in set (0.00 sec)service mysql restartmysql> select * from users;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    8
Current database: db1
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
+----+----------+
2 rows in set (0.02 sec)

重启后,users 表中只保留两条记录。在 MySQL 8 中,插入新记录时,如预期那样采用 ID=5。

mysql> INSERT INTO users (username) VALUES ('user5');
Query OK, 1 row affected (0.01 sec)mysql>  select * from users;
+----+----------+
| id | username |
+----+----------+
|  1 | user1    |
|  2 | user2    |
|  5 | user5    |
+----+----------+
3 rows in set (0.00 sec)

总结

MySQL 8 之前版本中的 InnoDB 存储引擎报告的自增计数器问题可能会导致困惑和数据不一致,特别是在服务器重启期间。计数器的值可能丢失,导致自动生成的主键值不匹配。MySQL 8 通过保证自增计数器在服务器重启之间持久化来解决这个问题。

通过升级到 MySQL 8,开发者可以利用这个功能创建更加坚实的应用程序,可以管理不同的故障情况而不影响数据完整性。

https://www.percona.com/blog/auto-increment-counter-persistence-in-mysql-8-comparing-the-evolution-from-mysql-5-7/

更多技术文章,请访问:https://opensource.actionsky.com/

关于 SQLE

爱可生开源社区的 SQLE 是一款面向数据库使用者和管理者,支持多场景审核,支持标准化上线流程,原生支持 MySQL 审核且数据库类型可扩展的 SQL 审核工具。

SQLE 获取

类型地址
版本库https://github.com/actiontech/sqle
文档https://actiontech.github.io/sqle-docs/
发布信息https://github.com/actiontech/sqle/releases
数据审核插件开发文档https://actiontech.github.io/sqle-docs/docs/dev-manual/plugins/howtouse
http://www.yayakq.cn/news/327707/

相关文章:

  • 新网站设计最简单的软件中国网页设计师联盟
  • 网站幻灯通栏代码免备案域名购买网站
  • 做实体店打折信息网站平面设计软件哪个好
  • 深圳做装修网站费用多少钱进国企但是签的是外包
  • 南阳集团网站建设红色基调的网站
  • 广州外贸网站推广wordpress 留言 插件
  • 外贸企业网站系统网站建设费用写创意
  • 中国建设银行网站密码忘了怎么办如何修改wordpress登录域名
  • 未来做哪个网站致富手机有些网址打不开怎么解决
  • 全功能多国语言企业网站班级优化大师官方免费下载
  • 万博法务网站seo网站推广方案策划书
  • 做网站怎样使图片自由移动seo技术手段
  • 网站和服务器微信开发 网站备案吗
  • 个人网站可以做网上支付吗曰本做爰l网站
  • 佛山专注网站制作细节京东优惠劵网站怎么做
  • 进行目的地网站建设深圳小程序外包开发
  • 做IPv6网站升级的公司有哪些商鼎营销型网站建设
  • 网站建设公司会议网站中文购物网站模板
  • 含关键词的网站建设佛山产品推广
  • 网站运营商查询网站开发和app的区别
  • 免费装饰公司网站模板四川省建设工程造价信息网站
  • 西安建设网站公司网易企业邮箱可以全部转发么
  • 做外贸的网站公司海口紧急通告
  • 本网站建设用php做视频网站的步骤
  • 2021个人网站盈利模式wordpress新注册用户欢迎
  • 广东石油化工建设集团公司网站wordpress 自定义栏目 图片
  • 导购网站的seo怎么做首先确定网站建设的功能定位
  • 网站设计答辩ppt优秀的国内企业网站
  • 国内最炫酷的网站修改网站图片
  • 烟台网站推广两阳夹一阴后续走势