Wo liegt der Fehler bei diesem SQL?


14.08.2024, 15:34
CREATE TABLE IF NOT EXISTS house (ID INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, name VARCHAR(40) UNIQUE NOT NULL, description VARCHAR(400) UNIQUE NOT NULL);

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Leider sagst du nicht, welches SQL System du verwendest. Das ist bedauerlich, da die Deklaration von Fremdschlüsseln nicht völlig einheitlich ist. Wenn das MySQL sein soll, würde ich empfehlen, in der zuerst angeführten Anweisung den Fremdschlüssel so zu schreiben:

FOREIGN KEY (house) REFERENCES house(ID)

Nach meinem Verständnis der hier (https://dev.mysql.com/doc/refman/8.4/en/create-table-foreign-keys.html) für MySQL angegebenen Syntax für Foreign Key Constraints müssen die Tabellenattribute, die einen Fremdschlüssel bilden, immer in Klammern geschrieben werden - auch wenn es sich nur um ein Attribut handelt.

Ergänzung:

Für SQLite gilt das auch, siehe hier: https://www.sqlite.org/foreignkeys.html

Woher ich das weiß:Berufserfahrung – Berufstätigkeit als Software-Entwickler

SamanthaI 
Beitragsersteller
 14.08.2024, 16:45

Danke :D

Wie lautet denn die Fehlermeldung? Auf jeden Fall solltest du bei allen Feldern außer der ID das UNIQUE rausnehmen, da es keinen Sinn macht. Es wird sicherlich auch mal zwei Leute mit dem selben Vornamen geben usw.

Woher ich das weiß:Berufserfahrung – Entwickle Anwendungen für iOS, iPadOS und macOS beruflich.

SamanthaI 
Beitragsersteller
 14.08.2024, 16:19

java.sql.SQLException: near "house": syntax error

also:

Connection to SQLite has been established.

CREATE TABLE IF NOT EXISTS house (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(40) UNIQUE NOT NULL, description VARCHAR(400) UNIQUE NOT NULL);

Connection to SQLite has been established.

CREATE TABLE IF NOT EXISTS character (ID INTEGER PRIMARY KEY AUTOINCREMENT, first_name VARCHAR(40) NOT NULL, last_name VARCHAR(40) NOT NULL, house INTEGER NOT NULL, code VARCHAR(48) UNIQUE NOT NULL, FOREIGN KEY house REFERENCES house(ID));

java.sql.SQLException: near "house": syntax error

at org.sqlite.NativeDB.throwex(NativeDB.java:210)

at org.sqlite.NativeDB._exec(Native Method)

at org.sqlite.Stmt.executeUpdate(Stmt.java:152)

at database.Database.<init>(Database.java:22)

at database.Connect.main(Connect.java:43)

Babelfish  14.08.2024, 16:38
@SamanthaI

Wie gesagt, nimm das UNIQUE raus. Dann würde ich die Fremdschlüssel-Spalte nicht auch house nennen, sondern bspw. house_fk