MySQL 触发器中的 DELIMITER // 是什么作用?

MySQL 触发器中的 DELIMITER // 是什么作用?

MySQL 中,可以使用触发器实现对数据表的自动化操作。在创建 MySQL 触发器时,需要使用 DELIMITER // 来指定语句结束符,那么这个 DELIMITER // 到底是起什么作用呢?

阅读更多:MySQL 教程

DELIMITER 的作用

在 MySQL 中,默认的语句结束符是分号(;),而触发器又是由多条 SQL 语句组成的,如果不改变默认的语句结束符,就会造成错误。因此,需要使用 DELIMITER // 告诉 MySQL,对于这个触发器,语句结束符从分号(;)变为两个斜杠(//),那么在一个触发器中会看到类似这样的语法:

DELIMITER //
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
    -- 触发器内容
END//
DELIMITER ;
Mysql

在上面的语法中,DELIMITER // 将分号(;)作为普通的字符处理,触发器的定义和实际 SQL 语句都是使用两个斜杠(//)来结束的。

完整示例

实际上,一个不带 DELIMITER // 的 MySQL 触发器会报错,为了避免这种错误,我们可以看一个完整的 MySQL 触发器的示例代码:

-- 使用 DELIMITER // 修改语句结束符
DELIMITER //
CREATE TRIGGER trigger_name
AFTER INSERT
ON table_name FOR EACH ROW
BEGIN
    DECLARE var1 INT;
    SET var1 = NEW.column_name;
    INSERT INTO log_table (column_name) VALUES (var1);
END//
DELIMITER ;

-- 创建一个数据表
CREATE TABLE table_name (
    column_name INT NOT NULL
);

-- 创建一个记录数据变化的表
CREATE TABLE log_table (
    column_name INT NOT NULL,
    change_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 向数据表添加一行数据
INSERT INTO table_name (column_name) VALUES (123);
Mysql

在上面的示例中,我们首先使用 DELIMITER // 修改语句结束符。接着,我们定义一个触发器,在向 table_name 表中插入一行数据时,触发器会将新插入的数据的 column_name 值插入到 log_table 表中作为一次变化的记录。

最后,我们使用普通的 SQL 语句向 table_name 表中插入一行数据。执行成功后,我们可以查询 log_table 表,确认触发器是否正常运行。

总结

在 MySQL 触发器中,使用 DELIMITER // 可以改变 SQL 语句的默认结束符,使得多行 SQL 语句可以作为整体在一个触发器中进行处理。在编写 SQL 语句时,需要在语句结束时使用 // 作为结束符,而非分号。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册