mysql 约束 和索引_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也可以转换。
以上就是Mysql中索引和约束的示例语句的详细内容,更多关于MySQL 索引和约束的资料请关注我们其它相关文章!
本文标题: Mysql中索引和约束的示例语句
本文地址: http://www.cppcns.com/shujuku/mysql/372476.html
mysql 约束 和索引_Mysql中索引和约束的示例语句相关推荐
- mysql中索引约束有哪些_Mysql中索引和约束的示例语句
外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...
- mysql用唯一约束避免重复_mysql中创建唯一约束防止数据重复
针对数据重复插入的情况,我们通常会在业务代码中进行处理,就是说入库的时候先查一遍有没有,没有记录的情况再准许入库.但是如果只是自己处理业务代码时先查后入库,并发高时会发生意想不到的后果. 比如现在表t ...
- mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天
mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...
- mysql索引的使用及优化方法_MySQL中索引和优化的用法总结
1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是MySQL的 ...
- mysql教程联合索引_MySQL中的联合索引学习教程
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...
- mysql按升序创建索引_Mysql中的降序索引底层实现
什么是降序索引 大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集. 我们通常使用下面的语句来创建一个索引: 上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引 ...
- mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...
这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...
- mysql explain 索引_MySql中Explain详解与索引最佳实践
使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之 ...
- mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...
情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a, a,b a,b, ...
最新文章
- idea添加database插件_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理......
- Spring Boot 2.X 实现文件上传(三)
- Python高级教程-生成器
- 关于面试题的一些题型解析
- 强化学习之原理详解、算法流程及Python代码
- 马化腾:用户体验的10/100/1000法则
- 动态矩阵控制matlab程序_【实时关注】你了解MATLAB吗?
- Janus流媒体服务器框架分析
- Sharepoint Ribbon Loaction
- android手机电话铃声设置,安卓手机铃声怎么设置
- C语言程序设计复习指导
- OSGL 工具库 - 类型转换的艺术
- 【计算机组成】内存和芯片存储容量问题
- Pinbox 使用快捷键打开网页
- 如何使用ghost制作系统镜像
- 瑞芯微RK3568对比RK3399性能解析
- Oracle Demo库默认用户/密码为什么叫Scott/Tigger?
- ThreadX分析(一)
- 定义一个复数类Complex
- 趣味编程:从字符串中提取信息
热门文章
- Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
- 手把手教你jmeter压测--适合入门
- 分布式事务一致性方案
- 理解去中心化稳定币DAI
- kylin cube 增量和全量
- Physical Plausible Shading
- DEDECMS自定义表单unix时间戳转换成常规时间方法及增加表单添加时间方法
- 读书笔记 effctive c++ Item 20 优先使用按const-引用传递(by-reference-to-const)而不是按值传递(by value)...
- Material-Animations
- 大数据中心有什么作用