gpt4 book ai didi

mysql - 如何在 MySQL 中可靠地删除和创建数据库和用户

转载 作者:搜寻专家 更新时间:2023-10-30 23:37:40 27 4
gpt4 key购买 nike

我目前正在运行两个脚本。

01_INIT_DATABASE.SQL

CREATE DATABASE foobar;
USE foobar;
CREATE USER 'foo'@'localhost' IDENTIFIED BY 'bar';
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'localhost' WITH GRANT OPTION;
CREATE USER 'foo'@'%' IDENTIFIED BY 'bar';
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'%' WITH GRANT OPTION;

01_DROP_DATABASE.SQL

USE foobar
DROP USER 'foo'@'localhost';
DROP USER 'foo'@'%';
DROP DATABASE IF EXISTS foobar;

如果一个或另一个未正常运行,则它们各自有选择地失败。

我怎样才能让它们可靠地运行(或者优雅地失败,例如,只删除存在的用户)

我正在通过 ant 任务运行它们(如果这会影响事情,但它实际上只是一个 Java Exec),形式为

<exec executable="mysql" input="./src/main/ddl/create/01_init_database.sql">
<arg value="-uroot"/>
<arg value="-ptoor"/>
</exec>

我的MySQL版本是

mysql  Ver 14.14 Distrib 5.5.52, for debian-linux-gnu (x86_64) using readline 6.2

更新IF EXISTS 和 IF NOT EXISTS 对 USER 不起作用。它适用于数据库。

错误 1064 (42000):您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行的“IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar''附近使用的正确语法

错误 1064 (42000):您的 SQL 语法有误;检查与您的 MySQL 服务器版本对应的手册,了解在第 1 行的 'IF EXISTS 'foo'@'%'' 附近使用的正确语法

最佳答案

您可以将 IF NOT EXISTS 添加到您的数据库架构和用户创建中:例如:

CREATE DATABASE IF NOT EXISTS foobar;
CREATE USER IF NOT EXISTS 'foo'@'localhost' IDENTIFIED BY 'bar';
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'localhost' WITH GRANT OPTION;
CREATE USER IF NOT EXISTS 'foo'@'%' IDENTIFIED BY 'bar';
GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'%' WITH GRANT OPTION;

对于掉落:

DROP USER IF EXISTS 'foo'@'localhost';
DROP USER IF EXISTS 'foo'@'%';
DROP DATABASE IF EXISTS foobar;

如下所述:用户(如果不存在)仅适用于 mysql 5.7 及更高版本。不要使用5.7以下的create user语法,而是将grant语句改为:

GRANT ALL PRIVILEGES ON foobar.* TO 'foo'@'localhost' identified by 'password' WITH GRANT OPTION;

关于mysql - 如何在 MySQL 中可靠地删除和创建数据库和用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705547/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com