mysql - MySQL 中不允许使用反向复合主键

标签 mysql sql primary-key composite-primary-key

我正在开发一个应用程序,需要保存两个城市之间距离的数据。

我在 Mysql 数据库中创建了一个距离表,其中保存了两个城市的名称以及它们之间的距离。我已将两个城镇列设为复合主键。

我希望数据库限制应用程序进行重复的反向条目(如屏幕截图所示),以防止出现不同的距离值。

解决这个问题的最佳解决方案是什么?

Screenshot of distance table with reversed city entries, which shouldn't be possible

最佳答案

您可以创建一个存储过程来插入到该表中。

DELIMITER $$
CREATE PROCEDURE insert_distance(IN p_town1 varchar(50), IN p_town2 varchar(50), IN p_distance int)
BEGIN
INSERT INTO distance(town1, town2, distance)
SELECT LEAST(p_town1, p_town2), GREATEST(p_town1, p_town2), p_distance;
END $$
DELIMITER ;

仅使用此过程进行插入可确保在条目已存在时引发错误。而且您不会意外地以错误的顺序插入城镇。

关于mysql - MySQL 中不允许使用反向复合主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29964898/

相关文章:

php - 从表中选择逗号分隔的记录

sql - 在bigquery中将DATETIME格式转换为自定义格式

php - 自动增量作为主键导致重复条目

SQL 主键自动增量 vs 时间戳

php - 在 PHP 中使用复选框删除 MySQL 记录

mysql - 使用 PDO 的资源链接标识符?

mysql - 如何在sql表中选择数据时忽略重复项

mysql - 如何从匹配两个相似列的表中选择不同的 ID?

php - 使用 $_POST 将数据插入数据库时​​出现错误

python - 使用具有现有数据库 ID 字段的 Django 问题