У меня есть эта таблица в базе данных mysql:
mysql> show columns from wifi_network_config_auth_algorithm;
+------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-------------+------+-----+---------+-------+
| wifi_network_config_id | int(11) | NO | PRI | NULL | |
| auth_algorithm | varchar(50) | NO | PRI | NULL | |
+------------------------+-------------+------+-----+---------+-------+
Таблица была создана с использованием ликвидазы. Само создание таблицы не определяет первичные ключи. После создания таблицы следующая команда liquibase используется для установки комбинации из 2 столбцов в качестве первичного ключа:
<addPrimaryKey tableName="wifi_network_config_auth_algorithm"
columnNames="wifi_network_config_id,auth_algorithm"
constraintName="pk_wifi_network_config_auth_algorithm"/>
Теперь, когда вы выполните это для загрузки данных в эту таблицу:
LOCK TABLES `wifi_network_config_auth_algorithm` WRITE;
INSERT INTO `wifi_network_config_auth_algorithm` VALUES
(1, 'OPEN'),
(1, 'SHARED'),
(2, 'SHARED'),
(2, 'LEAP');
UNLOCK TABLES;
Вы получаете:
ERROR 1062 (23000): Duplicate entry '1' for key 2
Поскольку комбинация обоих столбцов является первичным ключом, поэтому комбинация данных в двух столбцах должна быть уникальной - что верно для данных, показанных выше. Почему MySQL жалуется?
Кроме того, он жалуется, что значение «1» присваивается клавише 2, что не имеет смысла. Я изменил ВСТАВКУ на:
INSERT INTO `wifi_network_config_auth_algorithm` (`wifi_network_config_id`, `auth_algorithm`)
но это не имело никакого значения - та же самая жалоба от mysql.
Спасибо,
Хари