在mySql中向表中添加外键的问题

时间:2010-07-29 09:48:04

标签: mysql foreign-keys

尝试执行此操作时出现错误1452:

ALTER TABLE test.potovanja
ADD CONSTRAINT usr_ind
FOREIGN KEY (username) 
REFERENCES test.users (username)

(错误代码:1452 无法添加或更新子行:外键约束失败(测试。,CONSTRAINT#sql-1110_2_ibfk_1 FOREIGN KEY(用户名)REFERENCES用户(用户名)))。引用键和引用键的类型相同(VARCHAR)。

我的SHOW CREATE TABLE输出:

CREATE TABLE `users` (
  `username` varchar(45) NOT NULL,
  `password` varchar(45) DEFAULT NULL,
  `ime` varchar(45) DEFAULT NULL,
  `priimek` varchar(45) DEFAULT NULL,
  `nacinp` varchar(45) DEFAULT NULL,
  `email` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `potovanja` (
  `idpotovanja` int(11) NOT NULL AUTO_INCREMENT,
  `od` varchar(45) DEFAULT NULL,
  `do` varchar(45) DEFAULT NULL,
  `datumvstopa` varchar(45) DEFAULT NULL,
  `username` varchar(45) DEFAULT NULL,
  `cena` varchar(45) DEFAULT NULL,
  `datumizstopa` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idpotovanja`),
  KEY `usr_ind` (`username`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8

我真的不知道该怎么做。

2 个答案:

答案 0 :(得分:0)

似乎users表中没有行,但potovanja表中有一些行。这意味着potovanja中的行无法在users中引用。

答案 1 :(得分:0)

检查potovanja中的所有用户名是否都存在于users表中。你可能在potovanja中有一些用户不再存在

这样的事情会做到......

select * from potovanja p where not exists 
   (select * from users where users.username = p.username)