各位用户为了找寻关于Mysql中索引和约束的示例语句的资料费劲了很多周折。这里教程网为您整理了关于Mysql中索引和约束的示例语句的相关资料,仅供查阅,以下为您介绍关于Mysql中索引和约束的示例语句的详细内容
外键
查询一个表的主键是哪些表的外键
? 1 2 3 4 5 6 7 8 9 10 11SELECT
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 =
'表名'
;
导出所有外键语句
? 1 2 3 4 5 6 7SELECT
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
;
删除所有外键语句
? 1 2 3 4 5 6 7SELECT
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
;
自增
导出创建自增字段的语句
? 1 2 3 4 5 6 7 8 9SELECT
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
;
创建删除所有自增字段
? 1 2 3 4 5 6 7 8 9SELECT
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
;
索引
导出所有索引
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31SELECT
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
;
删除所有索引
? 1 2 3 4 5 6 7 8SELECT
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这种自关联的情况下是不能直接修改值的,就需要先删除约束再添加。
比如
删除自约束
? 1ALTER
TABLE
`t_director`
DROP
FOREIGN
KEY
`fk_directorpid`;
修改值
? 1 2 3 4 5update
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
;
添加自约束
? 1ALTER
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 索引和约束的资料请关注其它相关文章!
原文链接:https://www.psvmc.cn/article/2020-12-23-mysql-constraint.html