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

2022-09-24 14:09:15 字數 3587 閱讀 4636

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 ', 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;

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;

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;

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 `', infyaasdex_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;

在資料遷移合併的時候,比較棘手www.cppcns.com的是不同資料庫主鍵重複,那麼我們就要批量修改主鍵的值,為了避免重複我們可以把自增的數字改為字串

步驟基本上有以下幾步

修改主鍵值的時候要注意

如果包含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,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 cafyaasscfyaasade;

注意conv(directorpid,10,36)後兩個引數為原數字進製和要轉換後的進製。

第乙個引數只要內容是數字就算型別為varchar也可以轉換。

mysql 索引與約束 mysql索引和約束區別

一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外 ...

mysql索引和約束區別

一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null除外 ...

索引和約束的刪除

建立主建約束和唯一約束時會自動建立同名索引。相關資料字典 user constraints,user indexes 使用下面命令刪除索引索引時,會提示錯誤。drop index table pk 這是可以刪除約束再刪除索引。alter table table drop constraint tab...