wie man einen eindeutigen Primärschlüssel für alle Tabellen in derselben database einstellt

Wie legt man einen eindeutigen Primärschlüssel für die ganze Tabelle der database fest?
zum Beispiel wollte ich keinen Primärschlüssel einer anderen Tabelle wiederholen.

table A: ---------- id | name ---------- 1 | aaa 3 | bbb 5 | ccc table B: ------------- id | surname ------------- 7 | ddd 2 | eee 9 | fff table C: ------------- id | nickname ------------- 4 | ggg 6 | hhh 8 | iii 

Alle auto_increment sind primary key und auto_increment . Alle data werden dynamisch PHPMYADMIN . PHPMYADMIN verwende MYSQL in PHPMYADMIN .

Sie können Ihrem Schema eine neue Tabelle namens ID_Table , die nur eine numerische Spalte namens current_id mit dem Standardwert 0 enthält. Wenn Sie einer anderen Tabelle des Schemas eine neue Zeile hinzufügen, müssen Sie eine Auswahl in der ID_Table aufrufen, die ID_Table ID_Table.current_id + 1 als neuer ID-Wert Dann muss ID_Table aktualisiert werden

 Update ID_Tableset ID_Table.current_id = ID_Table.current_id + 1 

Die GetNewId function könnte durch Sperren der ID_Table implementiert werden
Aktualisieren von ID_Tabelle
Rückgabe von NewID

so etwas (ich habe Oracle-Syntax verwendet)

 create table ID_Table( current_id number ); Insert into ID_Table values(0); CREATE OR REPLACE Function GetNewId RETURN number is new_id ID_Table.current_id%type; row_count number; begin select nvl(ID_Table.current_id, 0) + 1 INTO new_id FROM ID_Table for update; update ID_Table set ID_Table.Current_Id = new_id; commit; RETURN new_id; end GetNewId; 

Sie können die maximale ID aus allen drei Tabellen abrufen und sie dann in Ihre Einfügeabfrage insert. Aber Sie müssen das Attribut auto_increment entfernen.

 INSERT INTO TableA SELECT MAX(ID)+1, 'jjj' FROM (SELECT MAX(ID) AS ID FROM TableA UNION SELECT MAX(ID) AS ID FROM TableB UNION SELECT MAX(ID) AS ID FROM TableC ) A; 

Siehe dieses SQLFiddle

Verwenden Sie für jede eingefügte Zeile dieselbe Sequenz wie für den ID-Generator, unabhängig von der Tabelle. Angenommen, Sie verwenden einen DB, mit dem eine Sequenz als ID-Generator für das Feld benannt werden kann.

Das sieht so aus, als würde es tun, was Sie in MySQL wollen: http://devzone.zend.com/1786/mysql-sequence-generator/

Schau dir Sequence an. Ich bin mir nicht sicher, welche DB du verwendest. Postgresql und Oracle haben eine Sequenz, die Sie zwischen Tabellen teilen können.