广告
返回顶部
首页 > 资讯 > 数据库 >Mysql中索引和约束的示例语句
  • 734
分享到

Mysql中索引和约束的示例语句

MySQL索引MySQL约束 2022-05-25 11:05:52 734人浏览 安东尼
摘要

外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRaiNT_NAME, REFERENCED_TABLE_NAME, REFER

外键

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


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 索引和约束的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Mysql中索引和约束的示例语句

本文链接: https://www.lsjlt.com/news/10092.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Mysql中索引和约束的示例语句
    外键 查询一个表的主键是哪些表的外键 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFER...
    99+
    2022-05-25
    MySQL 索引 MySQL 约束
  • Mysql中SQL语句不使用索引的示例分析
    小编给大家分享一下Mysql中SQL语句不使用索引的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL查询不使用索...
    99+
    2022-10-18
  • MySQL数据库中数据约束的示例分析
    这篇文章主要介绍了MySQL数据库中数据约束的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。为了防止不符合规范的数据进入数据库,在用...
    99+
    2022-10-18
  • MySQL中唯一性约束与NULL的示例分析
    这篇文章给大家分享的是有关MySQL中唯一性约束与NULL的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言之前做的一个需求,简化描述下就是接受其他组的 MQ 的消息,...
    99+
    2022-10-18
  • MySQL中单列索引和多列索引的示例分析
    这篇文章主要为大家展示了“MySQL中单列索引和多列索引的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“MySQL中单列索引和多列索引的示例分析”这篇文...
    99+
    2022-10-18
  • Oracle与MySQL删除字段时对索引和约束的处理方式
    本篇内容主要讲解“Oracle与MySQL删除字段时对索引和约束的处理方式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Oracle与MySQL删除字段时对索引...
    99+
    2022-10-18
  • Oracle中查看无效的对象、约束、触发器和索引
    1、检查无效的数据库对象:SELECT owner, object_name, object_type,status FROM dba_objects WHERE sta...
    99+
    2022-10-18
  • mysql添加索引的方法(Navicat可视化加索引和sql语句加索引)
    使用索引的场景: 阿里云日志里出现了慢sql  然后发现publish_works_id字段会经常用于一些关联,所以决定把这个字段加上索引,优化sql 可视化navicat操作字段加索引,选择字段所在的表,第一步:右键->设计表 第二步:...
    99+
    2023-09-22
    mysql 数据库 sql
  • 一文彻底搞清楚MySQL的主键、外键、约束和各种索引
    0.前言 主键用于唯一标识表中每一行数据,外键用于建立表与表之间关联关系,约束用于限制表中数据的规则,索引用于加速查询。 文章目录 0.前言1. 主键1.1. 在创建表时定义主键1.2. 在已有表中添加主键 2. 外键...
    99+
    2023-08-23
    mysql 数据库 sql 约束 索引
  • MySQL中DML语句的示例分析
    这篇文章将为大家详细讲解有关MySQL中DML语句的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。DML操作是指对数据库中表记录的操作,主要包括表记录的插入(in...
    99+
    2022-10-18
  • mysql中update语句的示例分析
    这篇文章主要介绍了mysql中update语句的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1,准备创建一张test表CREATE...
    99+
    2022-10-18
  • MySQL中索引+explain的使用示例
    这篇文章给大家分享的是有关MySQL中索引+explain的使用示例的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。一、索引的介绍在mysql中,索引就是数据结构,已经在文件中按照...
    99+
    2022-10-18
  • MySQL 索引分类中单列索引的示例分析
    本篇文章为大家展示了MySQL 索引分类中单列索引的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 一个已分区的表不支持全文本...
    99+
    2022-10-18
  • mysql权限和索引的示例分析
    这篇文章将为大家详细讲解有关mysql权限和索引的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。mysql权限和索引mysql的最高用户是root,我们可以在数据...
    99+
    2022-10-18
  • 如何实现MySQL中删除索引的语句?
    如何实现MySQL中删除索引的语句?在MySQL中,索引是提高查询性能的重要工具之一。然而,有时候我们需要删除某个表的索引,可能是因为索引不再使用或者需要重新设计。本文将介绍如何在MySQL中删除索引的语句,并给出具体的代码示例。在MySQ...
    99+
    2023-11-08
    删除索引 (Delete index) MySQL 删除索引 (MySQL delete index) 删除MySQL
  • 如何实现MySQL中创建索引的语句?
    MySQL索引是提高数据检索速度的重要手段之一,它通过将数据存储在特定的数据结构中,加快了查询语句的执行速度。在MySQL中创建索引的语句非常简单,只需要在创建表的时候在相关字段后加上索引关键字即可。本文将为读者详细介绍如何在MySQL中创...
    99+
    2023-11-08
    MySQL索引创建 实现MySQL索引 创建MySQL索引语句
  • MySQL中如何导出索引的创建语句
    本篇文章给大家分享的是有关MySQL中如何导出索引的创建语句,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SELECT CONCA&#...
    99+
    2022-10-18
  • 如何使用SQL语句在MySQL中进行数据校验和完整性约束?
    如何使用SQL语句在MySQL中进行数据校验和完整性约束?数据校验和完整性约束是数据库管理系统中常用的方法,用于确保数据的正确性和完整性。在MySQL中,我们可以通过使用SQL语句来实现这些约束。本文将介绍如何使用SQL语句在MySQL中进...
    99+
    2023-12-18
    MySQL SQL语句 数据校验
  • mysql中入门语句的示例分析
    这篇文章主要为大家展示了“mysql中入门语句的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中入门语句的示例分析”这篇文章吧。Selec&#...
    99+
    2022-10-18
  • mysql中索引与FROM_UNIXTIME的问题示例
    小编给大家分享一下mysql中索引与FROM_UNIXTIME的问题示例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!零、背景简...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作