Mysql添加外键的方式

Posted durseme_.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql添加外键的方式相关的知识,希望对你有一定的参考价值。

mysql添加外键的几种方式

注意:添加外键是给从表添加(即子表)
父表是主表

方法一:
创建表之前:

FOREIGN KEY (子表id) REFERENCES 关联表名(外主表id)

例如

  create table emp( 			
  	e_id int auto_increment primary key, 			
  	ename varchar(50) not null, 			
  	age int, 			job varchar(20),
  	salary int, 			
  	entrydate date, 			
  	managerid int, 			
  	dept_id int,
  	FOREIGN KEY (dept_id) REFERENCES dept(id) 	
  );

方法二:

创建表后添加:

ALTER TABLE 表1 ADD FOREIGN KEY (从表的外键) REFERENCES dept(主表的主键);

 例如:
 		ALTER TABLE emp ADD FOREIGN KEY (dep_id) REFERENCES dept(id);

注意:

主表(dept)存在从表(emp),从表引用了外键,不能直接删除(主表)

DROP TABLE dept; --删除失败

在删除表的时候,如果存在外键引用,则必须先删除从表(也就是把存在相关外键约束的表全部删掉),才能删除主表。
以上的外键都是物理外键,属于数据库级别的引用,不推荐使用,使用这个会造成数据耦合度大大增加。

主键:

是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性

外键:

是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的。所以说,如果谈到了外键,一定是至少涉及到两张表。

注意:

1、外键字段在创建的时候就应该与主表的类型完全一致(长度等等),否则创建外键会报错;

2、外键表是不能插入主表不存在的数据(该数据指的是与主表主键或从表外键的数据)。–例如部门号只有1,2,3,4,从表插入数据时外键值为5就会产生错误
——>即外键表的外键约束不能随意取值

3、当修改了主表的数据后,关联的外键表的外键约束已经实现了自动修改。

加constraint和不加的区别

当不加constraint,系统将自动给约束起名字,不好记住。 加constraint,可以按照自己的意图给约束起名字。

mysql中添加外键问题,求高手

主你要知道,建外键的作用是使用外键所引用的表来约束所要用到该外键的表!
明白了外键的特性,再来看看这个问题.既然表都建起来了,那么问题肯定不是出在建表结构或者引用上。异常提示说违反约束规则.
分析你的问题,问题出在:
1.在你的航班表中并没有数据,这时候你往机票表中插入数据的时候并没有外键所参考的主键给你引用,这时候因为找不到所要参考的引用,约束规则生效,使你在没有主键参考的情况下不能往表中插入数据.
2.问题分析同上面,但是不同的是航班表中有数据,但是你机票表中插入数据的时候,外键的值并没有在航班表中存在,同样也会报相同的异常.

楼主在Java区也有个相同的问题。。。
参考技术A 插入签要保证emp表中要插入记录的dept外键值在dept表中存在,然后直接写插入语句就可以
insert into emp(id, name, dept) values ( 'id', 'name', 'dept')

以上是关于Mysql添加外键的方式的主要内容,如果未能解决你的问题,请参考以下文章

mysql中添加外键问题,求高手

mysql怎么设置外键?

mysql为啥被设了外键的表还能被删掉?

如何删除有外键的mysql记录

Mysql六大约束

mysql怎么设定外键