Синтаксис для добавления внешнего ключа с использованием references
внутри оператора create table
: :
[ CONSTRAINT constraint_name ]
REFERENCES reftable [ ( refcolumn ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE referential_action ] [ ON UPDATE referential_action ]
и использование alter table ... add constraint
:
[ CONSTRAINT constraint_name ]
FOREIGN KEY ( column_name [, ... ] ) REFERENCES reftable [ ( refcolumn [, ... ] ) ]
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ]
[ ON DELETE referential_action ] [ ON UPDATE referential_action ]
Единственное функциональное отличие состоит в том, что форма alter table
позволяет создавать внешние ключи, использующие более одного столбца.
Конечно, вы можете использовать форму alter table
внутри create table
как ограничение таблицы, а не ограничение столбца:
create table T (
...
foreign key (c1, c2) references T2(c1, c2)
)
Во всех случаях внешние внешние ключи одинаковы, единственная разница в том, где вы их определяете.