外键

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

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

  1. mysql覆盖索引二次查找_mysql中关于覆盖索引的知识点总结

    如果一个索引包含(或覆盖)所有需要查询的字段的值,称为'覆盖索引'. 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1.索引项通常比记录要小,所以My ...

  2. mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  3. mysql is not null不生效_MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!

    转:https://mp.weixin.qq.com/s/CEJFsDBizdl0SvugGX7UmQ 不知道从什么时候开始,网上流传着这么一个说法: MySQL的WHERE子句中包含 IS NULL ...

  4. mysql中存储引擎是啥_mysql中的存储引擎

    mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. ...

  5. mysql什么情况会加意向锁_MySQL中的锁4-插入意向锁和自增锁

    插入意向锁(Insert Intention Lock) 插入意向锁本质上可以看成是一个Gap Lock 普通的Gap Lock 不允许 在 (上一条记录,本记录) 范围内插入数据 插入意向锁Gap ...

  6. mysql中怎么查询单行单列_MySql中的子查询-结果单行单列

    MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...

  7. mysql两个字段相减_MySQL 中NULL和空值的区别?

    作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值.那你知道它们有什么区别吗? 学不动了,也不想知道它们有什么区别.大兄弟,不行啊,要面试! 前些天我 ...

  8. mysql中的锁的指令_mysql中的锁

    MYSQL不同的存储引擎支持不同的锁的机制 MyISAM 支持表锁,InnoDB支持表锁和行锁 表锁,行锁比较 表锁:开销小,加锁快:不会出现死锁:锁定力度大,发生锁冲突概率高,并发度最低 行锁:开销 ...

  9. mysql int类型需要指定长度_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

最新文章

  1. word文档html图片不能移动,win7系统Word中插入的图片不能移动的解决方法
  2. POJ C++程序设计 编程题#4:计算整数平方和
  3. HTML5新增的video标签,HTML5中video标签的使用方法
  4. Linux系统编程8-18总结项目:完成一个简单的自己的shell
  5. 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
  6. JavaScript基础大总结
  7. switch 连接 LG 48GQ900 没有声音
  8. 仿抖音 抖音接口开发文档
  9. 百度爱番番实时CDP建设实践
  10. pacemaker+corosync 搭建一主两从PG集群
  11. 双稳态电子开关、单按键自锁电路仿真
  12. 大疆机甲大师Python开发: 两只老虎
  13. 《游戏学习》纯JS中国象棋人机对战html游戏源码
  14. Python爬虫初学:报错1:UnicodeEncodeError: 'gbk' codec can't encode character '\xbb'……
  15. 一次偶然的编程,改变了我的职业生涯
  16. css实现文字旋转360度
  17. 自动ip的计算机共享打印,局域网内自动获取ip地址怎么设置打印机共享文件夹...
  18. 定制填报提交的“确认”提示框
  19. TortoiseGit使用详解(1)
  20. Google Earth Engine(GEE)——山西省生物量计算

热门文章

  1. Linux的使用和认识实验,通过一个小实验认识Linux vDSO
  2. php 渐变色,段落每行渐变色文本效果
  3. 求一个有限长度字符串 最长的有序可重复字符串长度
  4. 微信小程序—day01
  5. Windows 环境下运用Python制作网络爬虫
  6. 这几天都是在公司慢待
  7. Linq(拓展方法+select())
  8. 解决Oracle 11gR2 空闲连接过多,导致连接数满的问题
  9. 初步认识spring mvc
  10. Microsoft Hololens开发上手(4)