我的用户有很多地址和很多电话。 我使用mysql和spring。 当我更新用户时,我会删除其地址和电话,并插入数据。
更新用户 删除地址 删除手机
插入地址 插入手机
create table user(
user_id INT NOT NULL AUTO_INCREMENT,
usertitle varchar(100),
hasphones boolean,
PRIMARY KEY (user_id)
);
create table address_user(
address_user_id INT NOT NULL AUTO_INCREMENT,
addresstitle varchar(100),
addressstr varchar(5000),
showcolumn boolean,
usephones boolean,
user_id int not null,
PRIMARY KEY (address_user_id),
KEY `user_id` (`user_id`),
CONSTRAINT `address_user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
);
create table phone_user(
phone_user_id INT NOT NULL AUTO_INCREMENT,
typeParameter int,
phonelabel varchar(25),
user_id int not null,
PRIMARY KEY (phone_user_id),
KEY `user_id` (`user_id`),
CONSTRAINT `phone_user_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`)
);
我收到此错误
ex =(org.springframework.web.util.NestedServletException)org.springframework.web.util.NestedServletException:
请求处理失败;嵌套异常是org.springframework.dao.DataIntegrityViolationException:PreparedStatementCallback; SQL [insert into address_user(addresstitle,addressstr,showcolumn,usephones,user_id)value(?,?,?,?,?)];
无法添加或更新子行:外键约束失败(base
。address_user
,CONSTRAINT address_user_ibfk_1
FOREIGN KEY(user_id
)参考user
(user_id
));
嵌套异常是com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:
删除java代码
StringBuffer sb = new StringBuffer();
sb.append(" delete from address_user where user_id = ? ");
jdbcTemplate.update(sb.toString(), id);
StringBuffer sb = new StringBuffer();
sb.append(" delete from phone_user where user_id = ? ");
jdbcTemplate.update(sb.toString(), id);
插入代码
StringBuffer sb = new StringBuffer();
sb.append(" insert into phone_user (");
sb.append(" typeparameter, phonelabel, user_id ) ");
sb.append(" values (?, ?, ?) ");
jdbcTemplate.update(sb.toString(), phone.getTypeParameter().getValue(), phone.phonelabel(), phone.getUser_id());
StringBuffer sb = new StringBuffer();
sb.append(" insert into address_user (");
sb.append(" addresstitle, addressstr, showcolumn, usephones, user_id ) ");
sb.append(" values (?, ?, ?, ?, ?) ");
j dbcTemplate.update(sb.toString(),address.getAddressTitle(),address.getAddressStr(),address.getShowColumnName(),address.getUsePhones(),phone.getUser_id());
我真的不明白,我不做更新,我删除并插入。
答案 0 :(得分:1)
我确保在address_user表的insert查询中有正确的address_user.user_id。此外,尝试从MySql管理控制台(或您可以用来直接访问您的数据库的任何其他数据库工具)的查询,只是为了验证它是否正常。
错误显示“无法添加或更新...”因此我认为插入失败。
答案 1 :(得分:1)
该错误指出Foreign Key
错误,这意味着您正在尝试在引用其他不存在的表上的注册表的表中插入某些内容。
address_user
表上不存在您尝试在user
表上插入的user_id。所以检查一下。