外键

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

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中索引和约束的示例语句相关推荐

  1. mysql中索引约束有哪些_Mysql中索引和约束的示例语句

    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCE ...

  2. mysql用唯一约束避免重复_mysql中创建唯一约束防止数据重复

    针对数据重复插入的情况,我们通常会在业务代码中进行处理,就是说入库的时候先查一遍有没有,没有记录的情况再准许入库.但是如果只是自己处理业务代码时先查后入库,并发高时会发生意想不到的后果. 比如现在表t ...

  3. mysql获取当月最后一天_mysql中获取本月第一天、本月最后一天、上月第一天、上月最后一天

    mysql获取当月最后一天_mysql中获取本月第一天.本月最后一天.上月第一天.上月最后一天等等 转自: https://blog.csdn.net/min996358312/article/det ...

  4. mysql索引的使用及优化方法_MySQL中索引和优化的用法总结

    1.什么是数据库中的索引?索引有什么作用? 引入索引的目的是为了加快查询速度.如果数据量很大,大的查询要从硬盘加载数据到内存当中. 2.InnoDB中的索引原理是怎么样的? InnoDB是MySQL的 ...

  5. mysql教程联合索引_MySQL中的联合索引学习教程

    联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...

  6. mysql按升序创建索引_Mysql中的降序索引底层实现

    什么是降序索引 大家可能对索引比较熟悉,而对降序索引比较陌生,事实上降序索引是索引的子集. 我们通常使用下面的语句来创建一个索引: 上面sql的意思是在t1表中,针对b,c,d三个字段创建一个联合索引 ...

  7. mysql 回表查询优化_MySQL中的回表查询与索引覆盖:一次百万级别分页查询使用Limit 从90秒到0.6毫秒的优化...

    这里写目录标题 事故现场 解决方案 提到的"回表查询" InnoDB的索引 什么是回表查询 怎么优化回表查询 事故现场 数据库使用的MySQL,有一个日志表,需要进行分页查询,于是 ...

  8. mysql explain 索引_MySql中Explain详解与索引最佳实践

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之 ...

  9. mysql 关联索引_mysql中关于关联索引的问题——对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引?...

    情况描述:在MySQL的user表中,对a,b,c三个字段建立联合索引,那么查询时使用其中的2个作为查询条件,是否还会走索引? 根据查询字段的位置不同来决定,如查询a,     a,b    a,b, ...

最新文章

  1. idea添加database插件_IDEA高级玩法:集成JIRA、UML类图插件、SSH、FTP、Database管理......
  2. Spring Boot 2.X 实现文件上传(三)
  3. Python高级教程-生成器
  4. 关于面试题的一些题型解析
  5. 强化学习之原理详解、算法流程及Python代码
  6. 马化腾:用户体验的10/100/1000法则
  7. 动态矩阵控制matlab程序_【实时关注】你了解MATLAB吗?
  8. Janus流媒体服务器框架分析
  9. Sharepoint Ribbon Loaction
  10. android手机电话铃声设置,安卓手机铃声怎么设置
  11. C语言程序设计复习指导
  12. OSGL 工具库 - 类型转换的艺术
  13. 【计算机组成】内存和芯片存储容量问题
  14. Pinbox 使用快捷键打开网页
  15. 如何使用ghost制作系统镜像
  16. 瑞芯微RK3568对比RK3399性能解析
  17. Oracle Demo库默认用户/密码为什么叫Scott/Tigger?
  18. ThreadX分析(一)
  19. 定义一个复数类Complex
  20. 趣味编程:从字符串中提取信息

热门文章

  1. Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
  2. 手把手教你jmeter压测--适合入门
  3. 分布式事务一致性方案
  4. 理解去中心化稳定币DAI
  5. kylin cube 增量和全量
  6. Physical Plausible Shading
  7. DEDECMS自定义表单unix时间戳转换成常规时间方法及增加表单添加时间方法
  8. 读书笔记 effctive c++ Item 20 优先使用按const-引用传递(by-reference-to-const)而不是按值传递(by value)...
  9. Material-Animations
  10. 大数据中心有什么作用