Fremdschlüssel mit sqlite3

niederrheiner

Benutzer
Beiträge
5
Hallo an Alle,
ich möchte folgende Tabelle mit Fremdschlüssel anlegen
Code:
CREATE TABLE tbl_bilder_themen(
  sortnr  INTEGER;
  pidbild INTEGER, FOREIGN KEY(pidbild) REFERENCES tbl_bilder(id_bild),
  pidthema INTEGER, FOREIGN KEY(pidthema) REFERENCES tbl_themen(id_thema)
);

Die beiden anderen Tabellen existieren schon. Das Statement steht in einer Datei Namens test.sql.
Wenn ich nun folgenden Befehl auf der Konsole eingebe
Code:
sqlite3 ~/db_bilder < ~/test.sql
erhalte ich folgende Fehlermeldung
Code:
Error: near line 1: near "pidthema": syntax error
Wenn ich nur einen Fremdschlüssel angebe, wird die Tabelle angelegt. Wie muss ich den zweiten Fremdschlüssel gegen den ersten abgrenzen?
Ich arbeite mit Debian 7.0 und sqlite3 3.7.13 2012-06-11 02:05:22 f5b5a13f7394dc143aa136f1d4faba6839eaa6dc

Bis dann ...
MfG
Günter
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.830
Hallo an Alle,
ich möchte folgende Tabelle mit Fremdschlüssel anlegen
Code:
CREATE TABLE tbl_bilder_themen(
  sortnr  INTEGER;
  pidbild INTEGER, FOREIGN KEY(pidbild) REFERENCES tbl_bilder(id_bild),
  pidthema INTEGER, FOREIGN KEY(pidthema) REFERENCES tbl_themen(id_thema)
);

Keine Ahnung, ob das was mit dem Fehler zu tun hat, aber Du verwendest sowohl ; als auch Komma in der Aufzählung der Felder. Typo, Copy&Paste-Fehler?

Andreas
 

akretschmer

Datenbank-Guru
Beiträge
9.830
war ein Schreibfehler, ansonsten bleibt es bei der Fehlermeldung

Bis dann ...
MfG
Günter

Okay, vielleicht noch irgendwo andere Schreibfehler?

Ich kann es nachvollziehen:

Code:
test=*# create table tbl_bilder(id_bild int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_bilder_pkey" for table "tbl_bilder"
CREATE TABLE
test=*# create table tbl_themen(id_thema int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_themen_pkey" for table "tbl_themen"
CREATE TABLE

test=*# create table tbl_bilder(id_bild int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_bilder_pkey" for table "tbl_bilder"
CREATE TABLE
test=*# create table tbl_themen(id_thema int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_themen_pkey" for table "tbl_themen"
CREATE TABLE
test=*# CREATE TABLE tbl_bilder_themen(
test(#   sortnr  INTEGER,
test(#  pidbild INTEGER, FOREIGN KEY(pidbild) REFERENCES tbl_bilder(id_bild),
test(#   pidthema INTEGER, FOREIGN KEY(pidthema) REFERENCES tbl_themen(id_thema)
test(# );
CREATE TABLE
test=*#

Entweder unterstützt SQLite das irknwie nicht (was ich nach querlesen der Doku aber nicht glaube, es sollte gehen), oder aber Du hast noch ein geheimniss vor uns...


Andreas
 

niederrheiner

Benutzer
Beiträge
5
Okay, vielleicht noch irgendwo andere Schreibfehler?

Ich kann es nachvollziehen:

Code:
test=*# create table tbl_bilder(id_bild int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_bilder_pkey" for table "tbl_bilder"
CREATE TABLE
test=*# create table tbl_themen(id_thema int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_themen_pkey" for table "tbl_themen"
CREATE TABLE
 
test=*# create table tbl_bilder(id_bild int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_bilder_pkey" for table "tbl_bilder"
CREATE TABLE
test=*# create table tbl_themen(id_thema int primary key);
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "tbl_themen_pkey" for table "tbl_themen"
CREATE TABLE
test=*# CREATE TABLE tbl_bilder_themen(
test(#  sortnr  INTEGER,
test(#  pidbild INTEGER, FOREIGN KEY(pidbild) REFERENCES tbl_bilder(id_bild),
test(#  pidthema INTEGER, FOREIGN KEY(pidthema) REFERENCES tbl_themen(id_thema)
test(# );
CREATE TABLE
test=*#

Entweder unterstützt SQLite das irknwie nicht (was ich nach querlesen der Doku aber nicht glaube, es sollte gehen), oder aber Du hast noch ein geheimniss vor uns...


Andreas

Danke für Deine Antworten.
Ich habe mal den folgenden Link überflogen
http://glossar.hs-augsburg.de/SQLit...Online_Generator_f.C3.BCr_Fremdschl.C3.BCssel

und bin dabei auf folgenden Link gestoßen
http://www.rcs-comp.com/site/index.php/view/Utilities-SQLite_foreign_key_trigger_generator

Dort habe ich mir den angegebenen Code kopiert und auf meine Bedürfnisse angepaßt, und siehe, die Tabelle wurde angelegt. Verstanden habe ich es noch nicht, deshalb werde ich den Artikel mal in Ruhe durcharbeiten.
Kennst Du ein gutes Sqlit3-Buch in deutsch?
Wollte eigentlich nur eine kleine Bilderdatenbank aufbauen und nicht sofort mit MySql oder Postgresql beginnen. Von früher habe ich noch SQL-Kenntnisse.

Bis dann ...
MfG
Günter
 

akretschmer

Datenbank-Guru
Beiträge
9.830
Dort habe ich mir den angegebenen Code kopiert und auf meine Bedürfnisse angepaßt, und siehe, die Tabelle wurde angelegt. Verstanden habe ich es noch nicht, deshalb werde ich den Artikel mal in Ruhe durcharbeiten.

Ja, die Syntax ist leicht anders. Vielleicht versteht SQLite Deine verwendete nicht, und wirft einen Fehler. das ist immer noch besser als MySQL:

Code:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36239475
Server version: 5.1.67 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create table master (i int primary key);
Query OK, 0 rows affected (0.00 sec)

mysql> create table slave (x int references master);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into slave values (8);
Query OK, 1 row affected (0.00 sec)

mysql> select * from master;
Empty set (0.00 sec)

oder

Code:
mysql> create table bla(i int check(i<10));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into bla values (1234);
Query OK, 1 row affected (0.00 sec)

Kennst Du ein gutes Sqlit3-Buch in deutsch?
Nein, sorry. Höchstes eines für PG, an dem ich mitgewirkt hab ...


Wollte eigentlich nur eine kleine Bilderdatenbank aufbauen und nicht sofort mit MySql oder Postgresql beginnen. Von früher habe ich noch SQL-Kenntnisse.

Bis dann ...
MfG
Günter

Wenn, dann würde ich Dir eher PostgreSQL empfehlen, siehe meine MySQL-Beispiele als Abschreckung ;-)


Andreas
 

niederrheiner

Benutzer
Beiträge
5
[...]


[qoute]
Nein, sorry. Höchstes eines für PG, an dem ich mitgewirkt hab ...




Wenn, dann würde ich Dir eher PostgreSQL empfehlen, siehe meine MySQL-Beispiele als Abschreckung ;-)


Andreas[/quote]

ich habe mich jetzt doch für PG entschieden, da ich in naher Zukunft doch PG brauche. Wie heißt den Deine favorisierte Literatur?

bis dann ...
MfG
Günter
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.830
[...]


[qoute]
Nein, sorry. Höchstes eines für PG, an dem ich mitgewirkt hab ...




Wenn, dann würde ich Dir eher PostgreSQL empfehlen, siehe meine MySQL-Beispiele als Abschreckung ;-)


Andreas

ich habe mich jetzt doch für PG entschieden, da ich in naher Zukunft doch PG brauche. Wie heißt den Deine favorisierte Literatur?

bis dann ...
MfG
Günter[/quote]

;-)

Also, ganz oben auf der Liste: http://www.postgresql.org/docs/current/interactive/index.html

Ansonsten gibt es das Buch von Herrn Scherbaum (an dem ich einen kleinen Anteil habe als Korrekturleser). Es gibt auch das von Helmle/Eisentraut und eines von Wenk/Pfeiffer, welches sehr angenehm locker geschrieben ist. Ersteres deckt eigentlich sehr vieles ab, das zweite ist eher aus Adminsicht, das dritte einsteigerfreundlich, um es mal kurz zu machen.
Bücher haben aber ein generelles Problem: sie sind schneller veraltet als gelesen.


Andreas
 
Oben