共計 1432 個字符,預計需要花費 4 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
這篇文章將為大家詳細講解有關 mysql 如何快速獲得庫中無主鍵的表,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
1、查看表主鍵信息
-- 查看表主鍵信息
SELECT
t.TABLE_NAME,
t.CONSTRAINT_TYPE,
c.COLUMN_NAME,
c.ORDINAL_POSITION
INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS t,
INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS c
WHERE
t.TABLE_NAME = c.TABLE_NAME
AND t.CONSTRAINT_TYPE = PRIMARY KEY
AND t.TABLE_NAME = TABLE_NAME
AND t.TABLE_SCHEMA = TABLE_SCHEMA
2、查看無主鍵表
-- 查看無主鍵表
SELECT table_schema, table_name,TABLE_ROWS
FROM information_schema.tables
WHERE (table_schema, table_name) NOT IN (
SELECT DISTINCT table_schema, table_name
FROM information_schema.columns
WHERE COLUMN_KEY = PRI
AND table_schema NOT IN (sys , mysql , information_schema , performance_schema
3、無主鍵表
在 Innodb 存儲引擎中,每張表都會有主鍵,數(shù)據(jù)按照主鍵順序組織存放,該類表成為索引組織表 Index Ogranized Table
如果表定義時沒有顯示定義主鍵,則會按照以下方式選擇或創(chuàng)建主鍵:
1) 先判斷表中是否有 非空的唯一索引,如果有
如果僅有一條 非空唯一索引,則該索引為主鍵
如果有多條 非空唯一索引,根據(jù)索引索引的先后順序,選擇第一個定義的非空唯一索引為主鍵。
2) 如果表中無 非空唯一索引,則自動創(chuàng)建一個 6 字節(jié)大小的指針作為主鍵。
如果主鍵索引只有一個索引鍵,那么可以使用_rowid 來顯示主鍵,實驗測試如下:
-- 刪除測試表
DROP TABLE IF EXISTS t1;
-- 創(chuàng)建測試表
CREATE TABLE `t1` ( `id` int(11) NOT NULL,
`c1` int(11) DEFAULT NULL,
UNIQUE uni_id (id),
INDEX idx_c1(c1)
) ENGINE = InnoDB CHARSET = utf8;
-- 插入測試數(shù)據(jù)
INSERT INTO t1 (id, c1) SELECT 1, 1;
INSERT INTO t1 (id, c1) SELECT 2, 2;
INSERT INTO t1 (id, c1) SELECT 4, 4;
-- 查看數(shù)據(jù)和_rowid
SELECT *, _rowid FROM t1;
可以發(fā)現(xiàn),上面的_rowid 與 id 的值相同,因為 id 列是表中第一個唯一且 NOT NULL 的索引。
關于“mysql 如何快速獲得庫中無主鍵的表”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
向 AI 問一下細節(jié)正文完
發(fā)表至: 數(shù)據(jù)庫
2023-12-04