Änderung von bestehenden unique-Einschränkung
Ich habe eine Tabelle die wie folgt definiert sind:
CREATE TABLE `Message` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`user_id` integer NOT NULL,
`user_to` integer NOT NULL,
`top_num` integer NOT NULL,
`priority` smallint NOT NULL,
`error` varchar(120) NOT NULL,
UNIQUE (`user_id`, `user_to`, `top_num`)
);
Später habe ich noch eine weitere Spalte, msg_type, wie diese:
ALTER TABLE Message ADD COLUMN msg_type SMALLINT(6) NOT NULL DEFAULT 0;
Allerdings habe ich zu der Erkenntnis gekommen, dass ich meinen ursprünglichen UNIQUE
Einschränkung enthalten msg_type
. Ich habe versucht mit
ALTER TABLE Message
ADD UNIQUE INDEX (`user_id`, `user_to`, `top_num`, `msg_type`);
sondern Fügt sich in meine Tabelle immer noch nicht, und die Fehlermeldung zeigt an, dass das ist, weil die alte Eindeutigkeit scheitert.
Wenn ich rufe describe Messages
in mysql sehe ich Folgendes:
+-----------------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+----------------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| user_to | int(11) | NO | MUL | NULL | |
| top_num | int(11) | NO | MUL | NULL | |
| priority | smallint(6) | NO | | NULL | |
| error | varchar(120) | NO | | NULL | |
| msg_type | smallint(6) | NO | | 0 | |
+-----------------+----------------------+------+-----+---------+----------------+
macht es scheinen, wie msg_type
ist wirklich nicht Teil der Einschränkung... Wie kann ich das alter der Einschränkung, dass die Tabelle definiert wurde, kurz mit der Neuerstellung der Tabelle?
Lesen Sie so ändern Sie den Fremdschlüssel referenzielle Aktion?, Ebenso ändern Sie Ihre unique-Einschränkung.
Hinweis: wenn Sie Tropfen Einschränkung dann nur verengen gelöscht wird, kann die Spalte nicht gelöscht werden. es ist zwei-Schritt-Arbeit in MySQL.
so hatten Sie nicht benannt, Sie Einschränkung
NÖ. Es hat keinen Namen.
ok, ich habe einige Idee, aber nicht sehr sicher, ob ich versuchen zu finden.
Hinweis: wenn Sie Tropfen Einschränkung dann nur verengen gelöscht wird, kann die Spalte nicht gelöscht werden. es ist zwei-Schritt-Arbeit in MySQL.
so hatten Sie nicht benannt, Sie Einschränkung
NÖ. Es hat keinen Namen.
ok, ich habe einige Idee, aber nicht sehr sicher, ob ich versuchen zu finden.
InformationsquelleAutor Catherine | 2014-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als in der vorherigen Antwort
zum ändern der foreign key-Einschränkung
verwenden Sie die Schritte:Schritt 1: Drop-alte Einschränkung:
Schritt 2: Hinzufügen:
Verwenden, ZEIGEN Sie auf TABELLE ERSTELLEN, um zu wissen, name der Einschränkung:
Wenn Sie Prüfungen:
Key_name
istuser_id
dass ist das erste argument inUNIQUE (user_id ....
Nehme an, wenn Sie schreiben:
Dann müssen Sie drop mit
user_to
:Ihr Willkommen!.. Denken Sie daran, wenn Sie löschen-Einschränkung dann in der Spalte nicht gelöscht, damit in diesem speziellen operation, die Sie brauchen nicht zu stören, wenn einige eingereicht werden Fremdschlüssel. Wenn Sie diese referenziert eine Tabelle, dann können Sie deaktivieren die fk-constraint
SET FOREIGN_KEY_CHECKS = 0;
Zeit.InformationsquelleAutor Grijesh Chauhan
Dies ist, weil Sie noch nicht gelöscht, das erste unique-Einschränkung, die Sie erstellt haben. Jetzt haben Sie zwei eindeutige Einschränkungen auf den Tisch.
Löschen Sie eine unique-Einschränkung, haben Sie einen Blick auf dieser post
Drop Unique-Einschränkung aus einer MySQL Tabelle
InformationsquelleAutor Saurabh Goyal
Dies ist, weil Sie mit dem hinzufügen eindeutigen index. Bitte löschen Sie zuerst eindeutigen index und fügen Sie dann die unique-Einschränkung.
DROP INDEX index_name ON table_name
und jetzt add unique-Einschränkung.
DROP INDEX index_name ON table_name
ALTER TABLE Message DROP UNIQUE INDEX user_id Sie fallen jeden index einzeln.
Sie sind richtig, Sie brauche nur auf deine Antwort. dann werde ich abstimmen. Und lösche deinen anderen one-line-Antworten
InformationsquelleAutor Aftab Ahmed
Dies ist, weil Sie mit dem hinzufügen eindeutigen index. Bitte löschen Sie zuerst eindeutigen index und fügen Sie dann die unique-Einschränkung.
und jetzt add unique-Einschränkung.
ALTER TABLE-Nachricht
ADD CONSTRAINT uc_message EINZIGARTIG ((
user_id
,user_to
,top_num
,msg_type
);)InformationsquelleAutor Aftab Ahmed