MySQL 2 Fragen zur Syntax von SQL-Abfragen

Enigma228

Bekanntes Mitglied
Hi Leute!!

hab mal wieder Fragen und zwar vorerst nur zwei.. grins

Warum kann er die Tabelle tbl_telefon nicht erstellen??? Ist vermutlich ein Flüchtigkeitsfehler.. aber ich finde ihn nicht!!
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'usage
varchar(15),
type varchar(10),
description varchar(255),
PRIMARY KEY(id' at line 6

.. und warum auch nicht die Verbindungsttabellen??
ERROR 1005 (HY000): Can't create table 'bibliothek.tbl_person_tel' (errno: 150)
ERROR 1005 (HY000): Can't create table 'bibliothek.tbl_publisher_person' (errno:
150)
ERROR 1005 (HY000): Can't create table 'bibliothek.tbl_actor_person' (errno: 150
)
ERROR 1005 (HY000): Can't create table 'bibliothek.tbl_director_person' (errno:
150)

laut Errorcode soll der Fremdschlüssel falsch sein. Habe ihn aber genauso wie im Handbuch beschrieben gesetzt.
MySQL :: MySQL 5.0 Reference Manual :: 13.2.4.4 FOREIGN KEY Constraints

Achja für Verbesserungsvorschläge an der DB bin ich immer offen (z.B. betreffend der Wiederholungen in den Tabellen für Bücher, CDs und Filme)

Das ist meine DB (noch nicht vollständig da Tabellen bisher nur auf tbl_movie bezogen):


[sql]
create table tbl_movie(
id int unsigned not null auto_increment,
title varchar(30),
description blob,
publication year(4),
cover varchar(255),
genre_id int not null default 1,
language_id int not null default 1,
subtitle_id int,
publisher_id int,
actor_id int,
director_id int,
borrow boolean,
location_id int,
PRIMARY KEY(id)
)engine=innodb;

create table tbl_book(
id int unsigned not null auto_increment,
title varchar(30),
description blob,
publication year(4),
cover varchar(255),
genre_id int not null default 1,
language_id int not null default 1,
publisher_id int,
author_id int,
isbn10 varchar(10),
isbn13 varchar(13),
borrow boolean,
location_id int,
PRIMARY KEY(id)
)engine=innodb;


create table tbl_cd(
id int unsigned not null auto_increment,
title varchar(30),
description blob,
publication year(4),
cover varchar(255),
genre_id int not null default 1,
language_id int not null default 1,
publisher_id int,
interpret_id int,
borrow boolean,
location_id int,
PRIMARY KEY(id)
)engine=innodb;



create table tbl_person(
id int unsigned not null auto_increment,
given_name varchar(30),
surname varchar(30),
street varchar(50),
city varchar(50),
country varchar(50),
telefon_id int,
email varchar(50),
homepage varchar(50),
PRIMARY KEY(id)
)engine=innodb;

create table tbl_telefon(
id int unsigned not null auto_increment,
int_area_code varchar(5),
prefix varchar(10),
callnumber varchar(15),
usage varchar(15),
type varchar(10),
description varchar(255),
PRIMARY KEY(id)
)engine=innodb;

create table tbl_language(
id int unsigned not null auto_increment,
language varchar(30),
PRIMARY KEY(id)
)engine=innodb;

create table tbl_genre(
id int unsigned not null auto_increment,
genre varchar(15),
PRIMARY KEY(id)
)engine=innodb;

#m:n Beziehungen#

create table tbl_person_tel(
person_id int not null,
tel_id int not null,
INDEX(person_id),
FOREIGN KEY(person_id) REFERENCES tbl_person(id),
INDEX(tel_id),
FOREIGN KEY(tel_id) REFERENCES tbl_telefon(id)
)engine=innodb;


create table tbl_publisher_person(
publisher_id int not null,
person_id int not null,
INDEX(publisher_id),
FOREIGN KEY(publisher_id) REFERENCES tbl_movie(publisher_id),
INDEX(person_id),
FOREIGN KEY(person_id) REFERENCES tbl_person(id)
)engine=innodb;

create table tbl_actor_person(
actor_id int not null,
person_id int not null,
INDEX(actor_id),
FOREIGN KEY(actor_id) REFERENCES tbl_movie(actor_id),
INDEX(person_id),
FOREIGN KEY(person_id) REFERENCES tbl_person(id)
)engine=innodb;

create table tbl_director_person(
director_id int not null,
person_id int not null,
INDEX(director_id),
FOREIGN KEY(director_id) REFERENCES tbl_movie(director_id),
INDEX(person_id),
FOREIGN KEY(person_id) REFERENCES tbl_person(id)
)engine=innodb;
[/sql]
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
Zuletzt bearbeitet von einem Moderator:

Enigma228

Bekanntes Mitglied
ok das scheints zu sein.. ich hatte auch using und use an der Stelle getestet, welche anscheinend auch reservierte Wörter zu sein scheinen..

so hast du vielleicht auch eine Idee bezüglich des 2. Problems?
 

eRaaaa

Top Contributor
so hast du vielleicht auch eine Idee bezüglich des 2. Problems?

Idee schon, wirklich Ahnung nicht(deshalb habe ich dazu auch nichts weiter geschrieben)

Die Keys die du da referenzierst müssen soweit ich weiß
Code:
unsigned
sein, d.h. für die erste Tabelle
Code:
tbl_person_tel
müsste es so heißen:

SQL:
create table tbl_person_tel(
	person_id int unsigned  not null,
	tel_id int unsigned not null,
	INDEX(person_id),
	FOREIGN KEY(person_id) REFERENCES tbl_person(id),
	INDEX(tel_id),
	FOREIGN KEY(tel_id) REFERENCES tbl_telefon(id)
)engine=innodb

Dann fällt mir noch auf dass du da versuchst Spalten zu referenzieren die gar kein Schlüssel sind?!
(z.B. REFERENCES tbl_movie(publisher_id))

Aber es wird sich sicher noch ein Datenbank-Profi dazu äußern :)
 

Enigma228

Bekanntes Mitglied
bei tbl_person_tel hat das mit dem unsigned funktioniert..
und stimmt da sind auch beide Werte Primärschlüssel..

hab jetzt mal die Tabellen umfunktioniert und publisher_id ebenfalls als Primärschlüssel gestetzt.. aber keinen Erfolg
hier die geänderten Tabellen:
[sql]
create table tbl_movie(
id int unsigned not null auto_increment,
title varchar(30),
description blob,
publication year(4),
cover varchar(255),
genre_id int unsigned not null default 1,
language_id int unsigned not null default 1,
subtitle_id int unsigned,
publisher_id int unsigned not null, // auch auf unsigned gesetzt
actor_id int unsigned,
director_id int unsigned,
borrow boolean,
location_id int,
PRIMARY KEY(id, publisher_id) // hier als Primärschlüssel hinzugefügt
)engine=innodb;

create table tbl_person(
id int unsigned not null auto_increment,
given_name varchar(30),
surname varchar(30),
street varchar(50),
city varchar(50),
country varchar(50),
telefon_id int,
email varchar(50),
homepage varchar(50),
PRIMARY KEY(id)
)engine=innodb;

create table tbl_publisher_person(
publisher_id int unsigned not null, // hier dem Wert in der tbl_movie angepasst
person_id int unsigned not null,
INDEX(publisher_id),
FOREIGN KEY(publisher_id) REFERENCES tbl_movie(publisher_id),
INDEX(person_id),
FOREIGN KEY(person_id) REFERENCES tbl_person(id)
)engine=innodb;

[/sql]
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
ein zusammengesetzer Primärschlüssel und dann auf einzelne Teile davon referenzieren, na das ist nun ganz ausgeschlossen,
bleibe doch erstmal bei nur einem Primärschlüssel id,
publisher_id ganz außer acht lassen,

kannst du auf id als Fremdschlüssel referenzieren?
vorteilhaft wären erstmal auch kleine Testtabellen mit nur 1-2 Attributen, nur einem Frendschlüssel usw.


-------

weitere Spalten wie publisher_id, die nicht Primärschlüssel sind, aber von anderen Tabellen als Fremdschlüssel referenziert werden,
sollten vielleicht NON NULL UNIQUE sein,
gibts da wirklich kein Lehrbuch zu?
 

Enigma228

Bekanntes Mitglied
aber das ist ja nicht das Ziel..

so funktioniert es, aber ich will ja auf den publisher referenzieren und nicht auf die ID:

[Java]
create table tbl_movie(
id int unsigned not null auto_increment,
title varchar(30),
description blob,
publication year(4),
cover varchar(255),
genre_id int unsigned not null default 1,
language_id int unsigned not null default 1,
subtitle_id int unsigned,
publisher_id int unsigned not null,
actor_id int unsigned,
director_id int unsigned,
borrow boolean,
location_id int,
PRIMARY KEY(id)
)engine=innodb;

create table tbl_person(
id int unsigned not null auto_increment,
given_name varchar(30),
surname varchar(30),
street varchar(50),
city varchar(50),
country varchar(50),
telefon_id int,
email varchar(50),
homepage varchar(50),
PRIMARY KEY(id)
)engine=innodb;

create table tbl_publisher_person(
publisher_id int unsigned not null,
person_id int unsigned not null,
INDEX(publisher_id),
FOREIGN KEY(publisher_id) REFERENCES tbl_movie(id),
INDEX(person_id),
FOREIGN KEY(person_id) REFERENCES tbl_person(id)
)engine=innodb;
[/code]
 

Enigma228

Bekanntes Mitglied
Mache zwar verbindungstabellen aber alle auf den Primärschlüssel von tbl_movie.
Alle anderen Id Punkte habe ich aus der Tabelle rausgenommen..

Auszug aus DB:

Java:
create table tbl_movie(
	id int unsigned not null auto_increment,
	title varchar(30),
	description blob,
	publication year(4),
	cover varchar(255),
	borrowed boolean,
	PRIMARY KEY(id)
)engine=innodb;

create table tbl_person(
	id int unsigned not null auto_increment,
	given_name varchar(30),
	surname varchar(30),
	street varchar(50),
	city varchar(50),
	country varchar(50),
	telefon_id int,
	email varchar(50),
	homepage varchar(50),
	PRIMARY KEY(id)
)engine=innodb;

create table tbl_publisher_person(
	publisher_id int unsigned not null,
	person_id int unsigned not null,
	INDEX(publisher_id),
	FOREIGN KEY(publisher_id) REFERENCES tbl_movie(id),
	INDEX(person_id),
	FOREIGN KEY(person_id) REFERENCES tbl_person(id)
)engine=innodb;
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M MongoDb Versändnis Fragen: ( multiserver, morphia/morphium ) Datenbankprogrammierung 0
D MySQL Grundsätzliche Fragen zu MySQL Datenbankprogrammierung 3
D Allgemeine Fragen Datenbankprogrammierung 2
J Datenbank für Fragen/ Antworten Datenbankprogrammierung 7
C MySQL Fragen zu BLOB zu byte[], Date zu java.util.Date uvm. Datenbankprogrammierung 6
J Anfänger Fragen zu JPA Datenbankprogrammierung 6
S Fragen zur DB-Programmierung Datenbankprogrammierung 6
W Fragen zu Datenbanksystemen Datenbankprogrammierung 10
S Allgemeine Fragen zu Hibernate Datenbankprogrammierung 2
P Noch drei Fragen zu JPA Datenbankprogrammierung 5
M komplettNoob-Fragen: MySQL mit NetBeans nutzen Datenbankprogrammierung 13
-MacNuke- Diverse Fragen zu ORM (Hibernate, JPA, etc.) Datenbankprogrammierung 6
W Zwei Fragen über JDBC und MySQL Datenbankprogrammierung 2
S MySQL - ein paar Fragen ;) Datenbankprogrammierung 11
A Weitere Fragen zu hsqldb Datenbankprogrammierung 6
G Ein paar Fragen zur DB-Programmierung Datenbankprogrammierung 18
G 2 fragen zu java <-> mysql Datenbankprogrammierung 4
M MySQL Error in SQL syntax Datenbankprogrammierung 10
M MySQL-Syntax-Fehler Datenbankprogrammierung 1
B Inner Join ohne SQL Syntax Datenbankprogrammierung 2
C H2 Syntax fehler beim erstellen einer Tabelle Datenbankprogrammierung 4
F Java SQL Syntax Error erst nach mehrmaligen Aufrufen Datenbankprogrammierung 3
M Problem mit HQL Syntax Datenbankprogrammierung 5
Cypha JPA Syntax error - falscher Aufbau? Datenbankprogrammierung 3
Kenan89 Fremdschlüssel, korrekte Syntax? Datenbankprogrammierung 2
D Frage zu SQL Syntax Datenbankprogrammierung 17
P [Hibernate] SQL Syntax-Error Datenbankprogrammierung 2
trash ResultSet Syntax Fehler Datenbankprogrammierung 11
L You have an error in your sql syntax Datenbankprogrammierung 4
R MySQL Syntax für suche nach Textteil Datenbankprogrammierung 8
G Syntax für Select - Abfrage mit Variablen Datenbankprogrammierung 39
N Datenbank abfragen nach bestimmten Wort Datenbankprogrammierung 7
J Datenbank abfragen Datenbankprogrammierung 6
D Daten aus der Firebase-Echtzeitdatenbank abfragen und in Variablen speichern (JAVA) Datenbankprogrammierung 0
O SQL Abfragen mit Mini Datenbank Datenbankprogrammierung 12
M Sql Abfragen Datenbankprogrammierung 1
D 2 Abfragen zusammenfassen Datenbankprogrammierung 7
D MySQL Geburtsdatum per KW abfragen Datenbankprogrammierung 1
W Daten in Java intern abfragen Datenbankprogrammierung 1
Thallius MySQL Tabelle splitten aber wie eine abfragen? Datenbankprogrammierung 10
D geänderte SELECT Abfragen Datenbankprogrammierung 15
D foreignkey abfragen und speichern Datenbankprogrammierung 74
K Viele verschiedenen SQL Abfragen Datenbankprogrammierung 2
J SQLite ResultSet closed -- Wiederholende DB-Abfragen Datenbankprogrammierung 6
R JPA dynamisch auf NULL abfragen Datenbankprogrammierung 2
A MySQL Tabelle ID abfragen und Spalte ausgeben Datenbankprogrammierung 4
K HSQLDB Einzelne Tabellen abfragen? Datenbankprogrammierung 4
F myBatis und komplexe Abfragen Datenbankprogrammierung 3
M MySQL Spaltennamen abfragen Datenbankprogrammierung 2
B Abfragen fehlgeschlagen Datenbankprogrammierung 6
D MySQL Applet MYSQL Abfragen Sicherheit Datenbankprogrammierung 2
E Datenbank Abfragen in eine GUI schreiben Datenbankprogrammierung 8
I Tabelle mit "|" getrennten Werten -> einzelnen Wert davon abfragen Datenbankprogrammierung 15
N Daten aus Datenbank abfragen und anzeigen in der Praxis?? Datenbankprogrammierung 2
S MySQL Server Informationen abfragen Datenbankprogrammierung 6
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
Burny91 SQLite ResultSetMetaData abfragen Datenbankprogrammierung 6
T Kleine Tabellen für schnellere abfragen? Datenbankprogrammierung 3
H Derby SQL-Abfragen in Datei abspeichern Datenbankprogrammierung 2
trash SQL, ganze Tabelle abfragen Datenbankprogrammierung 3
brainray Bei MySQL alle Datenbanken eines Servers abfragen Datenbankprogrammierung 3
N mehrere Abfragen nacheinander wie mit MS Access mit JAVA Datenbankprogrammierung 3
MQue größte id in einer Tabelle abfragen Datenbankprogrammierung 4
A Leere Zelle von einer DB abfragen Datenbankprogrammierung 3
S Abfragen auf Vorhanden Datenbankprogrammierung 23
G Mehrere Tabellen abfragen Datenbankprogrammierung 7
G SQL Abfragen hardcoded im Quelltext? Datenbankprogrammierung 15
G Prolog abfragen mit Java Datenbankprogrammierung 3
M H2 DAtenbank in .sql datei schreiben/abfragen ? Datenbankprogrammierung 3
A Abfragen, wer zur Zeit angemeldet ist Datenbankprogrammierung 3
S Datentypen einer Tabelle Abfragen? Datenbankprogrammierung 2
G Rechte abfragen Datenbankprogrammierung 8
L MySQL : Funktionsweise von '%' in Abfragen Datenbankprogrammierung 2
G INSERT abfragen ob erfolgreich? Datenbankprogrammierung 5
B Eingefügter Datensatz erneut abfragen. Datenbankprogrammierung 10
E Datentyp numeric abfragen? Datenbankprogrammierung 2
P Daten aus 2 Tabellen mit java abfragen Datenbankprogrammierung 9
F die DN eines LDAP verzeichnisses abfragen Datenbankprogrammierung 2
M Abfragen auf ResultSets Datenbankprogrammierung 3
E Einzelne SQL Abfragen, oder alles zusammen? (veraendert!!!) Datenbankprogrammierung 11
A Viele Abfragen auf einmal: Performance Datenbankprogrammierung 2
Z Zeilen-Anzahl abfragen bei Datenbank Datenbankprogrammierung 4
W RsultSet auf null abfragen funktioniert nicht Datenbankprogrammierung 4
isowiz SELECT SUM() Ergebnis in Java abfragen Datenbankprogrammierung 6
S MySQL Abfragen blockiern den Arbeitsspeicher Datenbankprogrammierung 6
G Anzahl der Datensaetze abfragen Datenbankprogrammierung 11
V Anzahl der Datensätze abfragen Datenbankprogrammierung 9
S Bereiche einer Datenbank abfragen Datenbankprogrammierung 3
N Mehrere Abfragen gleichzeitig - was passiert da? Datenbankprogrammierung 6
D Reihenfolge der Abfragen Datenbankprogrammierung 7
L mehrere Abfragen mit einem Statement!? Datenbankprogrammierung 5
G Select-Abfragen sind sehr langsam Datenbankprogrammierung 7

Ähnliche Java Themen


Oben