环境:
window10sqlserver2008mysql5.7说明:
在编写后端应用程序时,为了提高响应性能,我们会将多条sql语句放在一起执行,如下:
insert into t_user(id,name) values(1,'小明');
insert into t_book(id,name) values(1,'语文');
insert into t_user_book(id,userid,bookid) values(1,1,1);
但是,我们考虑下,如果上面的sql语句出现错误了怎么办,其他的sql语句会受到怎样的影响(非事务内)?
主要考虑以下两个错误:
先准备表:
create table test(id int primary key, name varchar(50))
1. 语法错误
示例sql:
insert into test(id,name) values(1,'小孙');
insert into test(id,name) values(2,'小周);
上面语句明显第二行出现了错误,那么第一行能不能成功插入数据呢?
mysql: 不影响第一行,到第二行后报个错,然后终止执行。
sqlserver:默认两行都不会被执行。
看下面效果:
那么有没有办法让sqlserver和mysql表现一致呢,即:第二行语法报错不能影响到前面的语句执行?
答:使用go
关键字,如下:
但,其实吧,如果我们拼写的sql语句都有语法错误的话,再执行本身意义不大,当然除非有特殊的场景。
2. sql执行报错
示例sql:
insert into test(id,name) values(3,'小孙');
insert into test(id,name) values(3,'小周');
上面的语句明显第二行住建冲突,那么mysql和sqlserver是怎么处理的呢?
可以看到,在这点上mysql和sqlserver是行为一致的,其实想来也应该如此。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)