2016-08-17 8 views

Antwort

1

Ja, Sie können einen Autoinkrement-Primärschlüssel mit einem signed int erstellen. Versuchen Sie folgendes:

CREATE TABLE mytable(id int(6) AUTO_INCREMENT PRIMARY KEY); 

Dann werden die folgenden Anfragen beide gültig

INSERT INTO mytable values(); 
INSERT INTO mytable values(-10); 

sind diese in der Tabelle führt eine Zeile mit -10 und zum anderen mit 1 als Werte aufweisen. Aber Sie werden auf Probleme stoßen, wenn Sie das versuchen:

ALTER TABLE mytable AUTO_INCREMENT=-10; 

ja, Sie können nicht Auto-Inkrement-Werte, die negative Zahlen sind.

+0

Und was ist mit einem TRIGGER, der die ID nimmt und minus nach INSERT hinzufügt? Ist es möglich ? – Meloman

+0

ja, möglich, aber Sie spielen mit dem Feuer. Wenn du die generierte ID mit -1 multiplizieren willst, wäre das sicher @Meloman – e4c5

+0

Mutiply um -1 sicherer als CONCAT ('-', id)? interessant ... Ich habe ein Beispiel für mich hier unter https://stackoverflow.com/a/44802856/2282880 gemacht worüber denkst du nach? – Meloman

0

Nach vielen Suchen ... Ich suchte nach einer Lösung mit einem TRIGGER namens BEFORE INSERT! Ich fand dies: https://stackoverflow.com/a/43441586/2282880

Hier ist meine Variante:

CREATE TRIGGER `invertID` 
BEFORE INSERT ON `<table>` 
    FOR EACH ROW SET NEW.id=CONCAT("-", (
     SELECT `auto_increment` 
     FROM INFORMATION_SCHEMA.TABLES  
     WHERE table_name = '<table>') 
    ) 

Es funktionierte für mich in Ordnung.

Es war der beste Weg, zwei Datenbanken mit demselben Schema in beiden Richtungen zu synchronisieren, ohne die gleichen IDs in meinen Tabellen.

Verwandte Themen