在shell命令行中创建mysql触发器

MTK

我需要在命令行中创建一个 mysql 触发器

这个 sql 在 mysql 控制台中运行良好:

$sql = "
    USE DB1;
    DROP TRIGGER IF EXISTS my_trigger;
    DELIMITER $$
    CREATE TRIGGER my_trigger AFTER UPDATE ON tbl1
     FOR EACH ROW BEGIN 
        INSERT INTO DB2.tbl2 (column1)
        VALUES (1234);
    END$$
    DELIMITER ;
";

$cmd = 'mysql -sse "'.$sql.'";';

//put all in one line to avoid shell errors
$cmd = preg_replace('/\r\n|\r|\n|\t|\s+/m', " ", $cmd);

exec("($cmd) 2>&1", $output, $result);

这引发了一个mysql错误

第 1 行的 ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在第 1 行 \'END\' 附近使用的正确语法

我也试过DELIMITER //......同样的错误

MTK

解决办法:改变DELIMITER $$\d $$(花两天这个:(后)

在php中必须使用 \\d $$

$sql = "
    USE DB1;
    DROP TRIGGER IF EXISTS my_trigger;
    \\d $$
    CREATE TRIGGER my_trigger AFTER UPDATE ON tbl1
     FOR EACH ROW BEGIN 
        INSERT INTO DB2.tbl2 (column1)
        VALUES (1234);
    END$$
    \\d ;
";

$cmd = 'mysql -sse "'.$sql.'";';

//put all in one line to avoid shell errors
$cmd = preg_replace('/\r\n|\r|\n|\t|\s+/m', " ", $cmd);

exec("($cmd) 2>&1", $output, $result);

似乎当我们将所有内容放在一行中时,只能使用分隔符的简写 \d

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

查询以在mysql中创建触发器

来自分类Dev

在MySQL中创建触发器并更新

来自分类Dev

在 MySQL 中创建通用触发器

来自分类Dev

从MySQL触发器/存储过程执行Shell脚本/命令

来自分类Dev

如何从命令行跳过流浪者触发器

来自分类Dev

创建命令行工具的Shell扩展

来自分类Dev

在MySql中创建触发器时声明变量

来自分类Dev

在MySQL中创建触发器以跳过插入时出错

来自分类Dev

我想在MySQL中创建触发器

来自分类Dev

在MySql中创建触发器时出错

来自分类Dev

声明变量以在MySql错误中创建触发器

来自分类Dev

在 C 中模拟 shell 命令行

来自分类Dev

MySQL创建触发器语法

来自分类Dev

在插入时创建MySQL触发器

来自分类Dev

MySQL触发器创建失败

来自分类Dev

Laravel,从迁移创建MySQL触发器

来自分类Dev

插入前创建Mysql触发器

来自分类Dev

MYSQL触发器创建ID

来自分类Dev

创建触发器mysql错误

来自分类Dev

插入前创建Mysql触发器

来自分类Dev

错误MySQL创建触发器

来自分类Dev

无法在MySQL上创建触发器

来自分类Dev

未创建 MYSQL 触发器

来自分类Dev

创建命令以从命令行加载Shell脚本

来自分类Dev

在Oracle中创建触发器

来自分类Dev

在PosgreSQL中创建触发器

来自分类Dev

在postgres中创建触发器

来自分类Dev

如何通过命令行在 Chromium 浏览器中安装 GNOME Shell 集成扩展?

来自分类Dev

mysql中的“代替”触发器