11.1问题描述
这是来自老师sql server的代码(关于图书馆的),(最开始是没有分号的,添加后不会报错了)但是我选中运行是不能一次性全部插入的,运行单条语句没问题,选择多条insert语句运行,要么报错不能插入,要么随机插入一条。
insert Book values('B201503001','C003','数据库系统原理','万慧红','P002',22.20,'20140101','20150111',8);
insert Book values('B201601001','C003','操作系统原理','左万力','P003',31.50,'20140102','20150112',10);
insert Book values('B201605002','C003','现代操作系统','陈向群','P002',41.00,'20150202','20150812',10);
insert Book values('B201601003','C003','数据结构','章新雨','P002',18.80,'20150302','20151212',5);
insert Book values('B201503002','C003','数据库系统概念','王珊','P005',28.20,'20140501','20150111',5);
区别:
分号是分隔每条 SQL 语句的标准方法,但在MS Access 和 SQL Server要求不严格,则不必在每条 SQL 语句之后使用分号;
而MySQL对分号的使用有严格的规范,正如上面如果多条insert 语句不添加分号;是会出现小红线 报错的。
因此也可以理解为什么 出现——运行单条语句没问题,选择多条,要么报错不能插入,要么随机插入一条——这个现象了。因为他在识别语句 结束 时,可能发生识别错误。如下给了我报错及解决的情况截图:
11.2 解决办法
(1)插入多条语句的语法特别之处
-
一条insert语句只能插入一条记录:常见的insert语句,向数据库中,一条语句只能插入一条数据
-
批量插入数据了, 遵循如下这样的语法:
逗号隔开每条数据,且保证一个insert 关键字,values可多个值
insert Book values('B201503001','C003','数据库系统原理','万慧红','P002',22.20,'20140101','20150111',8), ('B201601001','C003','操作系统原理','左万力','P003',31.50,'20140102','20150112',10), ('B201605002','C003','现代操作系统','陈向群','P002',41.00,'20150202','20150812',10), ('B201601003','C003','数据结构','章新雨','P002',18.80,'20150302','20151212',5);
注:sql server与MySQL存在使用及语法的差别,累计,别灰心。
(2)修正过程
-
最开始,无论插入一条还是多条语句insert,报错显示Check constraint "book_chk_1" is violated;
-
然后报错说约束问题 于是删掉了约束 并改了regexp 和后面的正则表达式(之前的经验);
-
进行了insert多条语句的语法修改,可成功插入多条了
最后便可以解决问题啦~(如有表述不对,敬请指教)