首先介绍一下什么是外键?
外键用于与另外一张表的关联,保证数据的完整性。
创建外键的语法是:
foreign key(外键名称)references 父表
举个例子:
创建父表:
create table my_class(id int primary Auto_increment,class varchar(20));
创建子表,并用外键关联起来
create table student(name varchar(20),number int,id int,foreign key(id) references my_class(id));
那么外键是随便就可以创建么,需要什么条件呢?
1.数据库的存储引擎是innodb,如果不是Innodb,外键可以创建,但是没有约束效果;
2.外键的字段类型必须与父表的主键要求类型一致
3.一张表中的外键名称不能重复
4.增加外键的字段,必须保证数据与主键一致。
看完这4个条件,你或许对存储引擎是什么有疑问?那么这里简单介绍一下
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。
存储引擎的选择
不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:
功 能 | MYISAM | Memory | InnoDB | Archive |
存储限制 | 256TB | RAM | 64TB | None |
支持事物 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键 | No | No | Yes | No
|
可能你也会问什么是外键的约束效果呢?
外键约束就是对父表和子表的约束;
外键约束有3种:
1.district:严格模式,父表不能删除已经被子表引用的数据
2.cascade:级联模式,父表删除,子表的数据也会被删除
3.set null:置空模式,父表删除,子表的数据(外键字段)被置空
指定模式的语法:
foreign key(外键字段) references 父表(主键) on delete 模式 on update 模式;