关于DELIMITER
在MySQL
中默认的结束符DELIMITER
是;
,它用于标识一段命令是否结束。在默认情况下,在命令行客户端中,如果有一行命令以;
结束,那么回车后,MySQL
将会执行该命令。
修改DELIMITER
如何修改
在使用习惯中,我们经常将结束符更改为 ;;
、//
、 $$
等。
DELIMITER 新的换行符
示例:
mysql> SELECT NOW(); # 默认情况下结束符为 ;
+---------------------+
| NOW() |
+---------------------+
| 2017-10-30 21:05:34 |
+---------------------+
1 row in set (0.00 sec)
mysql> DELIMITER // # 更改结束符为 //
mysql> SELECT NOW()// # 此时结束符已经为 //
+---------------------+
| NOW() |
+---------------------+
| 2017-10-30 21:05:55 |
+---------------------+
1 row in set (0.00 sec)
mysql>
为什么要修改
有时候我们输入的语句不希望立即执行,但是语句中包含有分号;
需要输入时,比如说我们在创建函数或者创建存储过程的时候,我们需要在函数中创建多条语句,此时如果用;
分隔不同语句时就会导致直接执行目前所键入的命令,而创建函数或构建方法失败。
案例演示
现在以一个案例来展现,创建一个函数,该函数的作用是根据id
删除对应的用户,并返回操作时间。
mysql> SELECT * FROM user_info;
+----+----------+----------------------------------+------+-----+
| id | username | password | age | sex |
+----+----------+----------------------------------+------+-----+
| 1 | AAA | 7fc56270e7a70fa81a5935b72eacbe29 | 20 | 1 |
| 2 | BBB | 9d5ed678fe57bcca610140957afab571 | 25 | 0 |
| 3 | CCC | 0d61f8370cad1d412f80b84d143e1257 | 22 | 0 |
| 4 | DDD | f623e75af30e62bbd73d6df5b50bb7b5 | 24 | 1 |
+----+----------+----------------------------------+------+-----+
4 rows in set (0.00 sec)
mysql> DELIMITER // # 更改结束符为 //
mysql> CREATE FUNCTION delUser(userid INT UNSIGNED)
-> RETURNS VARCHAR(30) # 设定返回类型
-> BEGIN
-> DELETE FROM user_info WHERE id = userid; # 删除指定id用户
-> RETURN NOW(); # 返回操作时间
-> END
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ; # 改回默认结束符;
mysql> SELECT delUser(3);
+---------------------+
| delUser(3) |
+---------------------+
| 2017-10-30 22:10:25 |
+---------------------+
1 row in set (0.01 sec)
mysql> SELECT * FROM user_info;
+----+----------+----------------------------------+------+-----+
| id | username | password | age | sex |
+----+----------+----------------------------------+------+-----+
| 1 | AAA | 7fc56270e7a70fa81a5935b72eacbe29 | 20 | 1 |
| 2 | BBB | 9d5ed678fe57bcca610140957afab571 | 25 | 0 |
| 4 | DDD | f623e75af30e62bbd73d6df5b50bb7b5 | 24 | 1 |
+----+----------+----------------------------------+------+-----+
3 rows in set (0.00 sec)