mysql 設定外來鍵約束(foreign key)
建立外來鍵約束可以採用列級約束語法和表級約束語法,如果僅僅對單獨的一個數據列建立外來鍵約束,則使用列級約束語法即可;如果需要對多個列組合建立外來鍵約束,或者需要為外來鍵約束指定名字則必須使用表級約束語法。
使用列級約束語法建立外來鍵約束直接使用references關鍵字,references指定該列參照的哪個主表,以及參照主表的哪一列。如下SQL語句所示:
create table teacher_table
(
teacher_id int auto_increment,
teacher_name varchar(255),
primary key(teacher_id
);
create table student_table
(
student_id int auto_increment primary key,
student_name varchar(255),
java_teacher int references teacher_table(teacher_id)
);
雖然MySQL支援使用列級約束的語法來建立外來鍵約束,但這種列級的約束語法建立的外來鍵約束不會生效,MySQL提供這種列級約束語法僅僅是和標準SQL保持良好的相容性。因此,如果需要MySQL中的外來鍵約束生效,應使用表級約束語法。
create table teacher_table1
(
teacher_id int auto_increment,
teacher_name varchar(255),
primary key(teacher_id)
);
create table student_table1
(
student_id int auto_increment primary key,
student_name varchar(255),
java_teacher int,
foreign key(java_teacher) references teacher_table1(teacher_id)
或者使用下面的語句建立外來鍵約束,並指定外來鍵約束名student_teacher_fk
constraint student_teacher_fk foreign key(java_teacher) references teacher_table1(teacher_id)
);
如果使用表級約束語法,則可以需要使用foreign key來指定本表的外來鍵列,並使用references來指定參照哪個主表,以及參照到主表的哪個列。使用表級約束語法可以使用外來鍵的約束指定約束名,如果建立外來鍵約束沒有指定約束名,則MySQL會為該外來鍵約束命名為table_name_ibfk_n,其中table_name是從表的表名,而n是從1開始的整數。