表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
解决方案 »
- 怪事!mysql 没有配置文件也能启动?配置文件在哪里?[
- 帮忙看下sql语句,执行了15秒多
- 如何用MySql的存储过程写sql语句?请高手指点
- mysql创建表时,出错
- 用C#对mysql 数据库的更新操作问题,恳请各位高手帮助
- 如何查询所有记录是否满足条件?
- mysql安装需要提供oracle凭证
- 做一个卖手机号网站,需要在数据库根据规律筛选一些数据出来
- 请问这段错误提示是什么意思
- 生成编号的函数返回了重复的值(手动commit验证时,发MySQL表中出现了两条编号数据。commit后又消失了)
- 如何查看mysql自定义函数的源代码
- 今天备份数据总是提示 mysqldump: Error 1317:
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";