MySQL: Проверьте, существует ли пользователь, и отбросьте его

Нет, вам не нужно закрывать что-либо, НО соединение. В спецификациях JDBC, закрывающих любой более высокий объект, автоматически закрываются нижние объекты. Закрытие Connection закроет любое Statement s, созданное соединением. Закрытие любого Statement закроет все ResultSet s, созданные этим Statement. Не имеет значения, является ли Connection объединенным или нет. Даже общее соединение должно очищаться, прежде чем возвращаться в бассейн.

Конечно, у вас могут быть длинные вложенные циклы на Connection, создающие множество утверждений, а затем их закрыть. Я почти никогда не закрываю ResultSet, хотя, кажется чрезмерным при закрытии Statement или Connection ЗАКРЫВАЕТ их.

79
задан Cherian 28 February 2009 в 16:05
поделиться

4 ответа

У меня это сработало:

GRANT USAGE ON *.* TO 'username'@'localhost';
DROP USER 'username'@'localhost';

Это создает пользователя, если он еще не существует (и предоставляет ему безобидную привилегию), а затем удаляет его в любом случае. Решение найдено здесь: http://bugs.mysql.com/bug.php?id=19166

Обновления: @Hao рекомендует добавить ИДЕНТИФИЦИРОВАНО ; @andreb (в комментариях) предлагает отключить NO_AUTO_CREATE_USER .

88
ответ дан 7 October 2019 в 20:59
поделиться

Найденный ответом на это от одного из форумов MySQL. We’ll должен использовать процедуру для удаления пользователя.

Пользователь здесь является “test” и “databaseName” имя базы данных.


SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ANSI';
USE databaseName ;
DROP PROCEDURE IF EXISTS databaseName.drop_user_if_exists ;
DELIMITER $
CREATE PROCEDURE databaseName.drop_user_if_exists()
BEGIN
  DECLARE foo BIGINT DEFAULT 0 ;
  SELECT COUNT(*)
  INTO foo
    FROM mysql.user
      WHERE User = 'test' and  Host = 'localhost';
   IF foo > 0 THEN
         DROP USER 'test'@'localhost' ;
  END IF;
END ;$
DELIMITER ;
CALL databaseName.drop_user_if_exists() ;
DROP PROCEDURE IF EXISTS databaseName.drop_users_if_exists ;
SET SQL_MODE=@OLD_SQL_MODE ;

CREATE USER 'test'@'localhost' IDENTIFIED BY 'a'; GRANT ALL PRIVILEGES ON databaseName.* TO 'test'@'localhost' WITH GRANT OPTION

13
ответ дан Cherian 6 November 2019 в 02:57
поделиться

Если Вы подразумеваете, что хотите удалить отбрасывание из таблицы, если это существует, можно использовать эти DELETE команда, например:

 DELETE FROM users WHERE user_login = 'foobar'

, Если никакие строки не соответствуют, это не ошибка.

-5
ответ дан Jason Cohen 6 November 2019 в 02:57
поделиться

в терминале сделайте:

sudo mysql -u root -p

вводят пароль.

select user from mysql.user;

теперь удаляют пользовательскую 'the_username'

DROP USER the_unername;

замену 'the_username' с пользователем, которого Вы хотите удалить.

0
ответ дан 24 November 2019 в 10:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: