Mysql中索引和约束的示例语句
作者:码客 发布时间:2024-01-15 18:56:30
标签:MySQL,索引,约束
外键
查询一个表的主键是哪些表的外键
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


猜你喜欢
- 在php中获取数组长度方法很简单,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度哦,下面我
- 将dataframe添加到texttable里面,实现格式化输出。data=[{"name":"Amay&qu
- 定时刷新的不足与改进web开发中可能遇到这样的场景:网页里的某一块区域里写了一些内容,但这些内容不是固定的,即使看网页的人没有做任何操作,它
- 之一:torchvision 中包含了很多预训练好的模型,这样就使得 fine-tune 非常容易。本文主要介绍如何 fine-tune t
- 我就废话不多说了,大家还是直接看代码吧~'''Created on 2018-4-16'''
- 获得当前时间时间戳# 注意时区的设置import time# 获得当前时间时间戳now = int(time.time())# 转换为其他日
- 1 概述1.1 无监督学习 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区
- 一、安装mysql软件下载并安装MySQL官方的 Yum Repository,Mysql版本8.0.20wget -i -c h
- 以channel Attention Block为例子class CAB(nn.Module):def __init__(self, in_
- 目录输出算法操作封装的操作含时演化算符的分解QFT的分解总结概要输出算法操作首先介绍一个最基本的使用方法,就是使用ProjectQ来打印量子
- 前言:本篇基于Python3环境,Python2环境下的range会有所不同,但并不影响我们使用。1、range()函数是什么?range(
- 一、分析链接上一篇文章指路一般来说,我们参加某个网站的盖楼抽奖活动,并不是仅仅只参加一个,而是多个盖楼活动一起参加。这个时候,我们就需要分析
- finetune分为全局finetune和局部finetune。首先介绍一下局部finetune步骤:1.固定参数 for na
- 可以使用以下3种方法创建数据库。一.使用SQL Server Management Studio创建数据库二..使用CREATE DATAB
- --按日 select sum(consume),day([date]) from consume_record where year([d
- Prometheus 为开发这提供了客户端工具,用于为自己的中间件开发Exporter,对接Prometheus 。目前支持的客户端GoJa
- DDP 数据shuffle 的设置使用DDP要给dataloader传入sampler参数(torch.utils.data.distrib
- 实例如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional
- 方式1.打开Windows的cmd,在cmd中输入jupyter notebook --generate-config如下图:
- 在前面的博文中,我们介绍了如何通过软件模拟实现共享磁盘(https://www.jb51.net/network/592807.html),