php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


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

Thema geschlossen
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-07-2007, 20:27
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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
  #2 (permalink)  
Alt 17-07-2007, 21:01
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

RTFM
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
  #3 (permalink)  
Alt 18-07-2007, 01:02
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
  #4 (permalink)  
Alt 18-07-2007, 03:21
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Andersrum!
Zitat:
CASCADE: Delete or update the row from the parent table and automatically delete or update the matching rows in the child table.
  #5 (permalink)  
Alt 18-07-2007, 12:55
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

warum andersrum?

habs doch genau so beschrieben wie dus auch meinst, oder nicht?

mfg
  #6 (permalink)  
Alt 18-07-2007, 14:03
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von rundmc
habs doch genau so beschrieben wie dus auch meinst, oder nicht?
nein hast du nicht.
  #7 (permalink)  
Alt 18-07-2007, 14:28
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
  #8 (permalink)  
Alt 18-07-2007, 16:10
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

so, danke erstmal.

hab jetzt bei der tabelle PARENT die id spalte auf INDEX gesetzt.
Leider funktionierts noch immer nicht.

Bitte helft mir.

mfg
  #9 (permalink)  
Alt 18-07-2007, 19:38
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Ü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!!
  #10 (permalink)  
Alt 20-07-2007, 10:29
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
  #11 (permalink)  
Alt 20-07-2007, 10:36
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
  #12 (permalink)  
Alt 22-07-2007, 17:42
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
  #13 (permalink)  
Alt 23-07-2007, 00:00
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
  #14 (permalink)  
Alt 23-07-2007, 22:11
rundmc
 Registrierter Benutzer
Links : Onlinestatus : rundmc ist offline
Registriert seit: Jul 2007
Beiträge: 36
rundmc ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
  #15 (permalink)  
Alt 24-07-2007, 00:11
ghostgambler
 Master
Links : Onlinestatus : ghostgambler ist offline
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
ghostgambler ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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~
Thema geschlossen

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 01:11 Uhr.