CREATE PROCEDURE HelloWorld()
BEGIN
SELECT 'Hello World'
END//
DELIMITER
call HelloWorld()
+-------------+
| Hello World |
+-------------+
| Hello World |
+-------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
通过上面这个例子, 你能明白 DELIMITER 如何使用了么?
DELIMITER就是 告诉 mysql , 把什么字符, 作为 语句结束的字符。
默认情况下, 是 分号
但是存储过程里面, 有分号的。
如果不定义
DELIMITER //
那么 mysql 遇到第一个就认为语句结束了。
用上面的例子来说, 就是
CREATE PROCEDURE HelloWorld()
BEGIN
SELECT 'Hello World'
就结束了, 但是这样一来, 明显是语法错误的。
因此要使用
DELIMITER //
来, 告诉 MySql , 遇到 // 符号了, 才认为整个语句结束了
这样一来
CREATE PROCEDURE HelloWorld()
BEGIN
SELECT 'Hello World'
END//
才认为语句结束, 然后 mysql 尝试去 编译这个存储过程。 检查语法有效性等处理。
由于前面 存储过程创建好了。
我不希望后面的语句, 还是继续用 // 结束
否则每次
select * from ... where .. //
也是很麻烦的
这种情况下, 我创建完存储过程以后, 使用
DELIMITER
恢复默认值, 也就是继续把 分号, 作为 语句的结束。
一、问题原因mysql数据库的存储过程创建语句之中需要使用begin表示存储过程要执行的语句从这里开始,在结尾使用end表示存储过程的语句要结束了。而在mysql数据库之中无论是查询还是添加语句都要使用分号去分隔,但是在存储过程之中创建sql语句的时候却被mysql数据库的编译器把分号当做了结束语句,没有end就被检测成语法错误了。
二、解决方法
一般来说上面这个问题都是因为mysql数据库版本所导致的,如果确定语句没有错误的话就要更新版本或者将语句的结束符改成别的符号,只要能够让mysql数据库编译器解析到end就可以了。使用delimiter即可更改sql语句结束符,示例如下:
delimiter // --更改结束符create procedure course_id_name(in cid varchar(20))beginselect namefrom coursewhere id = cidend//delimiter --将结束符换回分号
以上就是关于“mysql数据库存储过程语法报错为什么?原因和解决方法看这里”的全部内容了,想要了解更多python的实用知识和代码示例可以持续关注这个频道,每次更新都会有很多新的知识技术分享给大家。
-- 请叫我红领巾,拿走 不谢!DELIMITER |
CREATE TRIGGER setFirstId
BEFORE INSERT ON newmodel
FOR EACH ROW
BEGIN
DECLARE c INT
IF new.firstId IS NULL
THEN
SET c = (SELECT id FROM newmodel WHERE id=new.id LIMIT 1,1)
-- 此处update会报错,改为:SET new.firstId = c
SET new.firstId = c
END IF
END|
DELIMITER
COMMIT-- 提交 *** 作
-- 插入数据
INSERT INTO newmodel(id) VALUES(1)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)