修改数据库|模式db_name]alter_option...alter_option:{[默认]字符集[=]charset_name|[默认值]collate [=]collation_name| [default] encryption [=] {' y ' | ' n '} | read only [=] {default | 0 | 1}}
修改数据库
使您能够更改数据库的整体特征。这些特征存储在数据字典中。此语句要求改变
数据库的权限。改变模式
是同义词吗修改数据库
.
如果省略数据库名称,则该语句应用于默认数据库。在这种情况下,如果没有默认数据库,就会发生错误。
对于任何alter_option
从语句中省略,数据库将保留其当前选项值,除非更改字符集可能更改排序规则,反之亦然。
字符集和排序规则选项
的字符集
选项更改默认数据库字符集。的核对
选项更改默认数据库排序规则。有关字符集和排序规则名称的信息,请参见第十章,字符集,排序规则,Unicode.
要查看可用的字符集和排序规则,请使用显示字符集
而且显示排序
分别陈述。看到第13.7.7.3节,“SHOW CHARACTER SET语句”,第13.7.7.4节,“SHOW COLLATION语句”.
在创建例程时使用数据库默认值的存储例程将这些默认值作为其定义的一部分。(在存储例程中,如果没有显式指定字符集或排序规则,具有字符数据类型的变量将使用数据库默认值。看到第13.1.17节,CREATE PROCEDURE和CREATE FUNCTION语句)。如果更改数据库的默认字符集或排序规则,则必须删除并重新创建要使用新默认值的任何存储例程。
加密选项
的加密
选项,在MySQL 8.0.16中引入,定义了默认的数据库加密,它由数据库中创建的表继承。允许的值为“Y”
(已启用加密)和“N”
(加密禁用)。只有新创建的表继承默认的数据库加密。对于与数据库关联的现有表,它们的加密保持不变。如果table_encryption_privilege_check
系统变量启用时,则TABLE_ENCRYPTION_ADMIN
属性的值不同的默认加密设置需要使用特权default_table_encryption
系统变量。有关更多信息,请参见为模式和通用表空间定义加密默认值.
只读选项
的只读
选项,在MySQL 8.0.22引入,控制是否允许修改数据库和其中的对象。允许的值为默认的
或0
(非只读)和1
(只读)。此选项对于数据库迁移非常有用,因为数据库只读
可以迁移到另一个MySQL实例,而不用担心在操作过程中数据库可能会被更改。
使用NDB集群,使数据库只在其中一个上读mysqld服务器同步到其他服务器mysqld同一集群中的服务器,这样数据库在所有服务器上都变成只读mysqld服务器。
的只读
选项,如果启用,将显示INFORMATION_SCHEMA
SCHEMATA_EXTENSIONS
表格看到第26.3.32节,“INFORMATION_SCHEMA SCHEMATA_EXTENSIONS表”.
的只读
选项不能为以下系统模式启用:mysql
,information_schema
,performance_schema
.
在修改数据库
语句,只读
选项与自身的其他实例以及与其他选项的交互方式如下:
的多个实例将发生错误
只读
冲突(例如,只读= 1只读= 0
).一个
修改数据库
只包含(非冲突)的语句只读
Options甚至对于只读数据库也是允许的。(不冲突)的混合
只读
如果在语句之前或之后数据库的只读状态允许修改,则允许使用带有其他选项的Options。如果之前和之后的只读状态都禁止更改,则会发生错误。无论数据库是否为只读,该语句都成功:
ALTER DATABASE mydb READ ONLY = 0 DEFAULT COLLATE utf8mb4_bin;
如果数据库不是只读的,该语句成功;如果数据库已经是只读的,该语句失败:
ALTER DATABASE mydb READ ONLY = 1 DEFAULT COLLATE utf8mb4_bin;
启用只读
影响数据库的所有用户,除了以下不受只读检查的例外:
由服务器执行的语句,作为服务器初始化、重新启动、升级或复制的一部分。
方法在服务器启动时命名的文件中的语句
init_file
系统变量。临时
表;可以创建、修改、删除和写入临时
只读数据库中的表。NDB集群非sql插入和更新。
除了刚才列出的异常操作之外,启用只读
禁止对数据库及其对象(包括它们的定义、数据和元数据)进行写操作。下面的列表细节会影响SQL语句和操作:
数据库本身:
视图:
存储程序:
触发器:
事件:
表:
对于级联外键,其中子表位于只读数据库中,即使子表没有直接受到影响,父表上的更新和删除也会被拒绝。
对于一个
合并
表如创建表s1。t(i int) ENGINE MERGE UNION (s2.)t, s3.t), INSERT_METHOD=…
,则适用以下行为:插入
合并
表(插入到s1.t
)失败,如果至少一个s1
,s2
,s3
无论插入方法如何,都是只读的。即使插入实际上是在可写表中,也会被拒绝。删除
合并
表(删除表s1.t
)只要……就成功s1
不是只读的。它被允许掉一个合并
引用只读数据库的表。
一个修改数据库
语句将阻塞,直到所有已经访问过正在修改的数据库中的对象的并发事务都已提交。相反,访问数据库中对象的写事务在并发中被修改修改数据库
直到修改数据库
已提交。
如果使用Clone插件克隆本地或远程数据目录,克隆中的数据库将保持源数据目录中的只读状态。只读状态不会影响克隆进程本身。如果不希望在克隆中具有相同的数据库只读状态,则必须在克隆过程结束后显式地为克隆更改该选项,使用修改数据库
克隆操作。
当从一个捐赠者克隆到一个接收者时,如果接收者有一个只读的用户数据库,克隆会失败并报错。在使数据库可写后,可以重新尝试克隆。
只读
是允许的修改数据库
,但不是为了创建数据库
.但是,对于只读数据库,生成的语句显示创建数据库
包括只读= 1
在注释中表示其只读状态:
mysql> ALTER DATABASE mydb READ ONLY = 1;mysql >显示创建数据库mydb \ G *************************** 1。行 *************************** 数据库:数据库mydb创建:创建数据库mydb的/ * !默认字符集utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 default encryption =' n ' */ /* read only = 1 */
如果服务器执行创建数据库
语句,则服务器将忽略该注释和只读
选项未被处理。这意味着, mysqldump而且mysqlpump,使用显示创建数据库
生产创建数据库
dump输出中的语句:
假设mydb
为只读,按如下方式转储:
Shell > mysqldump——数据库mydb > mydb.sql
后面的恢复操作必须跟随修改数据库
如果mydb
仍然只能读:
mysql> mysql>mysql> ALTER DATABASE mydb READ ONLY = 1;
MySQL企业备份不受此问题的影响。它像备份其他数据库一样备份和恢复只读数据库,但是启用只读
选项(如果在备份时启用)。
修改数据库
写入二进制日志,那么只读
复制源服务器上的选项也会影响副本。方法的执行之前,必须禁用二进制日志记录修改数据库
声明。例如,为了在不影响副本的情况下迁移数据库,需要执行以下操作:
在单个会话中,禁用二进制日志记录并启用
只读
对于数据库:mysql> SET sql_log_bin = OFF;mysql> ALTER DATABASE mydb READ ONLY = 1;
例如,转储数据库, mysqldump或mysqlpump:
Shell > mysqldump——数据库mydb > mydb.sql
在单个会话中,禁用二进制日志记录并禁用
只读
对于数据库:mysql> SET sql_log_bin = OFF;mysql> ALTER DATABASE mydb READ ONLY = 0;