2010-02-18 2 views
6

Ich versuche, einige SQL-Syntax auswendig zu lernen, und ich habe die ALTER TABLE ADD CONSTRAINT Syntax runter. Ich glaube, dass ich richtig bin, wenn ich sage, dass, wenn Sie diese Syntax verwenden, um eine FOREIGN KEY- oder PRIMARY KEY-Einschränkung hinzuzufügen, dieser SQL-Server automatisch Indizes zur Unterstützung der Abhängigkeitsoperationen erstellt. (Ist das wahr ... oder gilt das nur für die PK, aber nicht für die FK?)Beim Löschen einer Einschränkung werden die unterstützenden Indizes ebenfalls gelöscht.

Wenn ja, wenn Sie die ALTER TABLE DROP CONSTRAINT Syntax verwenden ... werden die unterstützenden Indizes automatisch ebenfalls gelöscht? Können diese impliziten unterstützenden Indizes explizit gelöscht werden? Wenn ja, wird die CONSTRAINT automatisch entfernt?

Ich will nur wissen, wie es "unter der Decke" funktioniert. Googeln hat nicht geholfen. Ich könnte mir vorstellen, dass ich einige Systemtabellen abgefragt haben könnte, um die Wahrheit herauszufinden, aber ich dachte, ich würde es stattdessen versuchen.

Danke für Ihre Hilfe.

Seth

Antwort

2

Wenn Sie einen Primärschlüssel hinzufügen, wird tatsächlich ein eindeutiger Index hinzugefügt. Ob dieser Zusatz dazu führte, dass der neue Index gruppiert wurde, hängt davon ab, ob Sie angegeben haben, dass er nicht gruppiert ist oder nicht. Wenn Sie beim Hinzufügen einer Primärschlüsseleinschränkung nicht angeben, dass es gruppiert oder nicht gruppiert ist, wird es gruppiert, wenn eine gruppierte Integritätsbedingung oder ein gruppierter Index noch nicht in der Tabelle vorhanden ist, andernfalls wird sie nicht geclustert.

Wenn Sie einen Fremdschlüssel hinzufügen, wird kein Index automatisch erstellt.

Wenn Sie eine Integritätsbedingung löschen, werden alle Indizes, die als Ergebnis der Integritätsbedingungserstellung erstellt wurden, gelöscht. Wenn Sie jedoch versuchen, eine eindeutige oder primäre Schlüsseleinschränkung zu löschen, und wenn Fremdschlüsseleinschränkungen darauf verweisen, erhalten Sie einen Fehler.

Indizes, die als Ergebnis der Constraint-Erstellung erstellt wurden, können nicht mit DROP INDEX gelöscht werden.

2

Eine Primärschlüsselbedingung wird einen Clustered-Index auf der Tabelle hinzufügen, wenn man noch nicht existiert sonst eine eindeutige nicht gruppierte Index für sie erstellt wird.

Durch das Löschen einer Primärschlüsseleinschränkung wird auch der zugrunde liegende Index gelöscht.

Eine Fremdschlüsseleinschränkung fügt keinen Index hinzu.

Das Löschen einer Fremdschlüsseleinschränkung führt zu keinem Index.

Fremdschlüssel haben nichts mit Indizes zu tun.

+0

Nicht immer wahr. Wenn für die Tabelle bereits ein gruppierter Index vorhanden ist, wird die PRIMARY KEY-Einschränkung durch einen eindeutigen nicht gruppierten Index erzwungen. –

+0

In SQL Server 2008 haben Fremdschlüssel etwas mit Indizes gemeinsam. Ich konnte einen Index nicht löschen (und es war kein Primärschlüssel-Index), denn wenn von Fremdschlüsseln referenziert wurde. – LukLed

+1

@LukLed, wenn Sie eine 1 zu viele Parent-Child-Beziehung mit einem FK erzwungen haben, muss das Elternelement eindeutig sein. Wenn Sie versuchen, die Eindeutigkeitsbeschränkung für das Elternelement zu löschen, wird ein Fehler ausgelöst. –

2

FKs erhalten nicht automatisch einen Index in SQL Server, wenn Sie einen benötigen, müssen Sie ihn hinzufügen! Wenn Sie den FK löschen, legen Sie keinen Index ab, Sie müssen den Index selbst löschen.

2

Der Index, der eine UNIQUE-Bedingung erzwingt, wird gelöscht, ein Index, der eine FK-Bedingung unterstützt, wird nicht automatisch gelöscht. Es wird auch nicht automatisch erstellt.

Verwandte Themen