Kann andere UserID´s vergeben als in der Quelltabelle angelegt sind

mäks

Mitglied
Hallo Zusammen,

Mein Problem ist folgendes:


Ich habe eine Testdatenbank, welche ich später einmal, wenn Sie funktioniert, in eine Homepage einbauen werde.

Code:
Tabelle User

+---------------+----------+------+-----+---------+----------------+
| Field         | Type     | Null | Key | Default | Extra          |
+---------------+----------+------+-----+---------+----------------+
| userid        | int(5)   | NO   | PRI | NULL    | auto_increment |
| ip            | float    | YES  | MUL | NULL    |                |
| browser       | char(20) | YES  |     | NULL    |                |
| activity_stat | int(2)   | YES  |     | NULL    |                |
| name          | char(50) | YES  |     | NULL    |                |
| email         | char(50) | YES  |     | NULL    |                |
| birthdate     | date     | YES  |     | NULL    |                |
| location      | char(50) | YES  |     | NULL    |                |
| last_login    | date     | YES  |     | NULL    |                |
| twitter       | char(50) | YES  |     | NULL    |                |
| facebook      | char(50) | YES  |     | NULL    |                |
| soundcloud    | char(50) | YES  |     | NULL    |                |
| googlep       | char(50) | YES  |     | NULL    |                |
| avatar        | char(50) | YES  |     | NULL    |                |
+---------------+----------+------+-----+---------+----------------+

Tabelle IP

+----------------+--------+------+-----+---------+-------+
| Field          | Type   | Null | Key | Default | Extra |
+----------------+--------+------+-----+---------+-------+
| ip             | float  | NO   | PRI | NULL    |       |
| logged_at_date | date   | YES  |     | NULL    |       |
| logged_at_time | time   | YES  |     | NULL    |       |
| userid         | int(5) | YES  | MUL | NULL    |       |
+----------------+--------+------+-----+---------+-------+

Tabelle preferences

+--------------+----------+------+-----+---------+-------+
| Field        | Type     | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| userid       | int(5)   | YES  | MUL | NULL    |       |
| style        | char(20) | YES  |     | NULL    |       |
| notification | int(1)   | YES  |     | NULL    |       |
| visibility   | int(1)   | YES  |     | NULL    |       |
+--------------+----------+------+-----+---------+-------+

Tabelle post

+-----------+-----------+------+-----+---------+----------------+
| Field     | Type      | Null | Key | Default | Extra          |
+-----------+-----------+------+-----+---------+----------------+
| userid    | int(5)    | YES  | MUL | NULL    |                |
| pid       | int(5)    | NO   | PRI | NULL    | auto_increment |
| title     | char(250) | YES  |     | NULL    |                |
| content   | text      | YES  |     | NULL    |                |
| post_date | date      | YES  |     | NULL    |                |
| post_time | time      | YES  |     | NULL    |                |
+-----------+-----------+------+-----+---------+----------------+

Meine Überlegungen:

Nachdem sich die IP Adresse des Users hin und wieder ändern kann verlagere ich diese in eine andere Datenbank welche dann quasi als History für mich dient, wo ich nachsehen kann mit welchen IP Adressen er insgesamt schon on war.

Nachdem auch ein User mehrere Posts erstellen kann habe ich einen ForeignKey auf tabelle post mit dem feld userid gelegt.

Jetzt habe ich einen User in der Tabelle user angelegt, dieser hat automatisch die Userid 1 durch das AUTO_INCREMENT bekommen.

Demnach dürfte ich ja in anderen Tabellen welche auf diese mit Userid refernzieren keine anderen Userid´s anlegen ausser 1.

Also habe ich bei Tabelle ip einen User mit der Userid 10 angelegt. Komischerweise lässt er mir den auch ohne weiteres anlegen!


Vorher dachte ich mir dass das sicher in den Warnings stehen würde, doch da habe ich mich geirrt.

Kann mir da wer einen Tipp geben wieso das bei mir anders ist, bzw. was ich falsch gemacht habe?

Danke

lg Maks
 
Demnach dürfte ich ja in anderen Tabellen welche auf diese mit Userid refernzieren keine anderen Userid´s anlegen ausser 1.

Wenn du das erreichen willst, musst du InnoDB verwenden.

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.

http://dev.mysql.com/doc/refman/5.1/de/innodb-foreign-key-constraints.html

Hilft dir das weiter?
 
Hallo,

Erreiche ich das nur mit InnoDB?

Danke für den Tipp, komisch nur dass ich es früher in der Schule immer so gemacht habe und ich konnte auch keinen anderen Wert in der Kindtabelle anlegen der nicht in der Elterntabelle existiert :(.

Ich dachte mir dass Mysql die referentielle Integrität schon automatisch anwendet. Also wie eben oben beschrieben, dass wenn ein Fremdschlüssel (kundenid= 10) exisitert dieser auch in der Primärschlüsseltabelle zu finden ist.


Kann mich auch täuschen!

lg Maks
 
Zuletzt bearbeitet von einem Moderator:
Erreiche ich das nur mit InnoDB?

Kann ich dir so genau nicht sagen; ich arbeite überwiegend mit MyISAM und da trifft das definitiv nicht zu.

Ich hab hier [http://www.stefan-reimers.de/blog/mysql-referentielle-integritat-in-myisam.php] was Interessantes dazu gefunden: für MyISAM kannst du das jetzt nur frickelmäßig über Trigger erreichen, ab MySQL 6 soll es die Integrität für alle Engines geben. Der Kommentar darunter gibt dir noch googlebare Wörter SIGNAL und RESIGNAL, vielleicht erreichst du damit was. Da hört aber mein Verständnis auf.

lg
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück