欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

CREATE DATABASE

最编程 2024-08-11 17:43:57
...
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_option] ...

create_option: [DEFAULT] {
    CHARACTER SET [=] charset_name
  | COLLATE [=] collation_name
  | ENCRYPTION [=] {'Y' | 'N'}
}

CREATE DATABASE创建给定名称的数据库。要使用此语句,需要有CREATE DATABASE的权限。

如果该数据库已经存在而没有指定IF NOT EXISTS,则会发生错误。

CREATE DATABASE不允许在已经执行了LOCK TABLES语句的会话中使用。

create database jack;
use jack;
create table kaven (
    id integer auto_increment,
    primary key PRIMARY_KEY(id)
);
lock tables kaven as kv read local;
create database jack2;

在这里插入图片描述

Can’t execute the given command because you have active locked tables or an active transaction

MySQL使客户端会话能够明确获取表锁,以便与其他会话合作访问表,或者在会话需要独占访问表时,防止其他会话修改表。会话只能为自己获取或释放锁。一个会话不能为另一个会话获取锁或释放另一个会话持有的锁。

锁可用于模拟事务或在更新表时获得更高的速度。LOCK TABLES显式获取当前客户端会话的表锁。可以为基表或视图获取表锁。必须拥有该LOCK TABLES权限,以及SELECT每个要锁定的对象的权限。这个以后再详细介绍。

每个create_option指定一个数据库特性。数据库特征存储在数据字典中。

  • CHARACTER SET选项指定默认的数据库字符集。
  • COLLATE选项指定默认的数据库排序规则。
  • ENCRYPTIONMySQL 8.0.16中引入,该选项定义了是否对数据库加密,该加密选项由数据库中创建的表继承。允许的值为'Y'(启用加密)和 'N'(禁用加密)。如果未指定ENCRYPTION选项,则default_table_encryption 系统变量的值默认定义数据库加密。

要查看可用的字符集和排序规则,可以使用SHOW CHARACTER SETSHOW COLLATION语句。

MySQL中的数据库被实现为包含与数据库中的表对应的文件的目录。由于最初创建数据库时没有表,因此该CREATE DATABASE语句仅在MySQL数据目录下创建一个目录。

MySQL 8.0不支持通过在数据目录下手动创建目录(例如,使用mkdir)来创建数据库目录 。

创建数据库时,让服务器管理目录和其中的文件。直接操作数据库目录和文件会导致不一致和意外结果。

MySQL对数据库的数量没有限制。底层文件系统可能对目录数量有限制。

演示

如果已经存在该数据库,则会发生错误。

create database kaven;

在这里插入图片描述
不存在该数据库即可创建成功。

create database test;

在这里插入图片描述
即使该数据库有可能存在,我们可以通过if not exists来判断数据库是否存在,当该数据库不存在时,才创建这个数据库。

create database if not exists test;

在这里插入图片描述
可用字符集,每个字符集有默认的排序规则。

SHOW CHARACTER SET;

在这里插入图片描述
可用排序规则,有很多,博主这个版本的Mysql有272种,每种字符集对应多种排序规则,但每种字符集只有一种排序规则是默认的,如下面框起来的一行数据。

SHOW COLLATION;

在这里插入图片描述
给数据库指定字符集utf8mb4,并且会有默认排序规则utf8mb4_0900_ai_ci

create database if not exists jack character set 'utf8mb4';

在这里插入图片描述
给数据库指定字符集utf8mb4,并且指定排序规则为utf8mb4_bin(随便找的,没有啥依据),之后有机会再详细介绍字符集和排序规则。

create database if not exists jack character set 'utf8mb4' collate 'utf8mb4_bin';

在这里插入图片描述
博主这里的Mysql版本是8.0.25,是已经支持ENCRYPTION 选项了。

select version();

在这里插入图片描述
给数据库指定字符集utf8mb4,并且指定排序规则为utf8mb4_bin,以及ENCRYPTION 选项为'Y',DataGrip显示的SQL语句报红,应该是DataGrip的版本问题,但SQL语句执行是成功了。

create database if not exists jack character set 'utf8mb4' collate 'utf8mb4_bin' encryption 'Y';

在这里插入图片描述