1. 程式人生 > >mysql 設定外來鍵約束(foreign key)

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開始的整數。