添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
3、两张表的引擎不一致

如下:
A、数据类型不一致:
主表:
在这里插入图片描述
需要关联的表:
在这里插入图片描述
B、设置不一样:
主表:
在这里插入图片描述
需要关联的表:
在这里插入图片描述
C、引擎设置为“InnoDB”:
在这里插入图片描述
将上述设置为一样即可避免出现报错现象。

总结一下:

外键条件
在我们使用外键的时候,应该遵循如下条件:

外键要存在,首先必须保证表的引擎是 InnoDB(默认的存储引擎),如果不是 InnoDB 存储引擎,那么外键可以创建成功,但没有约束作用;
外键字段的字段类型(列类型),必须与父表的主键类型完全一致;
每张表中的外键名称不能重复;
增加外键的字段,如果数据已经存在,那么要保证数据与父表中的主键对应。
如果外键约束模式选择SET NULL ,那么字段必须允许为NULL,否则出现Cannot add foreign key constraint。
所谓外键约束,就是指外键的作用。之前所讲的外键的作用都是默认的作用,实际上,可以通过对外键的需求,进行定制操作。
外键约束有三种模式,分别为:
district:严格模式(默认),父表不能删除或更新一个已经被子表数据引用的记录;
cascade:级联模式,父表的操作,对应子表关联的数据也跟着被删除;
set null:置空模式,父表的操作之后,子表对应的数据(外键字段)被置空。

设计外键的界面,有七列:

名(name):可以不填,保存时会自动生成。
栏位(FieldName):要设置的外键,如:student 里的c_id
参考数据库(Reference DataBase):外键关联的数据库
被参考表(Reference Table):关联的表,这里是class表
参考栏位(Forgin filed Names):关联的字段,class里的id
删除时(ondelete):删除时候的动作,当时我选择的是SETNULL
更新时(onupdate):更新时候的动作,我选择的是CASCADE

以上字段也可以按照自己的需求填写,设置完成后保存即可。

某个表已经有记录了,添加外键失败,这时候只需要将两个要关联的表中的数据清空再从新添加外键关系即可。
部分内容摘抄:
https://blog.csdn.net/TCF_JingFeng/article/details/84332709

问题场景:、 利用Navicat对MySQL两张表想要进行外键关联时设置正确,但出现出现如下错误原因分析:创建外键错误的原因大概有一下几个原因: 1、关联的两个字段的字段的类型不一致 2、设置外键删除时set null 3、两张表的引擎不一致如下:A、数据类型不一致:主表:需要关联的表:B、设置不一样:主表:需要关联的表:C、引擎设置为“InnoDB”:...
在SSM项目中执行一个删除用户操作时报错,遂在navicat中尝试是否可以直接删除,报如下所示错误 student表的主键是selectedcourse表的外键,当需要删除student表内的一行数据时,必须在selectedcourse表内设置该外键在删除时的属性方能实现删除。 当我想删除student表内的某行数据时,也需要删除selectedcourse表内该student的选课信息。因此设置删除时CASCAED,当取值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。 从而实现删除s
mysql中添加外键约束遇到一下情况: cannot add foreign key constraint 出现这个问题一般是开发工作者对外键的使用出现了疏忽,我们先清晰一下外键的使用: 1. 外键字段不能为该表的主键; 2. 外键字段参考字段必须为参考表的主键。如果出现”cannot add foreign key constraint”的情况,建议先检查一下,主表是否有主键以及从表关联字
在创建外键表的时候出现了Cannot add foreign key constraint  。 这里如果设置pid 为外键,有两个必要的条件: 1:pid 不能为该表的主键(primary key)  2:参照建必须为参照表的主键 3:子表和父表的数据类型必须完全一致,
Centos7安装mysql5.7 rpm安装 卸载MariaDB CentOS7默认安装MariaDB而不是MySQL,而且yum服务器上也移除了MySQL相关的软件包。因为MariaDB和MySQL可能会冲突,故先卸载MariaDB。 1、安装新版mysql之前,我们需要将系统自带的mariadb-lib卸载 [root@iZwz94qazh62gk5ewl4ei2Z home]# rpm -qa | grep -i mariadb mariadb-libs-5.5.52-1.el7.x86_64 [root@iZwz94qazh62gk5ewl4ei2Z home]# rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64 如果系统之前有安装过mysql,要先查看有没有安装: rpm -qa | grep -i mysql 如果有安装要先进行删除,避免安装冲突; yum -y remove mysql-libs-5.1.73-7.el6.x86_64 2、到mysql的官网下载最新版mysql的rpm集合包:mysql-5.7.19-1.el6.x86_64.rpm-bundle.tar 3、上传mysql-5.7.18-1.el6.x86_64.rpm-bundle.tar到linux服务器,并解压tar包 [root@iZwz94qazh62gk5ewl4ei2Z home]# mkdir mysql [root@iZwz94qazh62gk5ewl4ei2Z home]# tar -xf mysql-5.7.19-1.el6.x86_64.rpm-bundle.tar -C mysql [root@iZwz94qazh62gk5ewl4ei2Z home]# cd mysql [root@iZwz94qazh62gk5ewl4ei2Z mysql]# ll total 459492 -rw-r--r-- 171553141523618836 Mar 2017:40 mysql-community-client-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 1715531415335496 Mar 2017:40 mysql-community-common-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 17155314153747352 Mar 2017:40 mysql-community-devel-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 171553141539086508 Mar 2017:40 mysql-community-embedded-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 1715531415135869292 Mar 2017:40 mysql-community-embedded-devel-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 17155314152177064 Mar 2017:40 mysql-community-libs-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 17155314151723180 Mar 2017:40 mysql-community-libs-compat-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 1715531415159060212 Mar 2017:41 mysql-community-server-5.7.19-1.el6.x86_64.rpm -rw-r--r-- 1715531415104881084 Mar 2017:41 mysql-community-test-5.7.19-1.el6.x86_64.rpm 4、使用rpm -ivh命令进行安装 [root@iZwz94qazh62gk5ewl4ei2Z mysql]# rpm -ivh mysql-community-common-5.7.19-1.el6.x86_64.rpm warning: mysql-community-common-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-common-5.7.18-1.e################################# [100%] [root@iZwz94qazh62gk5ewl4ei2Z mysql]# rpm -ivh mysql-community-libs-5.7.19-1.el6.x86_64.rpm warning: mysql-community-libs-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-libs-5.7.18-1.el6################################# [100%] [root@iZwz94qazh62gk5ewl4ei2Z mysql]# rpm -ivh mysql-community-client-5.7.19-1.el6.x86_64.rpm warning: mysql-community-client-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-client-5.7.18-1.e################################# [100%] [root@iZwz94qazh62gk5ewl4ei2Z mysql]# rpm -ivh mysql-community-server-5.7.19-1.el6.x86_64.rpm warning: mysql-community-server-5.7.18-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY Preparing... ################################# [100%] Updating / installing... 1:mysql-community-server-5.7.18-1.e################################# [100%] [root@iZwz94qazh62gk5ewl4ei2Z mysql]# 上面几个包有依赖关系,执行有先后。 使用rpm安装方式安装mysql,安装的路径如下:(系统自动配置好了,不需要手动配置) a 数据库目录 /var/lib/mysql/ b 配置文件 /usr/share/mysql(mysql.server命令及配置文件) c 相关命令 /usr/bin(mysqladmin mysqldump等命令) d 启动脚本 /etc/rc.d/init.d/(启动脚本文件mysql的目录) e /etc/my.conf 5、 数据库初始化 为了保证数据库目录为与文件的所有者为 mysql 登陆用户,如果你的linux系统是以 root 身份运行 mysql 服务,需要执行下面的命令初始化 [root@iZwz94qazh62gk5ewl4ei2Z mysql]# mysqld --initialize --user=mysql 如果是以 mysql 身份登录运行,则可以去掉 --user 选项。 另外 --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将该密码标记为过期,登陆后你需要设置一个新的密码, 而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码。 这里演示使用的 --initialize 初始化的,会生成一个 root 账户密码,密码在log文件里,红色区域的就是自动生成的密码 [root@iZwz94qazh62gk5ewl4ei2Z mysql]# cat /var/log/mysqld.log 2017-06-05T14:30:52.709474Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2017-06-05T14:30:55.590590Z 0 [Warning] InnoDB: New log files created, LSN=457902017-06-05T14:30:56.000269Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2017-06-05T14:30:56.109868Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 960c533e-49fb-11e7-91f2-00163e089fd2. 2017-06-05T14:30:56.116186Z 0 [Warning] Gtid table isnot ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2017-06-05T14:30:56.116777Z 1 [Note] A temporary password is generated for root@localhost: :Wu?2QQutQwj 现在启动mysql数据库 [root@iZwz94qazh62gk5ewl4ei2Z mysql]# service mysqld start 可以使用下面两个命令对mysql进行停止,启动和重启: 使用 service 启动:service mysqld start 使用 mysqld 脚本启动:/etc/inint.d/mysqld start 使用 safe_mysqld 启动:safe_mysqld& 使用 service 启动:service mysqld stop 使用 mysqld 脚本启动:/etc/inint.d/mysqld stop mysqladmin shutdown 使用 service 启动:service mysqld restart 使用 mysqld 脚本启动:/etc/inint.d/mysqld restart 连接数据库 [root@iZwz94qazh62gk5ewl4ei2Z mysql]# mysql -u root -p Enter password: 密码输入: :Wu?2QQutQwj 修改密码: set password = password('你的密码'); 设置远程访问 grant all privileges on *.* to 'root' @'%' identified by '123456'; flush privileges; 设置mysql开机启动 加入到系统服务: chkconfig --add mysqld 自动启动: chkconfig mysqld on 查询列表: chkconfig
报错原因一般可能是如下情况 两张表里要设主键和外键的字段的数据类型或者数据长度不一样(例如这个是int,另外一个是bigint,或者都是int,但是设置的长度不同)原谅我就是忘记了这个才总是出错 其中一个表中已经有记录了 两个表的引擎不一样,查看表的引擎语句 show table status from 数据库名 where name=‘表名’; 要设置外键的字段不能为主键 该键所参考的字段必须...
今天用数据库时出现 Error 1215:Cannot add foreign key constraint 报错,在经历了一番波折后解决了问题的所在,写下这篇博客记录一下。 运行的代码: CREATE TABLE `admitpatient_room` ( `PatientID` int(10) NOT NULL, `Disease` varchar(50) DEFAULT NULL, `AdmitDate` date DEFAULT NULL, `RoomNo` int(5) DEF.
一只土狗007: debugfs: open /dev/sda1 debugfs: No such file or directory while trying to open /dev/sda1 出现这个是什么原因呢