34

たとえば、次のようなテーブルを作成できます

create table XTable
( 
  idt int not null primary key,
  value nvarchar(50),
  idq int,
  constraint fk_idq foreign key(idq) references YTable(idq)
)

このように作成できます

create table XTable
(
  idt int not null primary key,
  value nvarchar(50),
  idq int,
  foreign key(idq) references YTable(idq)
)

私は通常、2番目の例のようにテーブルを作成しますが、今は最初の例に興味があります。違いはなんですか?

4

3 に答える 3

20

1つ目は、ユーザー定義の名前を外部キーに割り当て、2つ目は、システムで生成された名前を外部キーに割り当てます。

ユーザー定義の外部キー名は、次のような後続のステートメントに役立ちます。

ALTER TABLE XTable DROP    CONSTRAINT fk_idq;
ALTER TABLE XTable ENABLE  CONSTRAINT fk_idq;
ALTER TABLE XTable DISABLE CONSTRAINT fk_idq;

最初にそれらの名前を発見する必要があるため、システムで生成された名前で制約を変更することは困難です。

于 2012-09-29T12:17:42.790 に答える
18

最初のオプションは、純粋に制約に名前を付けるためのものです。

SQLFOREIGNKEY制約から

制約の命名を許可し、複数の列に制約FOREIGN KEYを定義するFOREIGN KEYには、次のSQL構文を使用します

CREATE TABLE Orders
(
  O_Id int NOT NULL,
  OrderNo int NOT NULL,
  P_Id int,
  PRIMARY KEY (O_Id),
  CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
  REFERENCES Persons(P_Id)
)

また、CREATE TABLE(Transact-SQL)から、これはオプションであることがわかり[ CONSTRAINT constraint_name ]ます。

于 2012-09-29T12:19:08.250 に答える
5

名前を制御することを除けば、実際には何もありません。省略した場合、SQLServerは名前を提供します。参考までに、必要な構文は次のとおりです(SQL Fiddle)

create table XTable
(
  idt int not null primary key,
  value nvarchar(50),
  idq int references YTable(idq)
)

これがより完全な例です。

于 2012-09-29T12:19:26.643 に答える