我正在开发一个应用程序,需要保存两个城市之间距离的数据。
我在 Mysql 数据库中创建了一个距离表,其中保存了两个城市的名称以及它们之间的距离。我已将两个城镇列设为复合主键。
我希望数据库限制应用程序进行重复的反向条目(如屏幕截图所示),以防止出现不同的距离值。
解决这个问题的最佳解决方案是什么?
最佳答案
您可以创建一个存储过程来插入到该表中。
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/