亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Mysql中索引和約束的示例語句

 更新時(shí)間:2021年01月03日 09:51:21   作者:碼客  
這篇文章主要介紹了Mysql中索引和約束的相關(guān)資料,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下

外鍵

查詢一個(gè)表的主鍵是哪些表的外鍵

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 = '表名';

導(dǎo)出所有外鍵語句

SELECT
	CONCAT('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;')
FROM
	INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
	TABLE_SCHEMA = 'mydbname'
	AND REFERENCED_TABLE_NAME IS NOT NULL;

刪除所有外鍵語句

SELECT
	CONCAT('ALTER TABLE ', TABLE_NAME, ' DROP FOREIGN KEY ', CONSTRAINT_NAME, ';')
FROM
	INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
	TABLE_SCHEMA = 'mydbname'
	AND REFERENCED_TABLE_NAME IS NOT NULL;

自增

導(dǎo)出創(chuàng)建自增字段的語句

SELECT
	CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', 'MODIFY COLUMN `', COLUMN_NAME, '` ', 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;

創(chuàng)建刪除所有自增字段

SELECT
	CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', 'MODIFY COLUMN `', COLUMN_NAME, '` ', UPPER( COLUMN_TYPE ), ' NOT NULL;' ) as 'DELETE_AUTO_INCREMENT'
FROM
	information_schema.COLUMNS 
WHERE
	TABLE_SCHEMA = 'mydbname' 
	AND EXTRA = UPPER( 'AUTO_INCREMENT' ) 
ORDER BY
	TABLE_NAME ASC;

索引

導(dǎo)出所有索引

SELECT
	CONCAT(
		'ALTER TABLE `',
		TABLE_NAME,
		'` ',
		'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_NAME, '` USING ', INDEX_TYPE ))),
		CONCAT( '(`', COLUMN_NAME, '`)' ),
		';' 
) AS 'ADD_ALL_INDEX' 
FROM
	information_schema.STATISTICS 
WHERE
	TABLE_SCHEMA = 'mydbname' 
ORDER BY
	TABLE_NAME ASC,
	INDEX_NAME ASC;

刪除所有索引

SELECT
	CONCAT( 'ALTER TABLE `', TABLE_NAME, '` ', CONCAT( 'DROP ', IF ( UPPER( INDEX_NAME ) = 'PRIMARY', 'PRIMARY KEY', CONCAT( 'INDEX `', INDEX_NAME, '`' ))), ';' ) AS 'DELETE_ALL_INDEX' 
FROM
	information_schema.STATISTICS 
WHERE
	TABLE_SCHEMA = 'mydbname' 
ORDER BY
	TABLE_NAME ASC;

數(shù)據(jù)合并

在數(shù)據(jù)遷移合并的時(shí)候,比較棘手的是不同數(shù)據(jù)庫主鍵重復(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中索引和約束的示例語句的詳細(xì)內(nèi)容,更多關(guān)于MySQL 索引和約束的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:

相關(guān)文章

  • Mysql索引常見問題匯總

    Mysql索引常見問題匯總

    這篇文章主要介紹了Mysql索引常見問題匯總,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-10-10
  • MySQL定時(shí)備份之使用Linux下的crontab定時(shí)備份實(shí)例

    MySQL定時(shí)備份之使用Linux下的crontab定時(shí)備份實(shí)例

    這篇文章主要介紹了使用Linux下的crontab進(jìn)行MySQL定時(shí)備份的例子,需要的朋友可以參考下
    2014-04-04
  • MySQL 常見存儲(chǔ)引擎的優(yōu)劣

    MySQL 常見存儲(chǔ)引擎的優(yōu)劣

    眾所周知,MySql 提供了很多存儲(chǔ)引擎,這里來比較一下常見引擎的優(yōu)劣。幫助大家選擇合適的存儲(chǔ)引擎
    2021-06-06
  • mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決

    mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決

    這篇文章主要介紹了mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • mysql 8.0.18各版本安裝及安裝中出現(xiàn)的問題(精華總結(jié))

    mysql 8.0.18各版本安裝及安裝中出現(xiàn)的問題(精華總結(jié))

    這篇文章主要介紹了mysql 8.0.18各版本安裝及安裝中出現(xiàn)的問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Mysql查詢正在執(zhí)行的事務(wù)以及等待鎖的操作方式

    Mysql查詢正在執(zhí)行的事務(wù)以及等待鎖的操作方式

    今天小編就為大家分享一篇關(guān)于Mysql查詢正在執(zhí)行的事務(wù)以及等待鎖的操作方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • MySQL8.0與MySQL5.7的區(qū)別詳解

    MySQL8.0與MySQL5.7的區(qū)別詳解

    MySQL8.0是2018年4月20日發(fā)布的全球最受歡迎的開源數(shù)據(jù)庫的一個(gè)非常令人興奮的新版本,下面這篇文章主要給大家介紹了關(guān)于MySQL8.0與MySQL5.7區(qū)別的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • mysql如何讓左模糊查詢也能走索引

    mysql如何讓左模糊查詢也能走索引

    這篇文章主要介紹了mysql如何讓左模糊查詢也能走索引,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • mysql中order by與group by的區(qū)別

    mysql中order by與group by的區(qū)別

    以下是對mysql中order by與group by的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • mysql導(dǎo)入sql文件出錯(cuò)的解決方法

    mysql導(dǎo)入sql文件出錯(cuò)的解決方法

    本文主要介紹了mysql導(dǎo)入sql文件出錯(cuò)的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08

最新評論