DB2 - 模式
Db2 - 模式
Section titled “Db2 - 模式”本章介绍了模式(schema)的概念,它是Db2数据库中一个基本的组织和安全机制。
模式是数据库对象的命名集合,例如表、视图、触发器和存储过程。它在数据库中充当逻辑分组机制,或者说是一个“命名空间”。模式对于组织数据库和管理权限至关重要。
模式的主要优点之一是,只要它们属于不同的模式,您就可以在单个数据库中拥有多个同名对象。例如,您可以拥有SALES.CUSTOMERS和MARKETING.CUSTOMERS,它们是两个不同的表。
Db2数据库中的每个对象都由其两部分名称唯一标识:schema_name.object_name。如果您在引用对象时未指定模式,Db2将使用CURRENT_SCHEMA特殊寄存器中定义的模式,该模式通常默认为您的用户ID。
常见模式命令
Section titled “常见模式命令”获取当前活动模式
Section titled “获取当前活动模式”要检查您当前的默认模式,请查询CURRENT_SCHEMA特殊寄存器。这是获取此信息的标准SQL方式。
VALUES CURRENT_SCHEMA;输出:
1-----------DB2INST1
1 record(s) selected.设置会话的当前模式
Section titled “设置会话的当前模式”您可以在数据库会话期间更改默认模式。这有助于避免重复键入模式名称。
SET SCHEMA = 'NEWSCHEMA';执行此命令后,任何像CREATE TABLE my_table...这样的SQL语句都将创建NEWSCHEMA.MY_TABLE。
您可以显式地创建一个新模式。或者,您可以将模式的所有权分配给其他用户或角色。
语法:
CREATE SCHEMA <schema_name>AUTHORIZATION <user_or_role_name>;示例:创建一个名为FINANCE的模式,其所有者为用户db2admin。
CREATE SCHEMA FINANCE AUTHORIZATION db2admin;当具有IMPLICIT_SCHEMA权限(默认授予PUBLIC)的用户首次使用新的、有效的模式名称创建对象时,模式也会被隐式创建。
实践练习:使用模式组织数据
Section titled “实践练习:使用模式组织数据”让我们通过一个实际示例,使用模式将员工数据分离为专业和个人类别。
步骤1:创建模式
Section titled “步骤1:创建模式”首先,我们创建两个不同的模式作为表的容器。
-- 为专业员工数据创建模式CREATE SCHEMA PROFESSIONAL;
-- 为个人员工数据创建模式CREATE SCHEMA PERSONAL;步骤2:在每个模式中创建表
Section titled “步骤2:在每个模式中创建表”现在,我们创建两个表,都命名为EMPLOYEES,但分别位于不同的模式中。请注意每个表不同的列定义。
-- 专业信息表CREATE TABLE PROFESSIONAL.EMPLOYEES ( employee_id INT NOT NULL PRIMARY KEY, job_title VARCHAR(50), hire_date DATE, salary DECIMAL(10, 2));
-- 个人信息表CREATE TABLE PERSONAL.EMPLOYEES ( employee_id INT NOT NULL PRIMARY KEY, full_name VARCHAR(100), date_of_birth DATE, home_phone VARCHAR(20), address VARCHAR(200));步骤3:插入和查询数据
Section titled “步骤3:插入和查询数据”插入或查询数据时,我们必须使用完全限定的schema.table名称,以避免歧义。
-- 向专业信息表插入数据INSERT INTO PROFESSIONAL.EMPLOYEES (employee_id, job_title, hire_date, salary)VALUES (101, 'Software Engineer', '2023-08-15', 85000.00);
-- 向个人信息表插入数据INSERT INTO PERSONAL.EMPLOYEES (employee_id, full_name, date_of_birth, address)VALUES (101, 'Jane Doe', '1995-05-20', '123 Main St, Anytown');
-- 从两个表中检索员工 101 的数据SELECT * FROM PROFESSIONAL.EMPLOYEES WHERE employee_id = 101;SELECT * FROM PERSONAL.EMPLOYEES WHERE employee_id = 101;本练习演示了模式如何实现清晰的数据组织并防止命名冲突,这在复杂的数据库环境中至关重要。