2

2つのバージョンのSQLコードに出くわしました。

--1
CREATE TABLE Location ( 
Id     INTEGER PRIMARY KEY 
                   NOT NULL,
Name   TEXT    NOT NULL 
);

--2
CREATE TABLE Location ( 
    Id     INTEGER PRIMARY KEY 
                       NOT NULL
                       UNIQUE,
    Name   TEXT    NOT NULL 
);

SQLでは、主キーをnullではなく一意であるように指定する必要がありますか?
私はいつも主キーが一意であり、nullになることはできないと思っていました。

4

4 に答える 4

4

テーブルは主キーを 1 つしか持つことができませんが、一意のキーは複数持つことができます。主キーは、行を一意に指定する列の組み合わせです。これは、一意のキーの特殊なケースです。違いの 1 つは、主キーには暗黙の NOT NULL 制約がありますが、一意のキーにはありません。

于 2011-04-09T17:37:05.670 に答える
3

主キー列に「UNIQUE」を指定することは冗長です。主キーであることは、それが事実であることをすでに保証しています。

于 2011-04-09T17:29:13.247 に答える
2

PRIMARY KEY は両方を意味するため、UNIQUE と NOT NULL はどちらも不要です。

于 2011-04-09T17:34:51.750 に答える
2

あなたのコードは有効な構文です。PRIMARY KEY同じ列をカバーするとUNIQUE制約の両方を作成します。

テーブルに複数のキーがあり、同じ列のセットではないという正当な理由があります。テーブルには、「プライマリ」としてフラグが立てられたキーを 1 つだけ含めることができます。すべてのテーブルには少なくとも 1 つのキーが必要ですが、テーブルにキーが 1 つしかない場合でも、キーを「プライマリ」としてフラグ付けする必要はありません。

SQL Server では、「プライマリ」としてフラグを立てることには意味があります (たとえばNOT NULL、外部キー参照を作成するときの既定のキーなど) が、私はそのようなことについて明示することを好みます。おそらく、テーブルに唯一のキーを持たせることが意図されているため、 を省略することをお勧めしますPRIMARY KEYUNIQUEさらに、キーに明示的な名前を付けることをお勧めします。

CREATE TABLE Location 
( 
 Id INTEGER NOT NULL 
    CONSTRAINT Location__key UNIQUE, 
 Name TEXT NOT NULL 
);
于 2011-04-11T13:18:05.543 に答える