MySQL只在v3.23.34版本以后才引入外键,并且只有INNODB引擎支持外键
建立外键的前提: 本表的列必须与外键类型相同(外键必须是外表主键)。
外键作用: 使两张表形成关联,外键只能引用外表中的列的值。
指定主键关键字: foreign key(列名)
引用外键关键字: references <外键表名>(外键列名)
事件触发限制: on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action
可以通过 CREATE TABLE 或者 ALTER TABLE 来定义外键。
CREATE TABLE 语法:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,…)] create_definition: column_definition | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…) [reference_definition] column_definition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT ’string’] [reference_definition] index_col_name: col_name [(length)] [ASC | DESC] reference_definition: REFERENCES tbl_name [(index_col_name,…)] [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE] [ON DELETE reference_option] [ON UPDATE reference_option] reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION
ALTER TABLE 语法:
ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] … alter_specification: | ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,…) | ADD [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] [index_type] (index_col_name,…) | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,…) [reference_definition] | DROP FOREIGN KEY fk_symbol
例如:
out_table 主键 id 类型 int
创建含有外键的表:
CREATE TABLE temp( id int, name char(20), FOREIGN KEY(id) REFERENCES out_table(id) ON DELETE CASCADE ON UPDATE CASCADE );
说明:把id列设为out_table外键,当外键的值删除,本表中对应的列筛除,当外键的值改变,本表中对应的列值改变。
