Mysql中索引和约束的示例语句

作者:码客 时间:2024-01-15 18:56:30 

外键

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


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也可以转换。

来源:https://www.psvmc.cn/article/2020-12-23-mysql-constraint.html

标签:MySQL,索引,约束
0
投稿

猜你喜欢

  • js 表格排序(编辑+拖拽+缩放)

    2024-04-30 08:50:39
  • Pytorch 多块GPU的使用详解

    2021-01-21 09:19:09
  • Go语言使用钉钉机器人推送消息的实现示例

    2024-05-09 14:57:37
  • vscode添加GIT和SVN的方法示例

    2023-08-24 17:44:38
  • sqlserver 脚本和批处理指令小结

    2024-01-20 06:41:37
  • 如何用SQL语句来建表?

    2010-06-13 14:38:00
  • Python调用百度OCR实现图片文字识别的示例代码

    2021-04-07 14:21:50
  • PDO::commit讲解

    2023-06-14 05:35:45
  • Python实现带百分比的进度条

    2022-03-10 00:43:47
  • Zabbix实现微信报警功能

    2021-10-17 04:40:05
  • python3 shelve模块的详解

    2022-12-08 19:41:37
  • keras做CNN的训练误差loss的下降操作

    2023-09-03 07:41:07
  • php的对象传值与引用传值代码实例讲解

    2023-11-06 08:42:37
  • 对numpy中shape的深入理解

    2023-12-09 03:43:41
  • python实现数独算法实例

    2022-11-12 05:31:12
  • Python变量和字符串详解

    2023-08-23 02:59:49
  • python装饰器相当于函数的调用方式

    2021-05-13 13:39:03
  • 用Python实现数据筛选与匹配实例

    2023-01-13 15:31:42
  • Python3内置json模块编码解码方法详解

    2023-02-15 13:32:26
  • MySQL批量SQL插入性能优化详解

    2024-01-21 15:25:59
  • asp之家 网络编程 m.aspxhome.com