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中索引约束有哪些_Mysql中索引和约束的示例语句相关推荐
- mysql覆盖索引二次查找_mysql中关于覆盖索引的知识点总结
如果一个索引包含(或覆盖)所有需要查询的字段的值,称为'覆盖索引'. 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点: 1.索引项通常比记录要小,所以My ...
- mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束
1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...
- mysql is not null不生效_MySQL中IS NULL、IS NOT NULL、!=不能用索引?胡扯!
转:https://mp.weixin.qq.com/s/CEJFsDBizdl0SvugGX7UmQ 不知道从什么时候开始,网上流传着这么一个说法: MySQL的WHERE子句中包含 IS NULL ...
- mysql中存储引擎是啥_mysql中的存储引擎
mysql存储引擎概述 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力. ...
- mysql什么情况会加意向锁_MySQL中的锁4-插入意向锁和自增锁
插入意向锁(Insert Intention Lock) 插入意向锁本质上可以看成是一个Gap Lock 普通的Gap Lock 不允许 在 (上一条记录,本记录) 范围内插入数据 插入意向锁Gap ...
- mysql中怎么查询单行单列_MySql中的子查询-结果单行单列
MySQL是开源免费和功能多面的小型数据库,MySQL也是目前流行通用的关系型数据库,已经被 Oracle 收购了.随着版本更新升级,加入一些高级功能,MySQL6.x 版本也开始收费.不过本教程将使 ...
- mysql两个字段相减_MySQL 中NULL和空值的区别?
作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值.那你知道它们有什么区别吗? 学不动了,也不想知道它们有什么区别.大兄弟,不行啊,要面试! 前些天我 ...
- mysql中的锁的指令_mysql中的锁
MYSQL不同的存储引擎支持不同的锁的机制 MyISAM 支持表锁,InnoDB支持表锁和行锁 表锁,行锁比较 表锁:开销小,加锁快:不会出现死锁:锁定力度大,发生锁冲突概率高,并发度最低 行锁:开销 ...
- mysql int类型需要指定长度_mysql中整数类型后面的数字,是不是指定这个字段的长度?比如int(11),11代表11个字节吗?...
原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...
最新文章
- word文档html图片不能移动,win7系统Word中插入的图片不能移动的解决方法
- POJ C++程序设计 编程题#4:计算整数平方和
- HTML5新增的video标签,HTML5中video标签的使用方法
- Linux系统编程8-18总结项目:完成一个简单的自己的shell
- 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
- JavaScript基础大总结
- switch 连接 LG 48GQ900 没有声音
- 仿抖音 抖音接口开发文档
- 百度爱番番实时CDP建设实践
- pacemaker+corosync 搭建一主两从PG集群
- 双稳态电子开关、单按键自锁电路仿真
- 大疆机甲大师Python开发: 两只老虎
- 《游戏学习》纯JS中国象棋人机对战html游戏源码
- Python爬虫初学:报错1:UnicodeEncodeError: 'gbk' codec can't encode character '\xbb'……
- 一次偶然的编程,改变了我的职业生涯
- css实现文字旋转360度
- 自动ip的计算机共享打印,局域网内自动获取ip地址怎么设置打印机共享文件夹...
- 定制填报提交的“确认”提示框
- TortoiseGit使用详解(1)
- Google Earth Engine(GEE)——山西省生物量计算