当数据库有实时连接时,MySql'CREATE DATABASE IF NOT EXISTS'行为不端

时间:2011-05-29 17:33:21

标签: mysql database locking

我们有一些初始化代码可确保所有需要的资源到位,
即:如果丢失,则创建这些资源(文件,目录,数据库,表等),否则不执行任何操作。

但是,当一个数据库正在使用时(即存在且已经有实时连接),一个新的应用程序 通过初始化代码等待永远。

原因是“创建数据库,如果不存在”有点愚蠢:它试图拥有数据库,即使它存在,也不应该做任何事情。

有没有办法检查数据库是否已经存在,不涉及这样的锁?

3 个答案:

答案 0 :(得分:1)

SELECT EXISTS(
    SELECT 1
    FROM INFORMATION_SCHEMA.SCHEMATA
    WHERE SCHEMA_NAME = 'MyDatabaseName'
) AS e

如果数据库存在,则返回1(并且执行查询的用户具有能够看到它的相应权限,等等等等); 0否则

答案 1 :(得分:0)

假设确实如此。如果没有,你的系统就会被打破。当您尝试执行查询时,它将被SQL错误捕获。

答案 2 :(得分:0)

你确定吗?你有一个可重复的bug测试案例吗?如果是这样,请将其报告为错误。

我当然看不到所描述的这种行为。