Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Fremdschlüssel mit sqlite3

Dieses Thema im Forum "SQLite" wurde erstellt von niederrheiner, 18 März 2013.

  1. niederrheiner

    niederrheiner Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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
     
  3. niederrheiner

    niederrheiner Benutzer

    war ein Schreibfehler, ansonsten bleibt es bei der Fehlermeldung

    Bis dann ...
    MfG
    Günter
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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
     
  5. niederrheiner

    niederrheiner Benutzer

    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
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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)
    
    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
     
  7. niederrheiner

    niederrheiner Benutzer

    [...]


    [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
     
  8. akretschmer

    akretschmer Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden