有这样的一个简单的表(Student)结构:
ID NAME AGE
1 zhangsan 21
2 lisi 22ID是主键,但是不是自动增长列我写了一个存储过程如下:
BEGIN
declare b DECIMAL;
declare a DECIMAL;
set a=(select MAX(id) from student)+1;
insert into student values(a,'zhangsan',22);
END每次执行这样的存储过程,都向student表插入了两条记录,这是为什么?
我在set a=(select MAX(id) from student)+1;添加上select a;
这样就正常了,插入了一条记录
ID NAME AGE
1 zhangsan 21
2 lisi 22ID是主键,但是不是自动增长列我写了一个存储过程如下:
BEGIN
declare b DECIMAL;
declare a DECIMAL;
set a=(select MAX(id) from student)+1;
insert into student values(a,'zhangsan',22);
END每次执行这样的存储过程,都向student表插入了两条记录,这是为什么?
我在set a=(select MAX(id) from student)+1;添加上select a;
这样就正常了,插入了一条记录
解决方案 »
- 求教一种主从数据库不能同步情况的解决办法
- mysq存储过程中SQL问题请教高手!
- 小妹请教前辈们如何查找上周末的记录问题!
- 问个以其菜鸟的问题
- 问一个把旧数据库的数据导入新数据库的问题,急用
- linux下Mysql找不到mysqlclient库!谢谢大家
- 急:为什么创建视图的时候有UNION就提示语句有错误
- 紧急:Unix/Linux平台下PHP+MySQL做后台数据库问题请教!
- 怎么样在一个SQL里边,建立临时表,并将其内容显示出来?
- 请问在mysql作为网络数据库的情况下,如何在sql语句执行之前截获这些sql语句?
- MySQL用户管理方案的问题
- mysql,JDBC的jar包是否有稳定版?
select MAX(id)+1,'zhangsan',22 from student没有触发器吧?
我按照你写的运行了一下
在MySQL中报的错误是:You can't specify target table 'student' for update in FROM clause
?
BEGIN
declare b DECIMAL;
declare a DECIMAL;
set a=(select MAX(id) from student)+1;
insert into student values(a,'zhangsan',22);
END
这已经是他的代码了,表结构就如同上边
You can't specify target table 'student' for update in FROM clause
提示的代码?我测试过,没有问题啊
insert into student values(((select MAX(id) from student)+1),'zhangsan',22);
END
是这个
insert into student
select MAX(id)+1,'zhangsan',22 from student
DELIMITER $$DROP PROCEDURE IF EXISTS `zz`.`try1`$$CREATE DEFINER=`root`@`localhost` PROCEDURE `try1`()
BEGIN
insert into b4 select 'vv',max(je)+100 from b4;
END$$DELIMITER ;call try1
NOT DETERMINISTIC
SQL SECURITY DEFINER
COMMENT ''
BEGIN
insert into student(select MAX(id)+1,'zhangsan',22 from student);
END;这是我的代码,但是没有错误,还是运行插入了两条
你的两条记录ID是否相同?在MYSQL中,还是在语言中运行?
CREATE PROCEDURE `new_test1`()
BEGIN
insert into student(select MAX(id)+1,'zhangsan',22 from student);
END;call new_test1();我又写了一边,还是这样,是不是根Mysql的版本问题,
我的是5.0.27的版本
CREATE PROCEDURE `try1`()
BEGIN
insert into student (select MAX(je)+1,'wangwu',33 from student);
END运行还是插入了2条
呵呵,太郁闷了
跟ID有关系吗?我第一次是这么写的
BEGIN
declare b DECIMAL;
declare a DECIMAL;
set a=(select MAX(id) from student)+1;
select a;//这里加上
insert into student values(a,'zhangsan',22);
END
加个select a;就插入了一行
Mysql有没有打印的函数
可以把变量a打印出来
BEGIN
declare b DECIMAL;
declare a DECIMAL;
select MAX(id) into a from student
set a=a+1;
insert into student values(a,'zhangsan',22);
END
如果还是有问题:1。可能版本有BUG
2。调用的接口程序有问题,