MariaDB SCHEMA() 函数的基础用法与实例

MariaDB SCHEMA() 函数用于返回当前数据库的默认数据库名或特定表所属的数据库名。

发布于

MariaDB SCHEMA() 函数用于返回当前数据库的默认数据库名或特定表所属的数据库名。它提供了一种在存储过程、函数或触发器中获取数据库名的简单方法。

语法

MariaDB SCHEMA() 函数的语法如下:

SCHEMA()

该函数不需要任何参数。如果用于表的上下文中,则返回该表所属的数据库名;否则返回会话中默认的数据库名。

实例

基本用法

此示例展示了使用 SCHEMA() 函数获取当前会话默认数据库名的方法。

SELECT SCHEMA();

以下是该语句的输出:

+----------+
| SCHEMA() |
+----------+
| test2    |
+----------+

如果当前会话的默认数据库是 test

获取表所属的数据库名

如果 SCHEMA() 出现在表的上下文中,将返回该表所属的数据库名。

DROP TABLE IF EXISTS mytable;
CREATE TABLE mytable (i INT);
SELECT CONCAT('Table ', TABLE_NAME, ' in ', SCHEMA(), ' database') AS Table_Info
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytable';

以下是该语句的输出:

+---------------------------------+
| Table_Info                      |
+---------------------------------+
| Table mytable in test2 database |
+---------------------------------+

该查询从 INFORMATION_SCHEMA 中获取当前数据库的表信息,并使用 SCHEMA() 打印出数据库名。

检查默认数据库

您可以使用 SCHEMA() 检查当前缺省数据库是否存在。

SELECT IF(SCHEMA() IS NULL, 'No default database', SCHEMA()) AS Default_DB;

以下是该语句的输出:

+------------+
| Default_DB |
+------------+
| test2      |
+------------+

如果当前会话中没有设置默认数据库,则 SCHEMA() 将返回 NULL。

在存储过程中使用

SCHEMA() 常用于存储过程、函数和触发器内部。

DROP PROCEDURE IF EXISTS my_proc;
DELIMITER //
CREATE PROCEDURE my_proc(IN tbl_name VARCHAR(50))
BEGIN
  SET @sql = CONCAT('SELECT count(*) FROM ', SCHEMA(), '.', tbl_name);
  PREPARE stmt FROM @sql;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;
END //
DELIMITER ;

CALL my_proc('mytable');

以下是该语句的输出:

+----------+
| count(*) |
+----------+
|        0 |
+----------+

该存储过程使用 SCHEMA() 来构建针对指定表的 SELECT 查询语句。

从视图中获取数据库名

SCHEMA() 也可用于从视图中获取其基表所属的数据库名。

DROP VIEW IF EXISTS myview;
CREATE VIEW myview AS
  SELECT SCHEMA() AS db, TABLE_NAME
  FROM INFORMATION_SCHEMA.TABLES
  WHERE TABLE_TYPE = 'BASE TABLE';

SELECT * FROM myview LIMIT 2;

以下是该语句的输出:

+-------+------------+
| db    | TABLE_NAME |
+-------+------------+
| test2 | sales_data |
| test2 | user_logs  |
+-------+------------+

该视图从 INFORMATION_SCHEMA 获取所有基表信息,并使用 SCHEMA() 获取其所属数据库名。

相关函数

以下是几个与 MariaDB SCHEMA() 相关的函数:

  • MariaDB DATABASE() 函数返回当前数据库名,其行为与 SCHEMA() 相同
  • MariaDB FOUND_ROWS() 函数返回最后一个 SELECT 查询返回的所有行数
  • MariaDB LAST_INSERT_ID() 函数返回最后一次自增长 ID

结论

MariaDB SCHEMA() 函数提供了一种在代码中动态获取当前数据库名的便捷方法。它可以用于存储过程、函数、触发器以及普通查询中。通过检查数据库名,可以编写更加通用、可移植的代码。该函数的语法很简单,使用也非常直观。除非您事先完全知道当前数据库名,否则在编写依赖于数据库名的代码时,使用 SCHEMA() 会更加安全可靠。总的来说,这是一个非常实用且强大的元数据函数。