日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL的主鍵命名策略相關

瀏覽:84日期:2023-10-06 13:13:44

最近在梳理數據生命周期管理的細節時,發現了一個小問題,那就是MySQL的主鍵命名策略,似乎會忽略任何形式的自定義命名。

也就意味著你給主鍵命名為idx_pk_id這種形式,在MySQL里面會統一按照PRIMARY來處理。

當然我們可以在這個基礎之上做一些拓展和補充。

首先來復現下問題,我們連接到數據庫test,然后創建表test_data2.

mysql> use testmysql> create table test_data2 (id int ,name varchar(30));Query OK, 0 rows affected (0.05 sec)

接著創建一個主鍵,命名為idx_pk_id,從執行情況來看,MySQL是正常處理了。

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

為了進一步對比,我們添加一個唯一性索引(輔助索引),來看看它們的差異。

mysql> alter table test_data2 add unique key idx_uniq_name(name);Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0查看主鍵命名方法1:使用show indexes命令

要查看MySQL索引的信息,使用show indexes from test_data2就可以。

mysql> show indexes from test_data2G*************************** 1. row *************************** Table: test_data2 Non_unique: 0 Key_name: PRIMARY Seq_in_index: 1 Column_name: id Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: Index_type: BTREE Comment: Index_comment: *************************** 2. row *************************** Table: test_data2 Non_unique: 0 Key_name: idx_uniq_name Seq_in_index: 1 Column_name: name Collation: A Cardinality: 0 Sub_part: NULL Packed: NULL Null: YES Index_type: BTREE Comment: Index_comment: 2 rows in set (0.00 sec)查看主鍵命名方法2:使用數據字典information_schema.statistics

使用命令的方式不夠通用,我們可以使用數據字典information_schema.statistics來進行數據提取。

mysql> select *from information_schema.statistics where table_schema=’test’ and table_name=’test_data2’ limit 20 G*************************** 1. row ***************************TABLE_CATALOG: def TABLE_SCHEMA: test TABLE_NAME: test_data2 NON_UNIQUE: 0 INDEX_SCHEMA: test INDEX_NAME: PRIMARY SEQ_IN_INDEX: 1 COLUMN_NAME: id COLLATION: A CARDINALITY: 0 SUB_PART: NULL PACKED: NULL NULLABLE: INDEX_TYPE: BTREE COMMENT: INDEX_COMMENT: *************************** 2. row ***************************TABLE_CATALOG: def TABLE_SCHEMA: test TABLE_NAME: test_data2 NON_UNIQUE: 0 INDEX_SCHEMA: test INDEX_NAME: idx_uniq_name SEQ_IN_INDEX: 1 COLUMN_NAME: name COLLATION: A CARDINALITY: 0 SUB_PART: NULL PACKED: NULL NULLABLE: YES INDEX_TYPE: BTREE COMMENT: INDEX_COMMENT: 2 rows in set (0.00 sec)查看主鍵命名方法3:使用show create table 命令

如果查看建表語句,會發現主鍵名已經被過濾掉了。

mysql> show create table test_data2G*************************** 1. row *************************** Table: test_data2Create Table: CREATE TABLE `test_data2` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_uniq_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)有的同學可能想,是不是分別執行了create,alter語句導致處理方式有差異,我們可以一步到位,在create語句里面聲明主鍵名。CREATE TABLE `test_data3` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY idx_pk_id(`id`), UNIQUE KEY `idx_uniq_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

這個時候查看建表語句,會發現結果和上面一樣,主鍵名都是PRIMARY.

mysql> show create table test_data3G *************************** 1. row *************************** Table: test_data3Create Table: CREATE TABLE `test_data3` ( `id` int(11) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `idx_uniq_name` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)查看主鍵命名方法4:查看約束命名

當然還有多種驗證方式,比如我們使用約束的方式來命名,得到的主鍵名都是PRIMARY.

CREATE TABLE IF NOT EXISTS `default_test` ( `default_test`.`id` SMALLINT NOT NULL AUTO_INCREMENT, `default_test`.`name` LONGTEXT NOT NULL,CONSTRAINT `pk_id` PRIMARY KEY (`id`));查看主鍵命名方法5:使用DML報錯信息

當然還有其他多種形式可以驗證,比如我們使用DML語句。

mysql> insert into test_data2 values(1,’aa’);Query OK, 1 row affected (0.02 sec)mysql> insert into test_data2 values(1,’aa’);ERROR 1062 (23000): Duplicate entry ’1’ for key ’PRIMARY’

以上的方法都可以讓我們對這個細節有更深入的理解,當然我們可以再深入一些。

查看主鍵命名方法6:官方文檔

官方文檔里面其實包含了這個信息,但是不是很明顯。

關于主鍵的描述,大體內容如下,有一條是專門做了聲明,主鍵名為PRIMARY.

一個表只能有一個PRIMARY KEY。 PRIMARY KEY的名稱始終為PRIMARY,因此不能用作任何其他類型的索引的名稱。 如果您沒有PRIMARY KEY,而應用程序要求您在表中提供PRIMARY KEY,則MySQL將返回沒有NULL列的第一個UNIQUE索引作為PRIMARY KEY。 在InnoDB表中,將PRIMARY KEY保持較短,以最小化輔助索引的存儲開銷。每個輔助索引條目都包含對應行的主鍵列的副本。 在創建的表中,首先放置一個PRIMARY KEY,然后放置所有UNIQUE索引,然后放置非唯一索引,這有助于MySQL優化器確定使用哪個索引的優先級,還可以更快地檢測重復的UNIQUE鍵。 查看主鍵命名方法7:源代碼

在sql_table.cc 里面對主鍵名稱做了定義聲明。

const char *primary_key_name='PRIMARY';

順著這條路,可以看到在不同層的實現中的一些邏輯情況。

MySQL的主鍵命名策略相關

小結:

通過這樣的一些方式,我們對主鍵的命名情況有了一個整體的認識,為什么會采用PRIMARY這樣一個命名呢,我總結了幾點:

1)統一命名可以理解是一種規范

2)和唯一性索引能夠區別開來,比如一個唯一性索引非空,從屬性上來看很相似的,通過主鍵命名就可以區分出來,在一些特性和索引使用場景中也容易區分。

3)主鍵是一個表索引的第一個位置,統一命名可以在邏輯判斷中更加清晰,包括字段升級為主鍵的場景等等。

4)在優化器處理中也會更加方便,提高MySQL優化器確定使用哪個索引的優先級。

以上就是MySQL的主鍵命名策略相關的詳細內容,更多關于MySQL 主鍵命名策略的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99精品在线| 国产亚洲一区在线| 偷拍亚洲精品| 免费日本视频一区| 性欧美精品高清| 天堂网在线观看国产精品| 亚洲天堂1区| 久久精品影视| 欧美91精品| 鲁大师影院一区二区三区| 亚洲综合二区| 亚洲精品伦理| 国产精品一级| 国产不卡精品| 久久久久久久久丰满| 精品中文字幕一区二区三区av| 欧美va亚洲va日韩∨a综合色| 欧美日韩国产一区精品一区| 免费在线观看日韩欧美| 日韩区欧美区| 免费一区二区三区在线视频| 美女视频免费精品| 蜜桃成人精品| 亚洲综合精品| 日本色综合中文字幕| 国产精品99久久免费| а√天堂8资源中文在线| 天堂网av成人| 蜜臀av亚洲一区中文字幕| 欧美日韩一区二区三区不卡视频| 精品福利久久久| 国产91久久精品一区二区| 亚洲免费播放| 尤物在线精品| 日韩激情啪啪| 美腿丝袜在线亚洲一区| 久久男人av| 国产精品高颜值在线观看| 欧美理论视频| 日韩激情av在线| 国产成人77亚洲精品www| 不卡一区综合视频| 日韩精品视频网站| 久久久久免费| 国产农村妇女精品一二区| 欧美永久精品| 欧美好骚综合网| 欧美综合二区| 欧美1区二区| 久久理论电影| 日韩精品导航| 国产精品成人a在线观看| 日韩制服丝袜av| 久久三级毛片| 免播放器亚洲| 国产66精品| 亚洲另类av| 黄色av日韩| 精品在线网站观看| 国产一区二区高清| 高清精品久久| 日韩**一区毛片| 欧美综合另类| 国产精品片aa在线观看| 91久久午夜| 国产精品久久久久久久久久10秀| 欧美成人综合| 久久香蕉精品香蕉| 在线视频亚洲欧美中文| 极品av在线| 国产探花一区在线观看| 亚洲免费激情| 成人欧美一区二区三区的电影| 日本亚洲视频| 五月天综合网站| 免费在线观看一区二区三区| 日韩在线观看| 国产精品99久久免费| 丝袜美腿一区二区三区| 日韩中文影院| 嫩呦国产一区二区三区av| 天使萌一区二区三区免费观看| 久久久男人天堂| 国产麻豆一区二区三区精品视频| 一本色道久久精品| 午夜精品成人av| 另类小说一区二区三区| 日韩精品亚洲专区| 香蕉成人久久| 欧美精品一区二区三区精品| 青青青免费在线视频| 国产欧美69| 亚洲精品成人一区| 国产尤物精品| 一区视频在线| 久久在线电影| 青青青免费在线视频| 精品国产美女a久久9999| 欧美日韩1区| 亚洲男人在线| 美国欧美日韩国产在线播放| 亚洲国产一区二区在线观看 | 91亚洲人成网污www| 国产精品麻豆成人av电影艾秋| 亚洲精品麻豆| 性欧美长视频| 黄色亚洲大片免费在线观看| 亚洲天堂久久| 欧美日韩免费看片| 日韩电影二区| 日韩毛片视频| 日韩一区二区在线免费| 日韩激情一区| 在线天堂中文资源最新版| 国内不卡的一区二区三区中文字幕| 国产精品自拍区| 国产欧美一区二区色老头| 日本aⅴ精品一区二区三区| 中文字幕av一区二区三区四区| 在线亚洲欧美| 国产精品调教| 日本va欧美va瓶| 久久青草久久| av高清不卡| 国产美女高潮在线观看| 国产专区精品| 在线天堂资源www在线污| 日韩精品永久网址| 国产精品v日韩精品v欧美精品网站 | 免费在线看一区| 欧美二区视频| 亚洲国产日韩欧美在线| 乱人伦精品视频在线观看| 黄色亚洲大片免费在线观看| 亚洲区国产区| 日韩av在线免费观看不卡| 亚洲精品欧美| 国产a久久精品一区二区三区| 久久国产免费看| 天堂俺去俺来也www久久婷婷| 伊人久久一区| av不卡在线| 免费观看日韩电影| 亚洲一级大片| 日韩国产欧美一区二区三区| 91福利精品在线观看| 欧美日韩夜夜| 久久亚洲资源中文字| 国产精品nxnn| 亲子伦视频一区二区三区| 红桃视频国产一区| 日本不卡视频一二三区| 国产福利一区二区三区在线播放| 国产成人精品一区二区三区免费| 久久激情一区| 噜噜噜躁狠狠躁狠狠精品视频| 日韩精品91亚洲二区在线观看| 国产精品观看| 免费高潮视频95在线观看网站| 尤物网精品视频| 日韩激情精品| 精品国产免费人成网站| 国产精品毛片| 老司机久久99久久精品播放免费| 18国产精品| 中文在线免费视频| 亚洲一区日本| 国产欧美自拍| 久久精品亚洲人成影院 | 神马午夜久久| 亚洲精品亚洲人成在线观看| 国产精品视频一区二区三区四蜜臂| 福利一区二区| 亚洲精品成人| 亚洲精品美女91| 日韩av片子| 亚洲精品一二三区区别| 日韩精品久久理论片| 日本欧美国产| 鲁大师成人一区二区三区| 精品中文字幕一区二区三区| 日韩一级欧洲| 欧美国产先锋| 一区福利视频| 狠狠久久伊人| 美女久久一区| 久久精品国产久精国产爱| 九色精品91| 国产精品115| 亚洲福利久久| 青草国产精品| 1024精品一区二区三区| 欧美视频二区| 亚洲二区视频| 久久精品国产99国产精品| 亚洲制服少妇| 国产一区二区三区探花| 一区二区三区四区日韩| 日韩精品永久网址| 欧美啪啪一区|