mysql查询语句自增长约束_Mysql中索引和约束的示例语句

8af8eac2eda5aa3ed317b53350551da0.png

外键

查询一个表的主键是哪些表的外键

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 `", 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;

数据合并

在数据迁移合并的时候,比较棘手的是不同数据库主键重复,那么我们就要批量修改主键的值,为了避免重复我们可以把自增的数字改为字符串

步骤基本上有以下几步

取消主键自增

删除所有外键

修改主键字段为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,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)后两个参数为原数字进制和要转换后的进制。

第一个参数只要内容是数字就算类型为varchar也可以转换。

以上就是Mysql中索引和约束的示例语句的详细内容,更多关于MySQL 索引和约束的资料请关注云海天教程其它相关文章!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值