表1
CREATE TABLE `user_info` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
`salary_range_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`),
KEY `user_info_salary_range_id` (`salary_range_id`),
CONSTRAINT `user_info_salary_range_id` FOREIGN KEY (`salary_range_id`) REFERENCES `salary_range` (`salary_range_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;表2
CREATE TABLE `salary_range` (
`salary_range_id` int(11) NOT NULL AUTO_INCREMENT,
`salary` int(11) NOT NULL,
PRIMARY KEY (`salary_range_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `createUser`(
IN v_salary_range int
)
BEGIN
insert into user_info (
user_id,
salary_range_id
)
values (
null,
v_salary_range
);
END;call createUser(0)为什么这样不行呀?怎么设计表才行呀?我的数据处理就是call 0
CREATE TABLE `user_info` (
`user_id` bigint(20) NOT NULL AUTO_INCREMENT,
`salary_range_id` int(11) NOT NULL,
PRIMARY KEY (`user_id`),
KEY `user_info_salary_range_id` (`salary_range_id`),
CONSTRAINT `user_info_salary_range_id` FOREIGN KEY (`salary_range_id`) REFERENCES `salary_range` (`salary_range_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;表2
CREATE TABLE `salary_range` (
`salary_range_id` int(11) NOT NULL AUTO_INCREMENT,
`salary` int(11) NOT NULL,
PRIMARY KEY (`salary_range_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `createUser`(
IN v_salary_range int
)
BEGIN
insert into user_info (
user_id,
salary_range_id
)
values (
null,
v_salary_range
);
END;call createUser(0)为什么这样不行呀?怎么设计表才行呀?我的数据处理就是call 0
2、自增字段一般从1开始,从0开始要设置
INSERT INTO salary_range VALUES(0,1);
CALL createUser(0);
3、插入要从主表开始,不能从子表开始
可能是我没说清楚,刚开始插入user_info的时候salary_range_id是没有数据的,所以我就处理插入0
SET FOREIGN_KEY_CHECKS = 0;
CALL createUser(0);
CALL createUser(0);
SET FOREIGN_KEY_CHECKS = 1;
否则由于这个0在salary_range中不存在,就违反了外键的限制。参照其它表的AUTO_INCREMENT字段这外键,这个在表设计中很常见,没有什么问题。
salary_range这个表是有数据的,从1开始,在插入user_info时salary_range_id插入0,以后更新再插入,我是这个意思,没有别的办法了吗?
CALL createUser(0);
SET FOREIGN_KEY_CHECKS = 1;
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";