MySQL:确定选择了哪个数据库?

and*_*ber 211 mysql

在调用mysql_select_db抓取数据库之后,有没有办法稍后输出当前选择的数据库的名称?这似乎非常基本,但我在php.net或stackoverflow上找不到任何东西(所有结果都是"没有选择数据库").

cwa*_*ole 311

只需使用mysql_query(或mysqli_query,甚至更好,或者最好使用PDO):

SELECT DATABASE() FROM DUAL;
Run Code Online (Sandbox Code Playgroud)

附录:

关于是否FROM DUAL应该包括在内是否存在很多讨论.在技​​术层面上,它是Oracle的延续,可以安全地删除.如果您有意愿,可以使用以下代码:

SELECT DATABASE();
Run Code Online (Sandbox Code Playgroud)

也就是说,重要的是要注意,虽然FROM DUAL实际上没有任何事情,但它是有效的MySQL语法.从严格的角度来看,在JavaScript中以条件形式包含大括号也没有做任何事情,但它仍然是一种有效的做法.

  • `select database()`是自己工作的,什么是`FROM DUAL`? (37认同)
  • @DigitalPrecision这是因为我在Oracle上做了很多工作.Oracle不允许您选择,除非它是*from*something,因此有一个名为"DUAL"的特殊表,其中只有一个单元格.你可以省略它. (11认同)
  • DUAL是一个Oracle表,它被接管到MySQL中.它是一个虚拟表,用于不需要实际表的操作.http://en.wikipedia.org/wiki/DUAL_table (8认同)
  • 可能应该编辑此保留现有答案以供后代使用,但添加`SELECT DATABASE();` 作为“实际”答案。 (2认同)

Eli*_*ynn 83

SELECT DATABASE();
Run Code Online (Sandbox Code Playgroud)

ps我不想冒昧地修改@ cwallenpoole的答案,以反映这是一个MySQL问题,而不是Oracle问题而且不需要DUAL.

  • 这又是我......还在想. (7认同)
  • 旧习难改.即使我自2011年以来没有触及过甲骨文,我仍然*有时会想到"来自双重". (4认同)
  • 是的.尽管我从2011年开始没有触及Oracle,但仍在考虑*FROM DUAL*. (4认同)
  • @cwallenpoole现在怎么样? (3认同)
  • @cwallenpoole你还在想吗? (2认同)
  • 如果您喜欢“还在想吗?”的链条,请投票。评论:) 我还在想。我喜欢 mysql 支持这两种方式。 (2认同)
  • @OneCoolBoi 现在少了。我正在 PostgreSQL 中工作,那里不存在 DUAL 伪表。但有时,当我调用一个函数时,我会有一种不舒服的感觉,“该死,我应该从某些东西中选择。” (2认同)

小智 41

您始终可以使用STATUS命令来了解当前数据库和当前用户

在此输入图像描述


Jan*_*omä 9

http://www.php.net/manual/de/function.mysql-db-name.php的评论中,我从ericpp%bigfoot.com找到了这个:

如果您只需要当前的数据库名称,则可以使用MySQL的SELECT DATABASE()命令:

<?php
function mysql_current_db() {
    $r = mysql_query("SELECT DATABASE()") or die(mysql_error());
    return mysql_result($r,0);
}
?>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,是的,我最初要求提供特定于 PHP 的答案,以防万一有“mysql_current_db”之类的方法。有人编辑它以从标题和标签中删除“php” (2认同)

Jef*_*eff 5

稍微偏离主题(使用 CLI 而不是 PHP),但仍然值得了解:您可以使用以下任一方法设置提示以显示默认数据库

mysql --prompt='\d> '
export MYSQL_PS1='\d> '
Run Code Online (Sandbox Code Playgroud)

或一旦进入

prompt \d>\_
\R \d>\_
Run Code Online (Sandbox Code Playgroud)