mysql或mariadb是否可以使用带分隔符的单行语句?

8aqjt8rx  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(307)

由于bash脚本通过变量将mariadb语句作为单行使用,因此在使用分隔符时遇到了问题。有没有办法在单行语句中使用分隔符?

while read -r tmp;
    do
        chomped_line=${tmp}
        myOut+=("$chomped_line")
    done < <(mysql -u myUn -pmyPw -h myHost -D myDb --batch --xml<<<${mySqlVar})

作为多行脚本工作的mariadb

delimiter | 
select @myCount .... from table WHERE (myVal='valA' AND active=1); IF (@myCount > 0) THEN start transaction; .....; commit; END IF|

通过${mysqlvar}传递时不作为单行,在 delimiter | ```
delimiter | select @myCount .... from table WHERE (myVal='valA' AND active=1); IF (@myCount > 0) THEN start transaction; .....; commit; END IF|

hgc7kmma

hgc7kmma1#

这个 DELIMITER 命令后面必须跟一个换行符。不能在随后使用分隔符的同一行上定义分隔符。
你可能想用 mysql --delimiter ... 所以你不必使用 DELIMITER 命令作为输入的一部分。
小贴士:跑步可以学到很多东西 mysql --help 或者阅读它的文档。

pwuypxnk

pwuypxnk2#

在mysql/mariadb中, DELIMITER 仅用于构建存储例程。把它扔了。
命令 mysql 非常乐意接受由 ; .

$ echo "SELECT @x := NOW(); SELECT @x+INTERVAL 23 HOUR;" | mysql -u me
@x := NOW()
2018-12-07 11:28:51
@x+INTERVAL 23 HOUR
2018-12-08 10:28:51

但是,我建议您使用sql创建一个文件并输入它:

$ mysql -u me < script.sql

相关问题