数据库
📄字数 3.2K
👁️阅读量 加载中...
首次启动虚谷数据库服务程序时,系统默认创建系统库 (SYSTEM),它除了用户库应有的功能外,还存储所有非系统库的控制信息以及整个系统的控制与描述信息,所有用户库的创建、修改与删除必须在系统库中进行。
注意
- 数据库的创建、修改与删除必须在系统库中进行,使用SYSDBA用户或其他已被授予数据库管理员权限(SYSDBA权限)的用户进行操作,权限相关内容参见 权限管理。
- 系统库管理员权限的用户,可以通过 SYS_DATABASES 表查看当前数据库实例里所有库的信息。
一、创建数据库
1.1 语法格式
1.2 参数说明
IF NOT EXISTS
:创建数据库时若同名数据库存在则忽略错误,该关键字无法验证已有同名数据库与当前创建库结构是否一致;database_name
:数据库名;(IDENT|SCONST)
:字符集名称,可以在数据库中执行SELECT * FROM sys_charsets
查看系统支持的字符集,系统库固定为UTF8,用户库缺省值为GBK(可在系统参数 def_charset 修改此缺省值);IDENT
:预定义的字符集标识符(如UTF8
),无需引号;SCONST
:字符串常量(如'UTF8'
),需单引号包裹;
TIME ZONE
:时区,其SCONST形式为'GMT+HH:MM'
或'GMT-HH:MM'
,表示当前时区与格林威治时间的时差,默认为GMT+08:00(可在系统参数 def_timezone 修改此缺省值),时差取值范围[-12:59,+14:59];
ENCRYPT BY SCONST
:使用加密机加密并指定加密机名SCONST
,需先成功创建加密机,加密机相关内容请参见 加密机。
1.3 示例
示例1
创建一个名为db_test的数据库,其字符集是GBK,时区是东8区,并使用名为ENC_TEST的加密机进行加密。
sqlSQL> CREATE ENCRYPTOR 'ENC_TEST' BY 'ENC_TEST'; --需使用SYSSSO用户创建 SQL> CREATE DATABASE db_test CHARACTER SET 'GBK' TIME ZONE 'GMT+08:00' ENCRYPT BY 'ENC_TEST'; --系统库SYSDBA执行
示例2
创建数据库时存在同名数据库,但原数据库和创建库字符集类型不同,数据库相关信息可通过系统视图dba_databases查询。
sqlSQL> CREATE DATABASE db_fea CHAR SET 'GB18030'; SQL> SELECT db_name,char_set FROM dba_databases WHERE db_name='DB_FEA'; +---------+----------+ | DB_NAME | CHAR_SET | +---------+----------+ | DB_FEA | GB18030 | +---------+----------+ -- 创建一个与原数据库字符集类型不同的数据库,此处会返回警告 SQL> CREATE DATABASE IF NOT EXISTS db_fea CHAR SET 'gbk_chinese_ci'; Warnning: [E2007] 数据库已存在 -- 不会对原数据库产生影响 SQL> SELECT db_name,char_set FROM dba_databases WHERE db_name='DB_FEA'; +---------+----------+ | DB_NAME | CHAR_SET | +---------+----------+ | DB_FEA | GB18030 | +---------+----------+
二、切换数据库
切换数据库,是指客户端或数据库中间件,与服务端建立连接之后,可以通过以下命令,将当前连接的库信息,修改成新登录的数据库。除必选的数据库名之外,还可指定使用的用户名以及用户密码,具体区别见下方参数说明。
2.1 语法格式
2.2 参数说明
database_name
:要切换的数据库名,若不指定用户名或密码,则默认使用当前用户及其密码登录到新数据库;PASSWORD = SCONST
:指定使用密码 SCONST 登录到新数据库,此时默认切换后使用的用户为当前同名用户;USER = user_name PASSWORD = SCONST
:指定使用用户 user_name 和密码 SCONST 登录到新数据库。
2.3 示例
示例1
切换数据库,不指定用户名或密码。
sqlSQL> USE db_test; SQL> SELECT current_db() AS current_db; +------------+ | CURRENT_DB | +------------+ | DB_TEST | +------------+
示例2
切换数据库,指定密码。
sqlSQL> USE db_test PASSWORD = 'SYSDBA'; SQL> SELECT current_db() AS current_db; +------------+ | CURRENT_DB | +------------+ | DB_TEST | +------------+
示例3
切换数据库,指定用户名和密码。
sqlSQL> USE db_test USER = SYSDBA PASSWORD = 'SYSDBA'; SQL> SELECT current_db() AS current_db; +------------+ | CURRENT_DB | +------------+ | DB_TEST | +------------+
三、修改数据库
支持修改三个属性:数据库名称、时区、备注。
3.1 语法格式
3.2 参数说明
database_name
:要修改的数据库名;database_new_name
:重命名后的数据库名;TIME ZONE SCONST
:修改时区,SCONST形式为'GMT+HH:MM'
或'GMT-HH:MM'
,表示当前时区与格林威治时间的时差,取值范围[-12:59,+14:59];COMMENT SCONST
:修改数据库注释信息,SCONST为注释信息字符串,需使用单引号包裹。
3.3 示例
示例1
将数据库
db_test
重命名为db_rename
,该操作需要数据库管理员在系统库执行,且要求无同名数据库。sqlSQL> ALTER DATABASE db_test RENAME TO db_rename; SQL> SELECT db_name,time_zone from dba_databases WHERE db_name='DB_RENAME'; +-----------+-----------+ | DB_NAME | TIME_ZONE | +-----------+-----------+ | DB_RENAME | GMT+08:00 | +-----------+-----------+
示例2
修改数据库
db_rename
的时区和注释信息。sqlSQL> ALTER DATABASE db_rename TIME ZONE 'GMT-08:00'; SQL> ALTER DATABASE db_rename COMMENT 'comment_db'; SQL> SELECT db_name,time_zone,comments from dba_databases WHERE db_name='DB_RENAME'; +-----------+-----------+------------+ | DB_NAME | TIME_ZONE | COMMENTS | +-----------+-----------+------------+ | DB_RENAME | GMT-08:00 | comment_db | +-----------+-----------+------------+
四、删除数据库
删除数据库是高风险操作,此操作将删除该库下所有对象数据,建议在执行前确认数据库名称,避免误删导致数据丢失。
4.1 语法格式
4.2 参数说明
IF EXISTS
:删除数据库时若不存在则忽略此错误;database_name
:数据库名。
4.3 示例
示例1
将删除用户库db_rename,同时该库下所有对象与数据都将被清除。该操作为不可逆操作,需数据库管理员在系统库执行。
sqlSQL> DROP DATABASE db_rename;
示例2
删除时数据库不存在且支持了
IF EXISTS
关键字。sqlSQL> DROP DATABASE IF EXISTS db_test; Warnning: [E2006] 数据库DB_TEST不存在