MySQL是以分号(;;
)作为一条sql语句的结束标志,并且支持一次性提交多个sql语句。
这种设计的好处是显而易见的,例如在命令行执行mysql命令操作时,大家无需多次提交sql语句,只需要把多条语句以分号分隔后一次性提交即可。
但这种设计也有其弊端:
在某些情况下,大家的sql语句中包含有诸如函数创建,触发器定义等复杂操作,而这些操作中却也会包含有分号,导致在执行时会出现误认为sql语句已经结束,从而无法完整执行整条sql语句。
解决这个问题的方式是将分号作为sql语句中的分隔符来使用,而把定义分隔符的符号改为其他符号,MySQL中使用DELIMITER定义分隔符,语法如下:
DELIMITER //
上面这段代码,意思就是将当前分隔符设为 //,这样在定义触发器,存储过程等操作时,就可以方便地使用分号了。
代码示例:
DELIMITER // CREATE PROCEDURE test_procedure() BEGIN SELECT 'Hello, world!'; END // DELIMITER ;
以上代码定义了一个名为test_procedure()的存储过程,其中使用了分号,但由于大家将分隔符定义为了//,因此可以顺利地执行整条sql语句。
总结:
在一些场景下,分号有可能会与sql语句中的分号混淆,从而导致整条语句无法完整执行。此时,大家要使用DELIMITER定义分隔符,将分号作为sql语句中的分隔符来使用。