21 Stimmen

Der Fremdschlüssel wird nicht erzwungen

Warum wird die folgende Fremdschlüssel-Beschränkung (obwohl sie problemlos ausgeführt wird) von SQLite nicht durchgesetzt? Wie kann ich die Beziehung erzwingen?

CREATE TABLE User (
    UserID TEXT Unique NOT NULL PRIMARY KEY,
    FirstName TEXT NOT NULL,
    LastName TEXT NOT NULL,
    Username TEXT NOT NULL,
    Password TEXT NOT NULL,
    Email TEXT NOT NULL,
    SignupDate TEXT NOT NULL
)

CREATE TABLE Category (
    CategoryID TEXT Unique NOT NULL PRIMARY KEY,
    UserID TEXT,
    FOREIGN KEY(UserID) REFERENCES User(UserID)
)

33voto

Alex Martelli Punkte 805329

Comme die entsprechenden Dokumente sagen (im Abschnitt 2. Aktivieren der Fremdschlüsselunterstützung ) :

Angenommen, die Bibliothek wird mit Fremdschlüssel-Beschränkungen kompiliert wurde, muss sie muss noch von der Anwendung Anwendung zur Laufzeit aktiviert werden, und zwar mit dem PRAGMA foreign_keys Befehl. Für Beispiel:

sqlite> PRAGMA foreign_keys = ON;

Fremdschlüssel-Beschränkungen sind deaktiviert standardmäßig deaktiviert (für Abwärtskompatibilität Kompatibilität) und müssen daher für jede separat für jede Datenbank Verbindung separat aktiviert werden.

Haben Sie das benutzt PRAGMA in dem betreffenden Zusammenhang? (Vorausgesetzt, wie die Dokumente sagen, dass Sqlite angemessen kompiliert ist und auch eine aktuelle Version, die die Durchsetzung von Fremdschlüsselbeschränkungen ermöglicht, natürlich).

6voto

Sie können auch die Unterstützung von Fremdschlüsseln über die Einbettung in die Verbindungszeichenfolge aktivieren:

foreign keys=True

Ejemplo:

"Data Source={DatabaseFullFilePath};Version=3;foreign keys=True;datetimeformat=CurrentCulture"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X