| SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |
|

17-07-2007, 20:27
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
REFERENCES users (id)
Hallo,
Also ich bin neu hier im Forum und hab auch gleich schon eine Frage.
Es geht um den Befehl REFERENCES beim erstellen einer Tabelle in mysql.
Was genau bewirkt dieser Befehl?
Danke schon mal.
mfg peter
|

17-07-2007, 21:01
|
|
tontechniker
PHP Senior
|
|
Registriert seit: Jul 2005
Beiträge: 1.972
|
|
|

18-07-2007, 01:02
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
vielen dank tontechniker.
aber habe nun folgendes problem.
als wenn ich die zwei tabellen vom beispiel so erstell:
Code:
CREATE TABLE parent (id INT NOT NULL,
PRIMARY KEY (id)
) ENGINE=INNODB;
CREATE TABLE child (id INT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id) REFERENCES parent(id)
ON DELETE CASCADE
) ENGINE=INNODB;
und dann in beiden tabellen einen datensatz anlege,
dann müsste doch beim löschen des datensatzes in der tabelle parent auch der datensatz in der tabelle child automatisch gelöscht werden.
das funktioniert aber leider nicht.
bitte helft mir.
mfg peter
|

18-07-2007, 03:21
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Andersrum!
Zitat:
|
CASCADE: Delete or update the row from the parent table and automatically delete or update the matching rows in the child table.
|
|

18-07-2007, 12:55
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
warum andersrum?
habs doch genau so beschrieben wie dus auch meinst, oder nicht?
mfg
|

18-07-2007, 14:03
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Zitat:
Original geschrieben von rundmc
habs doch genau so beschrieben wie dus auch meinst, oder nicht?
|
nein hast du nicht.
|

18-07-2007, 14:28
|
|
tontechniker
PHP Senior
|
|
Registriert seit: Jul 2005
Beiträge: 1.972
|
|
Doch hat er.
Zitat:
|
CASCADE: Bei Löschung/Änderung einer Zeile der Elterntabelle werden automatisch die zugehörigen Zeilen der Kindtabelle auch gelöscht oder geändert.
|
Zitat:
|
beim löschen des datensatzes in der tabelle parent auch der datensatz in der tabelle child automatisch gelöscht werden.
|
Allerdings solltest du die Beschränkungen noch einmal durchgehen, der Index in der referenzierten Tabelle fehlt, wobei das Beispiel das du gepostet hast eindeutig aus der Manual kommt.
|

18-07-2007, 16:10
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
so, danke erstmal.
hab jetzt bei der tabelle PARENT die id spalte auf INDEX gesetzt.
Leider funktionierts noch immer nicht.
Bitte helft mir.
mfg
|

18-07-2007, 19:38
|
|
PHP-Desaster
PHP Expert
|
|
Registriert seit: Mar 2006
Beiträge: 3.104
|
|
Überprüfe im PMA ob die Tabelle wirklich die InnoDB-Engine verwendet. Bei dem Xampp beispielsweise ist InnoDB nicht aktiviert, dies musst du noch aktivieren, um diese Engine verwenden zu können!!
|

20-07-2007, 10:29
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
danke euch allen, das mit innodb funktioniert.
aber jetzt hab ich nochmal eine frage.
bin auf eine liste von sqlbefehlen gestoßen, und jetzt würde mich interessieren was dieser REFERENCES befehl eigentlich macht.
Da steht ja kein CASCADE ON DELETE oder so.
Code:
CREATE TABLE users
(
id int4 NOT NULL PRIMARY KEY,
ids text,
name text NOT NULL,
vorname text NOT NULL,
private bool NOT NULL,
uni_id int4 REFERENCES unis (id),
image_url text
);
CREATE TABLE user_data
(
id int4 NOT NULL PRIMARY KEY REFERENCES users (id),
uni_year int2,
home_zip int4,
home_town text,
home_country text,
relationship int2 REFERENCES relationships (id),
political int2 REFERENCES political (id),
major int4 REFERENCES major (id),
ext_friends int2,
uni_friends int2,
icq int8,
skype text,
aim text,
jabber text,
tel text,
street text,
homepage text,
school int4 REFERENCES schools (id),
jobtype int4 REFERENCES jobs (id),
residence int4 REFERENCES residences (id),
room text,
status text,
interests text,
music text,
books text,
movies text,
"quote" text,
about text,
company text,
doing_what text,
career text,
clubs text,
birthdate date,
register_date date,
last_update date,
sex int2
);
CREATE TABLE concentration_members
(
concentration_id int4 REFERENCES concentrations (id),
user_id int4 REFERENCES users (id)
);
CREATE TABLE concentrations
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE course_members
(
course_id int4 REFERENCES courses (id),
user_id int4 REFERENCES users (id)
);
CREATE TABLE courses
(
id int4 NOT NULL PRIMARY KEY,
turnus varchar(1) NOT NULL CHECK (turnus::text = 'W'::text OR turnus::text = 'S'::text),
name text,
"year" varchar(5) NOT NULL
);
CREATE TABLE friends
(
id1 int4 REFERENCES users (id),
id2 int4 REFERENCES users (id)
);
CREATE TABLE group_members
(
group_id int4 REFERENCES groups (id),
user_id int4 REFERENCES users (id)
);
CREATE TABLE groups
(
id int4 NOT NULL PRIMARY KEY,
name text,
ids varchar(8)
);
CREATE TABLE jobs
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE lookingfor
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE lookingfor_members
(
lookingfor_id int4,
user_id int4 REFERENCES users (id)
);
CREATE TABLE major
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE political
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE relationships
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE residences
(
id int4 NOT NULL PRIMARY KEY,
name text
);
CREATE TABLE schools
(
id int4 NOT NULL PRIMARY KEY,
name text,
"location" text
);
CREATE TABLE unis
(
id int4 NOT NULL PRIMARY KEY,
name text
);
danke.
mfg rundmc
|

20-07-2007, 10:36
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Manual lesen hilft.
Zitat:
|
InnoDB weist jede INSERT- oder UPDATE-Operation zurück, die versucht, einen Fremdschlüsselwert in einer Kindtabelle anzulegen, wenn kein passender Schlüsselwert in der Elterntabelle vorhanden ist. Was InnoDB mit einer INSERT- oder UPDATE-Operation anfängt, die versucht, in der Elterntabelle einen Schlüsselwert zu ändern oder zu löschen, zu dem in der Kindtabelle passende Zeilen vorhanden sind, hängt davon ab, welche Referenzaktion in den Teilklauseln ON UPDATE und ON DELETE der FOREIGN KEY-Klausel angegeben ist.
|
http://dev.mysql.com/doc/refman/5.1/...nstraints.html
|

22-07-2007, 17:42
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
ja, das mit dem ON DELETE CASCADE versteh ich ja.
Aber was ist wenn nur da steht
zb.:
Code:
relationship int2 REFERENCES relationships (id)
also ohne ON...
außerdem fehlt hier auch FOREIGN KEY().
was bringt das?
danke im voraus
mfg
|

23-07-2007, 00:00
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Lies den zitierten Teil doch mal bitte mit Verstand?!
Warum FOREIGN KEY fehlt, weiß ich nicht, aber ich wage mal einfach zu behaupten, dass es auch auf der von mir verlinkten Manual-Seite steht.
|

23-07-2007, 22:11
|
|
rundmc
Registrierter Benutzer
|
|
Registriert seit: Jul 2007
Beiträge: 36
|
|
bins nochmal,
ich check das nicht ganz.
worin liegt der underschied:
Code:
FOREIGN KEY (user_id) REFERENCES users(id);
und
Code:
user_id REFERENCES users(id);
danke
mfg
|

24-07-2007, 00:11
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Scheinbar ist FOREIGN KEY immer eine separate Schreibweise, hinter der Definition der Spalten, bzw. als separates ALTER TABLE, während das simple Nutzen von REFERENCES immer nur direkt hinter der Spalten-Deklaration erfolgt - ich hab dazu zwar spontan keinen Beleg im Manual gefunden, aber das macht zumindest bei mir Sinn ... Ausprobieren könnte die These bestätigen~
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|