暂无图片
请问各位老大,mysql无主键表添加主键后TABLE_ID发生变化,请问是什么原理?
我来答
分享
小北
2024-02-11
请问各位老大,mysql无主键表添加主键后TABLE_ID发生变化,请问是什么原理?

给各位老大拜年里,祝新春快乐!

mysql无主键表添加主键后TABLE_ID发生变化,请问是什么原理?

版本mysql> select version();

±----------+
| version() |
±----------+
| 8.0.29 |
±----------+
1 row in set (0.00 sec)

use test;

create table test(id int,iq int);

test表没有主键,id是1206

select TABLE_ID,name from information_schema.INNODB_tables where name='test/test';

+----------+-----------+
| TABLE_ID | name |
+----------+-----------+
| 1206 | test/test |  《-------id是1206
+----------+-----------+
1 row in set (0.00 sec)

mysql> alter table test add primary key(id);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

添加主键后id变为

mysql> select TABLE_ID,name from information_schema.INNODB_tables where name='test/test';
+----------+-----------+
| TABLE_ID | name |
+----------+-----------+
| 1207 | test/test |
+----------+-----------+
1 row in set (0.00 sec)

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新

alter table test add primary key(id);命令若能执行成功,就等同于执行了如下操作:

create table testN (id int primary key,iq int);

insert into testN select * from test;

drop table test;

alter table testN rename to test;

所以TABLE_ID发生变化。

暂无图片 评论
暂无图片 有用 10
打赏 0
暂无图片
小北
题主
2024-02-12
谢谢大佬。麻烦您问一下,这个可以通过什么方法查看么? explain没法显示alter table test add primary key(id);这个的执行计划。 是否有什么方法可以查看ddl是怎么执行的?
小北

谢谢大佬。麻烦您问一下,这个可以通过什么方法查看么?

explain没法显示alter table test add primary key(id);这个的执行计划。

是否有什么方法可以查看ddl是怎么执行的?

暂无图片 评论
暂无图片 有用 6
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
mysql8.0.23升级
回答 2
已采纳
可以先原地升级从库,然后主从切换
根分区满了,为什么我删除了/ROOT/目录下的文件,磁盘空间为什么没有释放?
回答 2
执行以下命令reboot重启后将释放。
root用户的密码如何找回 MYSQL 8.0
回答 4
忘记root密码处理办法:1.关闭数据库  pkillmysqld         &nb
MySQL8.0以上用什么审计插件?
回答 2
MySQL版本为5.7时,建议使用MariaDB的审计插件MySQL版本为8.0时,可以使用McAfeeMySQLAuditPlugin的审计插件
MySQL ON DUPLICATE KEY UPDATE 可以同时更新两个字段吗?
回答 3
可以的createtabletest3(id1int,id2int,id3int,primarykey(id1));insertintotest3values(1,1,1),(2,2,2)INSERT
MySQL5.6内存升高问题
回答 6
从日志里看不出来什么,这个日志是故障的时候抽取的吗。一般这样问题,都是跟缓存池,全局锁有关。建议升级版本。
mysql 注释乱码
回答 1
能正常显示的注释和乱码的注释应该不是同一时间在同一客户端执行的。在提交注释的那台客户端上去查看,应该能正常显示。主要是提交时客户端字符集与服务器字符集不一致。
mysql实现\watch--pg的效果,如何操作呢?
回答 1
selectsleep(5);
在Linux7上编码mysql8源码时总是提示devtoolset-10-gcc找不到,已经安装了gcc10.3了,还是提示找不到,这是为什么?
回答 2
已采纳
centos7.9下,会默认指向devtoolset10gcc10.2.12.1.el7.x8664:GCCversion10,比gcc10.3版本低,或者看下这个gcc是哪个rpm安装的
MySQL都有哪些读写分离的方案?
回答 7
已采纳
像官方的MySQLRouter,第三方的Proxysql、MaxScale、ShardingProxy给你一个参考https://www.modb.pro/doc/90645