mysql出错_mysql官网下载

(4) 2024-09-01 09:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
mysql出错_mysql官网下载,希望能够帮助你!!!。

概述

今天在创建某张表的时候,表中的定义是没有外键定义的,但是却提示无法添加外键约束?这种是什么情况呢?下面一起来看看吧~


奇怪现象

CREATE TABLE `ycapp_uat`.`act_re_deployment` ( `ID_` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, `NAME_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `CATEGORY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `KEY_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, `TENANT_ID_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '', `DEPLOY_TIME_` timestamp(0) NULL DEFAULT NULL, `ENGINE_VERSION_` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, PRIMARY KEY (`ID_`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; 
mysql出错_mysql官网下载_https://bianchenghao6.com/blog__第1张


思路:

产生这个错误的多数原因有以下几点:

1、两张表里要设主键和外键的字段的数据类型或者数据长度不一样 (例如这个是int 另外一个是tinyint,或者都是int,但是设置的长度不同)

2、某个表里已经有记录了

3、两个表的引擎不一样

--查看表的引擎语句 show table status from 数据库名 where name='表名'; 

4、要设置外键的字段不能为主键

5、改建所参考的字段必须为主键

6、两个字段必须具有相同的数据类型和约束


解决过程:

1、查看外键关系

SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME, CONSTRAINT_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE CONSTRAINT_SCHEMA = 'ycapp_uat' AND REFERENCED_TABLE_NAME = 'act_re_deployment'; 
mysql出错_mysql官网下载_https://bianchenghao6.com/blog__第2张

可以发现act_re_model的外键列deployment_id_关联act_re_deployment的主键列ID_


2、查看act_re_model表

可以发现act_re_model表已经有数据了,但act_re_deployment都没创建,那就是没数据,违反了外键约束

mysql出错_mysql官网下载_https://bianchenghao6.com/blog__第3张


3、根本原因

在跟测试沟通后发现是sit库(utf8)同步到UAT库(utf8mb4编码),而同步的脚本是先drop表再建表,drop表是成功了,但是创建表的时候由于编码不一致,即主键和外键的字段的数据长度不一样 ,导致无法创建表,也就有了上述奇怪的现象:某张表存在外键约束,但是主表却不在了(因为正常情况下主表不在,是没法创建外键约束的)


觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

mysql出错_mysql官网下载_https://bianchenghao6.com/blog__第4张

今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

上一篇

已是最后文章

下一篇

已是最新文章

发表回复