创建和更改数据库
在 SQL 中,CREATE DATABASE 语句用于创建数据库,尽管 ANSI 标准不包含 CREATE DATABASE 语句。数据库名称在 Unix 中区分大小写,但此限制在 Windows 中不适用。表名也是如此。最佳做法是在创建数据库和表时使用相同的字母大小写。
所有大多数数据库平台都支持带有变体的 CREATE DATABASE 语句。
语法:
CREATE DATABASE [database_name];
参数:
名字 | 描述 |
---|---|
database_name | 数据库的名称。数据库名称的最大长度取决于数据库的供应商。 |
例:
CREATE DATABASE test;
注意 : 刚刚创建的数据库不是当前数据库。用户必须指示使其成为当前数据库。数据库只需创建一次,但用户必须每次选择该数据库才能使用该数据库。
在 MySQL 中创建数据库 [5.6]
CREATE DATABASE 将创建具有给定名称的数据库。要使用此语句,您需要数据库的 CREATE 权限。
语法:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
解释:
在 MySQL 中,CREATE DATABASE 或 CREATE SCHEMA 语句分别用于创建新的数据库或 schema。
- CREATE DATABASE 还是 CREATE SCHEMA:语法的这一部分指定是要创建数据库还是架构。在 MySQL 中,数据库和架构通常可以互换使用。
- [IF NOT EXISTS]:此子句为可选子句。如果指定,则可确保在已存在同名的数据库或架构时,该语句不会产生错误。如果数据库或 schema 不存在,则将创建它。如果存在,则不会执行任何作。
- db_name:这是要创建的数据库或架构的名称。它应该是有效的标识符,并且不得包含任何空格或特殊字符。
- [create_specification] ...:此部分是可选的,允许您为正在创建的数据库或架构指定其他规范。规格包括:
- [默认]CHARACTER SET [=] charset_name:此子句指定用于在数据库或架构中存储字符数据的默认字符集。charset_name 参数指定字符集的名称。字符集定义数据库中使用的字符的编码。
- [默认]COLLATE [=] collation_name:此子句指定用于比较和排序数据库或架构中的字符数据的默认排序规则。collation_name 参数指定排序规则的名称。排序规则根据字符的编码和特定于语言的规则定义用于比较和排序字符的规则。
在 PostgreSQL 中创建数据库 [9.2.3]
CREATE DATABASE 创建一个新的 PostgreSQL 数据库。要创建数据库,您必须是超级用户或具有特殊的 CREATEDB 权限。
语法:
CREATE DATABASE name [ [ WITH ] [ OWNER [=] user_name ] [ TEMPLATE [=] template ] [ ENCODING [=] encoding ] [ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ] [ TABLESPACE [=] tablespace_name ] [ CONNECTION LIMIT [=] connlimit ] ]
解释:
- CREATE DATABASE name:用于创建具有指定名称的新数据库的基本命令。
- [ WITH ]:可选子句,指示新数据库的其他选项的开头。
- [ OWNER [=] user_name ]:指定将成为新数据库所有者的用户。如果未指定,则执行命令的用户将成为所有者。
- [ TEMPLATE [=] template ]:指定创建新数据库时要使用的模板数据库。如果未指定,则默认为名为 “template1” 的模板数据库。
- [ ENCODING [=] encoding ]:指定要用于新数据库的字符编码。UTF-8 是一种常见的编码。
- [ LC_COLLATE [=] lc_collate ]:指定新数据库中字符串的排序规则顺序。排序规则定义字符串的排序顺序。
- [ LC_CTYPE [=] lc_ctype ]:指定新数据库的字符分类,定义字符的分类方式(例如,字母、数字等)。
- [ TABLESPACE [=] tablespace_name ]:允许指定存储数据库对象的不同表空间。默认情况下,它使用默认表空间。
- [ CONNECTION LIMIT [=] connlimit ]:设置允许新数据库的最大并发连接数。如果未指定,则没有连接限制。
在 Oracle 11g 中创建数据库
使用 CREATE DATABASE 语句创建数据库,使其可用于一般用途。
语法:
CREATE DATABASE [ database ] { USER SYS IDENTIFIED BY password | USER SYSTEM IDENTIFIED BY password | CONTROLFILE REUSE | MAXDATAFILES integer | MAXINSTANCES integer | CHARACTER SET charset | NATIONAL CHARACTER SET charset | SET DEFAULT { BIGFILE | SMALLFILE } TABLESPACE | database_logging_clauses | tablespace_clauses | set_time_zone_clause }... ;
解释:
- CREATE DATABASE [ database ]:用于创建具有可选名称的新数据库的基本命令。
- { 用户 SYS 由密码标识 |USER SYSTEM IDENTIFIED BY password }:指定使用提供的密码创建 SYS 或 SYSTEM 用户。
- |CONTROLFILE REUSE:指定如果控制文件已存在,则应重复使用该文件。
- |MAXDATAFILES integer:设置数据库中允许的最大数据文件数。
- |MAXINSTANCES 整数:设置数据库允许的最大实例数。
- |CHARACTER SET charset:设置数据库的字符集。
- |NATIONAL CHARACTER SET charset:设置数据库的国家字符集。
- |设置默认值 { BIGFILE |SMALLFILE } TABLESPACE:指定是使用 bigfile 表空间还是 smallfile 表空间作为数据库的默认表空间。
- |database_logging_clauses:与数据库日志记录配置相关的附加子句。
- |tablespace_clauses:与表空间配置相关的附加子句。
- |set_time_zone_clause:允许设置数据库的默认时区。
- ...: 指示可以根据需要包含更多子句。
- ;: 终止 CREATE DATABASE 语句。
例:
以下语句创建一个 database 并完全指定每个参数:
CREATE DATABASE sample
CONTROLFILE REUSE -- Reuse existing control files if they exist
LOGFILE
GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K, -- Define log file group 1 with two members on different disks
GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K -- Define log file group 2 with two members on different disks
MAXLOGFILES 5 -- Set the maximum number of log files allowed for the database
MAXLOGHISTORY 100 -- Set the maximum number of log history entries to retain
MAXDATAFILES 10 -- Set the maximum number of data files allowed for the database
MAXINSTANCES 2 -- Set the maximum number of instances allowed for the database
ARCHIVELOG -- Enable archiving of filled redo log files
CHARACTER SET AL32UTF8 -- Set the character set for the database to AL32UTF8
NATIONAL CHARACTER SET AL16UTF16 -- Set the national character set for the database to AL16UTF16
DATAFILE
'disk1:df1.dbf' AUTOEXTEND ON, -- Create data file df1.dbf on disk1 with autoextend enabled
'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED -- Create data file df2.dbf on disk2 with autoextend enabled, incrementing by 10MB each time, with no maximum size limit
DEFAULT TEMPORARY TABLESPACE temp_ts -- Set the default temporary tablespace to temp_ts
UNDO TABLESPACE undo_ts -- Set the undo tablespace to undo_ts
SET TIME_ZONE = '+02:00'; -- Set the default time zone for the database to GMT+2
解释:
- CONTROLFILE REUSE:此语句表示如果存在现有的控制文件,则应重用它们。
- LOGFILE:此部分定义数据库的重做日志文件。
- GROUP 1, GROUP 2:这几行定义两组重做日志文件,每组都有两个成员位于不同的磁盘上。
- SIZE 50K:将每个重做日志文件成员的大小指定为 50 KB。
- MAXLOGFILES 5:将数据库允许的最大重做日志文件数设置为 5。
- MAXLOGHISTORY 100:将要保留的最大日志历史记录条目数设置为 100。
- MAXDATAFILES 10:将数据库允许的最大数据文件数设置为 10。
- MAXINSTANCES 2:将数据库允许的最大实例数设置为 2。
- ARCHIVELOG:支持存档已填充的重做日志文件,这对于数据库恢复和备份至关重要。
- CHARACTER SET AL32UTF8:将数据库的字符集设置为 AL32UTF8,该字符集支持 Unicode 字符,通常用于国际化。
- NATIONAL CHARACTER SET AL16UTF16:将数据库的国家字符集设置为 AL16UTF16,这是另一个基于 Unicode 的字符集,支持更广泛的字符。
- DATAFILE:此部分定义数据库的数据文件。
- 'disk1:df1.dbf' AUTOEXTEND ON:在启用自动扩展的情况下,在“disk1”上创建名为“df1.dbf”的数据文件。
- 'disk2:df2.dbf' 在接下来的 10M MAXSIZE UNLIMITED 上自动扩展:在启用自动扩展的情况下,在“disk2”上创建名为“df2.dbf”的数据文件,每次递增 10 MB,没有最大大小限制。
- DEFAULT TEMPORARY TABLESPACE temp_ts:将默认临时表空间设置为 “temp_ts”。
- UNDO TABLESPACE undo_ts:将撤消表空间设置为“undo_ts”,用于管理事务的撤消信息。
- SET TIME_ZONE = '+02:00':将数据库的默认时区设置为 GMT+2。
在 SQL Server 2012 中创建数据库
创建新数据库和用于存储数据库、数据库快照的文件,或从先前创建的数据库的分离文件附加数据库。
语法:
以下语句创建一个 database 并完全指定每个参数:
CREATE DATABASE database_name [ CONTAINMENT = { NONE | PARTIAL } ] [ ON [ PRIMARY ] <filespec> [ ,...n ] [ , <filegroup> [ ,...n ] ] [ LOG ON <filespec> [ ,...n ] ] ] [ COLLATE collation_name ] [ WITH <option> [,...n ] ] [;] <option> ::= { FILESTREAM ( <filestream_option> [,...n ] ) | DEFAULT_FULLTEXT_LANGUAGE = { lcid | language_name | language_alias } | DEFAULT_LANGUAGE = { lcid | language_name | language_alias } | NESTED_TRIGGERS = { OFF | ON } | TRANSFORM_NOISE_WORDS = { OFF | ON} | TWO_DIGIT_YEAR_CUTOFF = <two_digit_year_cutoff> | DB_CHAINING { OFF | ON } | TRUSTWORTHY { OFF | ON } } <filestream_option> ::= { NON_TRANSACTED_ACCESS = { OFF | READ_ONLY | FULL } | DIRECTORY_NAME = 'directory_name' } To attach a database CREATE DATABASE database_name ON <filespec> [ ,...n ] FOR { { ATTACH [ WITH <attach_database_option> [ , ...n ] ] } | ATTACH_REBUILD_LOG } [;] <filespec> ::= { ( NAME = logical_file_name , FILENAME = { 'os_file_name' | 'filestream_path' } [ , SIZE = size [ KB | MB | GB | TB ] ] [ , MAXSIZE = { max_size [ KB | MB | GB | TB ] | UNLIMITED } ] [ , FILEGROWTH = growth_increment [ KB | MB | GB | TB | % ] ] ) } <filegroup> ::= { FILEGROUP filegroup_name [ CONTAINS FILESTREAM ] [ DEFAULT ] <filespec> [ ,...n ] } <attach_database_option> ::= { <service_broker_option> | RESTRICTED_USER | FILESTREAM ( DIRECTORY_NAME = { 'directory_name' | NULL } ) } <service_broker_option> ::= { ENABLE_BROKER | NEW_BROKER | ERROR_BROKER_CONVERSATIONS } Create a database snapshot CREATE DATABASE database_snapshot_name ON ( NAME = logical_file_name, FILENAME = 'os_file_name' ) [ ,...n ] AS SNAPSHOT OF source_database_name [;]
解释:
- 创建数据库:
- CREATE DATABASE database_name:这是创建具有指定名称的新数据库的基本命令。
- CONTAINMENT = { NONE |PARTIAL }:指定数据库是包含还是部分包含。包含的数据库包括定义数据库和数据库用户所需的所有数据库设置、元数据和数据。
- ON:指定存储数据库文件的位置。
- <filespec>:定义数据库的文件规范,包括名称、文件名、大小、最大大小和文件增长。
- <filegroup>:在数据库中以逻辑方式将多个数据文件组合在一起。可以为每个文件组指定不同的属性。
- LOG ON <filespec>:指定事务日志文件的文件规范。
- COLLATE collation_name:指定数据库的默认排序规则,用于确定字符串数据的排序方式和比较方式。
- with <option> [,...n ]:指定用于创建数据库的其他选项,例如 FILESTREAM 配置、默认语言、触发器设置、年份截止、数据库链接和可信度。
- 附加数据库:
- ATTACH:指定要将现有数据库附加到服务器。
- ATTACH_REBUILD_LOG:指定应重建附加数据库的事务日志。
- <attach_database_option>:指定用于附加数据库的其他选项,例如 Service Broker 设置、受限用户和 FILESTREAM 配置。
- 创建数据库快照:
- CREATE DATABASE database_snapshot_name:创建具有指定名称的新数据库快照。
- AS SNAPSHOT OF source_database_name:指定将从中创建快照的源数据库。
- ON:指定存储数据库快照文件的位置。
- NAME = logical_file_name:指定数据库快照文件的逻辑名称。
- FILENAME = 'os_file_name':指定数据库快照文件在作系统上的物理路径。
SQL ALTER 数据库
ALTER DATABASE 语句用于修改、维护或恢复现有数据库。
在 Oracle 11g 中更改数据库
在早期版本的 Oracle Database 中,您可以使用 ALTER DATABASE 执行两个转换作:
- RESET COMPATIBILITY 子句允许您在下次实例启动时将数据库重置为早期版本。
- CONVERT 子句允许您将 Oracle7 数据字典升级到 Oracle8i 或 Oracle9i 数据字典。
这些子句不再受支持。
在 SQL Server 2012 中更改数据库
在 SQL 2012 中,alter 命令修改数据库或与数据库关联的文件和文件组。可以在数据库中添加或删除文件,更改数据库或其文件和文件组的属性,更改数据库排序规则,以及设置数据库选项。
语法:
ALTER DATABASE { database_name | CURRENT } { MODIFY NAME = new_database_name | COLLATE collation_name | <file_and_filegroup_options> | <set_database_options> } [;] <file_and_filegroup_options >::= <add_or_modify_files>::= <filespec>::= <add_or_modify_filegroups>::= <filegroup_updatability_option>::= <set_database_options>::= <optionspec>::= <auto_option> ::= <change_tracking_option> ::= <cursor_option> ::= <database_mirroring_option> ::= <date_correlation_optimization_option> ::= <db_encryption_option> ::= <db_state_option> ::= <db_update_option> ::= <db_user_access_option> ::= <external_access_option> ::= <FILESTREAM_options> ::= <HADR_options> ::= <parameterization_option> ::= <recovery_option> ::= <service_broker_option> ::= <snapshot_option> ::= <sql_option> ::= <termination> ::=
解释:
提供的语法适用于 SQL Server 2012 中的 ALTER DATABASE 语句,它允许您修改数据库的各个方面。
- ALTER DATABASE { database_name |CURRENT }:指定要更改的数据库的名称。您可以提供特定数据库的名称,也可以使用关键字 CURRENT 来引用当前数据库上下文。
- { }:指示一组可用于修改数据库的选项。
- MODIFY NAME = new_database_name:将数据库的名称更改为指定的新名称。
- COLLATE collation_name:将数据库的默认排序规则更改为指定的排序规则。
- <file_and_filegroup_options >:指与修改数据库中的文件和文件组相关的一组选项。
- <set_database_options>:指与修改各种数据库设置相关的一组选项。
- <optionspec>、<auto_option>、<change_tracking_option>、<cursor_option>、<database_mirroring_option>、<date_correlation_optimization_option>、<db_encryption_option>、<db_state_option>、<db_update_option>、<db_user_access_option>、<external_access_option>、<FILESTREAM_options>、 <HADR_options>、<parameterization_option>、<recovery_option>、<service_broker_option>、<snapshot_option><sql_option>:这些是可以包含在<set_database_options>中的特定选项,用于更改各种数据库设置,如自动选项、更改跟踪、光标行为、数据库镜像、加密、状态、 更新选项、用户访问、外部访问、FILESTREAM 选项、HADR(高可用性灾难恢复)选项、参数化、恢复、Service Broker 设置、快照隔离和 SQL 设置。
- <termination>:指示 ALTER DATABASE 语句的结尾。
在 PostgreSQL 中更改数据库 [9.2]
在 PostgreSQL ALTER DATABASE 中,更改数据库。
语法:
ALTER DATABASE name [ [ WITH ] option [ ... ] ] where option can be: CONNECTION LIMIT connlimit ALTER DATABASE name RENAME TO new_name ALTER DATABASE name OWNER TO new_owner ALTER DATABASE name SET TABLESPACE new_tablespace ALTER DATABASE name SET configuration_parameter { TO | = } { value | DEFAULT } ALTER DATABASE name SET configuration_parameter FROM CURRENT ALTER DATABASE name RESET configuration_parameter ALTER DATABASE name RESET ALL
解释:
- ALTER DATABASE name [ [ WITH ] option [ ... ] ]:这是更改数据库的基本语法。将 “name” 替换为要修改的数据库的名称。WITH 关键字是可选的,可以后跟一个或多个选项以指定要进行的修改。
- CONNECTION LIMIT connlimit:设置允许数据库的最大并发连接数。
- ALTER DATABASE name RENAME TO new_name:将指定的数据库重命名为新名称 (new_name)。
- ALTER DATABASE name OWNER TO new_owner:将指定数据库的所有者更改为新的所有者 (new_owner)。
- ALTER DATABASE name SET TABLESPACE new_tablespace:将数据库移动到新的表空间 (new_tablespace)。此选项用于将整个数据库重新定位到不同的存储区域。
- ALTER DATABASE name SET configuration_parameter { TO | = } { value |DEFAULT }:将数据库的特定配置参数的值设置为指定的值 (value)。您也可以将其设置为默认值。
- ALTER DATABASE name SET configuration_parameter FROM CURRENT:将数据库的特定配置参数的值设置为与当前会话相同的值。这对于从当前会话继承设置非常有用。
- ALTER DATABASE name RESET configuration_parameter:将数据库的特定配置参数的值重置为其默认值。
- ALTER DATABASE name RESET ALL:将数据库的所有配置参数重置为默认值。
在 MySQL 中更改数据库 [5.6]
在 MySQL 5.6 中,ALTER DATABASE 更改了数据库的整体特征。
语法:
ALTER {DATABASE | SCHEMA} [db_name] alter_specification ... ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME alter_specification: [DEFAULT] CHARACTER SET [=] char set_name | [DEFAULT] COLLATE [=] collation _name
解释:
提供的语法适用于 MySQL 中的 ALTER DATABASE 或 ALTER SCHEMA 语句,用于修改数据库或架构的特征。
- ALTER {DATABASE |SCHEMA} [db_name]:指定要更改数据库或架构。您可以选择提供要更改的数据库或架构的名称。
- alter_specification ...:指定要对数据库或架构进行的更改。
- ALTER {DATABASE |SCHEMA} db_name:指定要更改的数据库或 Schema。当您想要更改整个数据库或架构时,可以使用这种形式的语句。
- UPGRADE DATA DIRECTORY NAME:指定要升级数据库的数据目录名称。此作可用于重命名存储数据库数据文件的目录。这主要与存储引擎更改结合使用,或者在将数据库移动到其他位置时使用。
- [默认]CHARACTER SET [=] char set_name:指定要用于数据库或架构的默认字符集。此选项允许您更改数据库或架构中所有表和列的默认字符集。
- [默认]COLLATE [=] collation_name:指定要用于数据库或架构的默认排序规则。此选项允许您更改数据库或架构中所有表和列的默认排序规则。
参考:Oracle 数据库 SQL 语言参考、MySQL 文档https://dev.mysql.com/doc/refman/8.4/en/create-database.html、PostgreSQL 文档
https://www.postgresql.org/docs/9.2/sql-createdatabase.html、SQL Server 2012
https://learn.microsoft.com/en-us/sql/t-sql/statements/create-database-transact-sql?view=sql-server-ver16&redirectedfrom=MSDN&tabs=sqlpool