Mysql中索引和約束的示例語句
阿新 • • 發佈:2021-01-04
外來鍵
查詢一個表的主鍵是哪些表的外來鍵
SELECT TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'mydbname' AND REFERENCED_TABLE_NAME = '表名';
匯出所有外來鍵語句
SELECT CONCAT('ALTER TABLE ',TABLE_NAME,' ADD CONSTRAINT ',' FOREIGN KEY (',') REFERENCES ','(',REFERENCED_COLUMN_NAME,') ON DELETE CASCADE ON UPDATE CASCADE;') FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'mydbname' AND REFERENCED_TABLE_NAME IS NOT NULL;
刪除所有外來鍵語句
SELECT CONCAT('ALTER TABLE ',' DROP FOREIGN KEY ',';') FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'mydbname' AND REFERENCED_TABLE_NAME IS NOT NULL;
自增
匯出建立自增欄位的語句
SELECT CONCAT( 'ALTER TABLE `','` ','MODIFY COLUMN `',UPPER( COLUMN_TYPE ),' NOT NULL AUTO_INCREMENT COMMENT "',COLUMN_COMMENT,'";' ) as 'ADD_AUTO_INCREMENT' FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydbname' AND EXTRA = UPPER( 'AUTO_INCREMENT' ) ORDER BY TABLE_NAME ASC;
建立刪除所有自增欄位
SELECT CONCAT( 'ALTER TABLE `',' NOT NULL;' ) as 'DELETE_AUTO_INCREMENT' FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydbname' AND EXTRA = UPPER( 'AUTO_INCREMENT' ) ORDER BY TABLE_NAME ASC;
索引
匯出所有索引
SELECT CONCAT( 'ALTER TABLE `','ADD ',IF ( NON_UNIQUE = 1,CASE UPPER( INDEX_TYPE ) WHEN 'FULLTEXT' THEN 'FULLTEXT INDEX' WHEN 'SPATIAL' THEN 'SPATIAL INDEX' ELSE CONCAT( 'INDEX `',INDEX_NAME,'` USING ',INDEX_TYPE ) END,IF ( UPPER( INDEX_NAME ) = 'PRIMARY',CONCAT( 'PRIMARY KEY USING ',INDEX_TYPE ),CONCAT( 'UNIQUE INDEX `',INDEX_TYPE ))),CONCAT( '(`','`)' ),';' ) AS 'ADD_ALL_INDEX' FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'mydbname' ORDER BY TABLE_NAME ASC,INDEX_NAME ASC;
刪除所有索引
SELECT CONCAT( 'ALTER TABLE `',CONCAT( 'DROP ',IF ( UPPER( INDEX_NAME ) = 'PRIMARY','PRIMARY KEY',CONCAT( 'INDEX `','`' ))),';' ) AS 'DELETE_ALL_INDEX' FROM information_schema.STATISTICS WHERE TABLE_SCHEMA = 'mydbname' ORDER BY TABLE_NAME ASC;
資料合併
在資料遷移合併的時候,比較棘手的是不同資料庫主鍵重複,那麼我們就要批量修改主鍵的值,為了避免重複我們可以把自增的數字改為字串
步驟基本上有以下幾步
- 取消主鍵自增
- 刪除所有外來鍵
- 修改主鍵欄位為varchar
- 新增所有外來鍵
- 修改主鍵的值
- 合併資料
修改主鍵值的時候要注意
如果包含id和pid這種自關聯的情況下是不能直接修改值的,就需要先刪除約束再新增。
比如
刪除自約束
ALTER TABLE `t_director` DROP FOREIGN KEY `fk_directorpid`;
修改值
update t_director set directorid=directorid+100000000; update t_director set directorid=CONV(directorid,10,36); update t_director set directorpid=directorpid+100000000 WHERE directorpid is not null; update t_director set directorpid=CONV(directorpid,36) WHERE directorpid is not null;
新增自約束
ALTER TABLE t_director ADD CONSTRAINT fk_directorpid FOREIGN KEY (directorpid) REFERENCES t_director(directorid) ON DELETE CASCADE ON UPDATE CASCADE;
注意
CONV(directorpid,36)後兩個引數為原數字進位制和要轉換後的進位制。
第一個引數只要內容是數字就算型別為varchar也可以轉換。
以上就是Mysql中索引和約束的示例語句的詳細內容,更多關於MySQL 索引和約束的資料請關注我們其它相關文章!