mysql delimiter 出错_关于MySql下的 delimiter 的问题

create trigger t_insertregion

before insert on domaindump

for each

row

begin

set new.sourceregion=(select region from ip_data where

new.sourceip>ipstart and new.sourceip

set

new.destinationregion=(select region from ip_data where

new.destinationip>ipstart and new.destinationip

end

我在MySQL 图形客户端下可以顺利运行。但是在 命令客户端(MySQL Command Line Client)下就会出错。最后找到原因是没有设置好

delimiter 的问题。默认情况下,delimiter “;” 用于向 MySQL 提交查询语句。在存储过程或触发器中每个 SQL 语句的结尾都有个

“;”,如果这时候,每逢 “;” 就向 MySQL 提交的话,当然会出问题了。于是更改 MySQL 的 delimiter,上面 MySQL

存储过程就编程这样子了:

delimiter //; -- 改变 MySQL delimiter 为:“//”

drop trigger if exists t_insertregion //

create trigger t_insertregion

before insert on domaindump

for each row

begin

set new.sourceregion=(select region from ip_data where new.sourceip>ipstart and new.sourceip

set new.destinationregion=(select region from ip_data where new.destinationip>ipstart and new.destinationip

end//

delimiter ; // -- 改回默认的 MySQL delimiter:“;”

当然,MySQL delimiter 符号是可以自由设定的,你可以用 “/” 或者“$$” 等。但是 MySQL 存储过程中比较常见的用法是

“//” 和 “$$”。上面的这段在 SQLyog 中的代码搬到 MySQL 命令客户端(MySQL Command Line

Client)却不能执行。

mysql> delimiter //; -- 改变 MySQL delimiter 为:“//”

mysql>

mysql>drop trigger if exists t_insertregion //

->create trigger t_insertregion

->before insert on domaindump

->for each row

->begin

-> set new.sourceregion=(select region from ip_data where new.sourceip>ipstart and new.sourceip

-> set new.destinationregion=(select region from ip_data where new.destinationip>ipstart and new.destinationip

->end//

->

-> delimiter ; // -- 改回默认的 MySQL delimiter:“;”

-> //

-> //

-> //

-> ;

-> ;

->

最后终于发现问题了,在 MySQL 命令行下运行 “delimiter //; ” 则 MySQL 的 delimiter 实际上是 “//;”,而不是我们所预想的 “//”。其实只要运行指令 “delimiter //” 就 OK 了。

mysql> delimiter // -- 末尾不要符号 “;”

mysql>

mysql> drop trigger if exists t_insertregion //

Query OK, 0 rows affected (0.00 sec)

mysql>create trigger t_insertregion

->before insert on domaindump

->for each row

->begin

-> set new.sourceregion=(select region from ip_data where new.sourceip>ipstart and new.sourceip

-> set new.destinationregion=(select region from ip_data where new.destinationip>ipstart and new.destinationip

->end//

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ; -- 改回默认的 MySQL delimiter:“;”

delimiter 命令就是定义分隔符的意思

顺带一提的是,我们可以在 MySQL 数据库中执行在文件中的 SQL 代码。例如,我把上面存储过程的代码放在文件 d:/tr_doamindump.sql 中。可以运行下面的代码建立存储过程。

mysql> source d:/tr_doamindump.sql Query OK, 0 rows affected (0.00 sec)

source 指令的缩写形式是:“/.”

mysql> /. d:/tr_doamindump.sql Query OK, 0 rows affected (0.00 sec)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值