Mysql中索引和約束的示例語(yǔ)句
SELECTTABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAMEFROMINFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERETABLE_SCHEMA = ’mydbname’AND REFERENCED_TABLE_NAME = ’表名’;導(dǎo)出所有外鍵語(yǔ)句
SELECTCONCAT(’ALTER TABLE ’, TABLE_NAME, ’ ADD CONSTRAINT ’, CONSTRAINT_NAME, ’ FOREIGN KEY (’, COLUMN_NAME, ’) REFERENCES ’, REFERENCED_TABLE_NAME, ’(’, REFERENCED_COLUMN_NAME, ’) ON DELETE CASCADE ON UPDATE CASCADE;’)FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERETABLE_SCHEMA = ’mydbname’AND REFERENCED_TABLE_NAME IS NOT NULL;刪除所有外鍵語(yǔ)句
SELECTCONCAT(’ALTER TABLE ’, TABLE_NAME, ’ DROP FOREIGN KEY ’, CONSTRAINT_NAME, ’;’)FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGEWHERETABLE_SCHEMA = ’mydbname’AND REFERENCED_TABLE_NAME IS NOT NULL;自增導(dǎo)出創(chuàng)建自增字段的語(yǔ)句
SELECTCONCAT( ’ALTER TABLE `’, TABLE_NAME, ’` ’, ’MODIFY COLUMN `’, COLUMN_NAME, ’` ’, UPPER( COLUMN_TYPE ), ’ NOT NULL AUTO_INCREMENT COMMENT '’,COLUMN_COMMENT,’';’ ) as ’ADD_AUTO_INCREMENT’FROMinformation_schema.COLUMNS WHERETABLE_SCHEMA = ’mydbname’ AND EXTRA = UPPER( ’AUTO_INCREMENT’ ) ORDER BYTABLE_NAME ASC;創(chuàng)建刪除所有自增字段
SELECTCONCAT( ’ALTER TABLE `’, TABLE_NAME, ’` ’, ’MODIFY COLUMN `’, COLUMN_NAME, ’` ’, UPPER( COLUMN_TYPE ), ’ NOT NULL;’ ) as ’DELETE_AUTO_INCREMENT’FROMinformation_schema.COLUMNS WHERETABLE_SCHEMA = ’mydbname’ AND EXTRA = UPPER( ’AUTO_INCREMENT’ ) ORDER BYTABLE_NAME ASC;索引導(dǎo)出所有索引
SELECTCONCAT(’ALTER TABLE `’,TABLE_NAME,’` ’,’ADD ’,IF(NON_UNIQUE = 1,CASEUPPER( 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_NAME, ’` USING ’, INDEX_TYPE ))),CONCAT( ’(`’, COLUMN_NAME, ’`)’ ),’;’ ) AS ’ADD_ALL_INDEX’ FROMinformation_schema.STATISTICS WHERETABLE_SCHEMA = ’mydbname’ ORDER BYTABLE_NAME ASC,INDEX_NAME ASC;刪除所有索引
SELECTCONCAT( ’ALTER TABLE `’, TABLE_NAME, ’` ’, CONCAT( ’DROP ’, IF ( UPPER( INDEX_NAME ) = ’PRIMARY’, ’PRIMARY KEY’, CONCAT( ’INDEX `’, INDEX_NAME, ’`’ ))), ’;’ ) AS ’DELETE_ALL_INDEX’ FROMinformation_schema.STATISTICS WHERETABLE_SCHEMA = ’mydbname’ ORDER BYTABLE_NAME ASC;數(shù)據(jù)合并
在數(shù)據(jù)遷移合并的時(shí)候,比較棘手的是不同數(shù)據(jù)庫(kù)主鍵重復(fù),那么我們就要批量修改主鍵的值,為了避免重復(fù)我們可以把自增的數(shù)字改為字符串
步驟基本上有以下幾步
取消主鍵自增 刪除所有外鍵 修改主鍵字段為varchar 添加所有外鍵 修改主鍵的值 合并數(shù)據(jù)修改主鍵值的時(shí)候要注意
如果包含id和pid這種自關(guān)聯(lián)的情況下是不能直接修改值的,就需要先刪除約束再添加。
比如
刪除自約束
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,10,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,10,36)后兩個(gè)參數(shù)為原數(shù)字進(jìn)制和要轉(zhuǎn)換后的進(jìn)制。
第一個(gè)參數(shù)只要內(nèi)容是數(shù)字就算類型為varchar也可以轉(zhuǎn)換。
以上就是Mysql中索引和約束的示例語(yǔ)句的詳細(xì)內(nèi)容,更多關(guān)于MySQL 索引和約束的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. 在Redhat Enterprise server 3上安裝oracle9iR2的注意事項(xiàng)2. DB2 變更管理工具與Rational DA集成(1)3. sql server建表的操作方法4. 如何應(yīng)用SQL Server DBCC避免堵塞5. Window7安裝MariaDB數(shù)據(jù)庫(kù)及系統(tǒng)初始化操作分析6. Mysql InnoDB的鎖定機(jī)制實(shí)例詳解7. 用shell抽取,更新db2的數(shù)據(jù)8. oracle觸發(fā)器介紹9. 整理Oracle數(shù)據(jù)庫(kù)碎片10. DB2 9數(shù)據(jù)庫(kù)中有關(guān)同步trigger的記錄
