Я улучшу это, когда пойду. MySQL будет выполнять ваши пожелания, даже позволяют снимать себя в ногу, как вы идете:
create table t9
(
id int auto_increment primary key,
thing varchar(20) not null,
key(thing),
unique key (thing),
unique key `yet_another` (thing)
);
-- warning 1831 dupe index
show create table t9;
CREATE TABLE `t9` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`thing` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `thing_2` (`thing`),
UNIQUE KEY `yet_another` (`thing`),
KEY `thing` (`thing`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Так что смотрите на весь багаж это вы должны носить с upserts (читай: медленные дополнительные ненужные индексы).
Итак, если вы хотите, чтобы он был как можно более худым, как я уже упоминал в комментариях, сначала откройте вещи, отбросив FK в дочерних таблицах, , ссылаясь на. См. This Answer.
Затем удаляем текущий неуникальную родительский ключ:
DROP INDEX index_name ON tbl_name;
Затем добавить уникальный ключ в родительском. Это новый ссылки:
CREATE UNIQUE INDEX idxName ON tbl_name (colName);
Затем добавьте FK-й в положению детей (ссылки)
CREATE INDEX idxName ON child_tbl_name (colName);
Вы можете получить имена ключей от show create table theTableName
или от SHOW INDEX
. Используйте новые имена для новых, это не имеет значения.
Такие, как:
mysql> show index from t9;
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| t9 | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | |
| t9 | 0 | thing_2 | 1 | thing | A | 0 | NULL | NULL | | BTREE | | |
| t9 | 0 | yet_another | 1 | thing | A | 0 | NULL | NULL | | BTREE | | |
| t9 | 1 | thing | 1 | thing | A | 0 | NULL | NULL | | BTREE | | |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
- это уникальные данные? Сколько ссылочных таблиц у вас есть на это * ссылка * – Drew
Вы могли бы сделать это из child-up (сначала для ребенка). http://stackoverflow.com/a/838412 – Drew
Затем начните восстановление parent-down – Drew