我有一個這樣的定義的表:修改現有的唯一約束
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`)
);
後來,我加入另一列到其對應的MSG_TYPE,就像這樣:
ALTER TABLE Message ADD COLUMN msg_type SMALLINT(6) NOT NULL DEFAULT 0;
不過,我已經來了意識到我需要將我原來的UNIQUE
約束更改爲包含msg_type
。我試圖運行
ALTER TABLE Message
ADD UNIQUE INDEX (`user_id`, `user_to`, `top_num`, `msg_type`);
但插入到我的表還是失敗,錯誤消息指出,這是因爲舊的唯一性約束失敗。
當我在mysql中調用describe Messages
我看到以下內容:
+-----------------+----------------------+------+-----+---------+----------------+
| 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 | |
+-----------------+----------------------+------+-----+---------+----------------+
這使得它看起來像msg_type
還真是不約束的一部分......我怎樣才能改變約束,該表的定義與重新創建表格?
閱讀[如何更改外鍵的參照作用?(http://stackoverflow.com/questions/3359329/how -to-change-the-foreign-key-referential-action-behavior/14381227#14381227),同樣你會改變你的唯一約束。 –
請注意,當您丟棄約束條件時,只有constrict被刪除,列不會被刪除。這是MySQL中的兩步工作。 –
所以你沒有命名你約束 –