“MySQL 语句:数据定义语句(DDL)”的版本间差异
无编辑摘要 |
无编辑摘要 |
||
第3行: | 第3行: | ||
== ALTER 语句 == | == ALTER 语句 == | ||
=== ALTER DATABASE 语句 === | === ALTER DATABASE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
ALTER {DATABASE | SCHEMA} [db_name] | |||
alter_option ... | |||
ALTER {DATABASE | SCHEMA} db_name | |||
UPGRADE DATA DIRECTORY NAME | |||
alter_option: { | |||
[DEFAULT] CHARACTER SET [=] charset_name | |||
| [DEFAULT] COLLATE [=] collation_name | |||
} | |||
</syntaxhighlight> | |||
“ALTER DATABASE”可以更改数据库的总体 Feature。这些 Feature 存储在数据库目录的“'''db.opt'''”文件中。 | |||
* 该语句要求对数据库具有'''“ALTER”权限'''。 | |||
* “'''ALTER SCHEMA'''”是“ALTER DATABASE”的同义词。 | |||
==== 从 MySQL 5.1 之前的版本升级 ==== | |||
包含“'''UPGRADE DATA DIRECTORY NAME'''”子句的语法更新了与数据库关联的目录的名称,以使用 MySQL 5.1 中实现的编码将数据库名称映射到数据库目录名称。本条款在以下条件下使用: | |||
# 它旨在将 MySQL 从较早版本升级到 5.1 或更高版本。 | |||
# 如果名称中包含需要编码的特殊字符,则打算将数据库目录名称更新为当前的编码格式。 | |||
# 该语句由“mysqlcheck”使用(由“mysql_upgrade”调用)。 | |||
例如,如果 MySQL 5.0 中的数据库名称为“a-b-c”,则该名称包含“-”(破折号)字符的实例。在 MySQL 5.0 中,数据库目录也命名为“a-b-c”,它不一定对所有文件系统都是安全的。在 MySQL 5.1 和更高版本中,相同的数据库名称被编码为“a@002db@002dc”,以产生文件系统无关的目录名称。 | |||
示例:<br/> | |||
当 MySQL 安装从旧版本升级到 MySQL 5.1 或更高版本时,服务器将诸如“a-b-c”(采用旧格式)的名称显示为“#mysql50#a-b-c”,并且您必须使用“#mysql50#”前缀来引用该名称。在这种情况下,请使用“UPGRADE DATA DIRECTORY NAME”明确告诉服务器将数据库目录名称重新编码为当前编码格式: | |||
<syntaxhighlight lang="xml"> | |||
ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME; | |||
</syntaxhighlight> | |||
执行此语句后,您可以将数据库命名为“a-b-c”,而没有特殊的“#mysql50#”前缀。 | |||
* “UPGRADE DATA DIRECTORY NAME”子句'''在 MySQL 5.7 中已弃用,在 MySQL 8.0 中已删除'''。 | |||
*: 如果需要转换 MySQL 5.0 数据库或表名,一种解决方法是在升级到 MySQL 8.0 之前将 MySQL 5.0 安装升级到 MySQL 5.1. | |||
=== ALTER EVENT 语句 === | === ALTER EVENT 语句 === | ||
<syntaxhighlight lang="xml"> | |||
ALTER | |||
[DEFINER = user] | |||
EVENT event_name | |||
[ON SCHEDULE schedule] | |||
[ON COMPLETION [NOT] PRESERVE] | |||
[RENAME TO new_event_name] | |||
[ENABLE | DISABLE | DISABLE ON SLAVE] | |||
[COMMENT 'string'] | |||
[DO event_body] | |||
</syntaxhighlight> | |||
“ALTER EVENT”语句更改了现有事件的一个或多个 Feature,而无需删除并重新创建它。 | |||
* “DEFINER”,“ON SCHEDULE”,“ON COMPLETION”,“COMMENT”,“ENABLE/DISABLE”和“DO”子句的语法与其用于“'''CREATE EVENT'''”的语法完全相同。 | |||
* 任何用户都可以更改在该用户具有'''“EVENT”权限'''的数据库上定义的事件。当用户执行成功的“ALTER EVENT”语句时,该用户将成为受影响事件的定义者。 | |||
示例:<br/> | |||
禁用EVENT“myevent”: | |||
<syntaxhighlight lang="xml"> | |||
ALTER EVENT myevent | |||
DISABLE; | |||
</syntaxhighlight> | |||
* “ON SCHEDULE”子句'''可以使用涉及内置 MySQL 函数和用户变量的表达式来获取其中包含的“timestamp”或“interval”值'''中的任何一个。您'''不能在此类表达式中使用存储的例程或用户定义的函数,也不能使用任何表引用'''。但是,您'''可以使用“SELECT FROM DUAL”'''。 【“ALTER EVENT”和“CREATE EVENT”语句均是如此】 | |||
* 尽管在“DO”子句中包含另一个“ALTER EVENT”语句的“ALTER EVENT”语句似乎成功,但是当服务器尝试执行生成的计划事件时,执行失败并显示错误。【即,不能嵌套】 | |||
* '''没有“RENAME EVENT”语句'''。【而应使用“ALTER EVENT”语句的“'''RENAME TO'''”子句】 | |||
** 还可以使用“ALTER EVENT ... RENAME TO ...”和“db_name.event_name”表示法将事件移动到其他数据库,如下所示: | |||
**: <syntaxhighlight lang="xml"> | |||
ALTER EVENT olddb.myevent | |||
RENAME TO newdb.myevent; | |||
</syntaxhighlight> | |||
* 在复制从属服务器上使用“'''DISABLE ON SLAVE'''”(而不是“ENABLE”或“DISABLE”)来指示那些“在主服务器上创建并复制到从属服务器的”但“未在从属服务器上执行的”EVENT。 | |||
=== ALTER FUNCTION 语句 === | === ALTER FUNCTION 语句 === | ||
<syntaxhighlight lang="xml"> | |||
ALTER FUNCTION func_name [characteristic ...] | |||
characteristic: { | |||
COMMENT 'string' | |||
| LANGUAGE SQL | |||
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | |||
| SQL SECURITY { DEFINER | INVOKER } | |||
} | |||
</syntaxhighlight> | |||
该语句可用于更改存储函数的 Feature。 | |||
* “ALTER FUNCTION”语句中'''可以指定多个更改'''。但是,'''不能使用此语句更改参数或存储函数的主体'''。【类似于“ALTER PROCEDURE”语句】 | |||
*: 要进行此类更改,必须使用“DROP FUNCTION”和“CREATE FUNCTION”删除并重新创建该函数。 | |||
* 必须具有该功能的'''“ALTER ROUTINE”特权'''【???】(该特权会自动授予函数创建者)。 | |||
*: 如果启用了二进制日志记录,则“ALTER FUNCTION”语句可能还需要'''“SUPER”特权'''【???】。 | |||
=== ALTER INSTANCE 语句【???】 === | |||
<syntaxhighlight lang="xml"> | |||
ALTER INSTANCE ROTATE INNODB MASTER KEY | |||
</syntaxhighlight> | |||
“ALTER INSTANCE”语句,【MySQL 5.7.11 中引入】,定义了适用于 MySQL 服务器实例的操作。此操作将'''旋转'''(即“ROTATE”)用于 InnoDB 表空间加密的主加密密钥。 | |||
* 密钥轮换需要'''“SUPER”权限'''。要执行此操作,必须安装并配置密钥环插件。 | |||
* “ALTER INSTANCE ROTATE INNODB MASTER KEY”支持'''并发 DML'''。但是,它不能与“CREATE TABLE ... ENCRYPTION”或“ALTER TABLE ... ENCRYPTION”操作同时运行,并且会采取锁定措施来防止由于同时执行这些语句而引起的冲突。如果其中一个冲突的语句正在运行,则必须先完成该语句,然后才能 continue 执行。 | |||
* “ALTER INSTANCE”操作被写入二进制日志,以便可以在复制的服务器上执行它们。 | |||
=== ALTER LOGFILE GROUP 语句【???和 NDB 群集有关】 === | |||
<syntaxhighlight lang="xml"> | |||
ALTER LOGFILE GROUP logfile_group | |||
ADD UNDOFILE 'file_name' | |||
[INITIAL_SIZE [=] size] | |||
[WAIT] | |||
ENGINE [=] engine_name | |||
</syntaxhighlight> | |||
该语句将名为“file_name ”的 UNDO文件【?】 添加到现有日志文件组“logfile_group”中。 | |||
* “ALTER LOGFILE GROUP”语句只有一个“ADD UNDOFILE”子句。当前不支持“DROP UNDOFILE”子句。 | |||
* “ALTER LOGFILE GROUP”'''仅对 NDB 群集的磁盘数据存储有用'''。 | |||
【。。。略】 | |||
【???和 NDB 群集有关】 | |||
=== ALTER PROCEDURE 语句 === | === ALTER PROCEDURE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
ALTER PROCEDURE proc_name [characteristic ...] | |||
characteristic: { | |||
COMMENT 'string' | |||
| LANGUAGE SQL | |||
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } | |||
| SQL SECURITY { DEFINER | INVOKER } | |||
} | |||
</syntaxhighlight> | |||
该语句可用于更改存储过程的 Feature。 | |||
* “ALTER PROCEDURE”语句中'''可以指定多个更改'''。但是,您'''不能使用此语句更改参数或存储过程的主体'''。【类似于“ALTER FUNCTION”语句】 | |||
*: 要进行此类更改,必须使用“DROP PROCEDURE”和“CREATE PROCEDURE”删除并重新创建该过程。 | |||
* 您必须具有该过程的'''“ALTER ROUTINE”权限'''【???】(默认情况下,该特权自动授予过程创建者)。 | |||
*: 可以通过禁用“'''automatic_sp_privileges'''”系统变量来更改此行为。 | |||
=== ALTER SERVER 语句 === | === ALTER SERVER 语句 === | ||
<syntaxhighlight lang="xml"> | |||
ALTER SERVER server_name | |||
OPTIONS (option [, option] ...) | |||
</syntaxhighlight> | |||
更改 server_name 的服务器信息,并调整“CREATE SERVER”语句中允许的任何选项。【“mysql.servers”表中的相应字段将相应更新】 | |||
* 此语句需要'''“SUPER”权限'''。【???】 | |||
* 不管使用哪种日志记录格式,都不会将“ALTER SERVER”写入二进制日志。 | |||
=== ALTER TABLE 语句 === | === ALTER TABLE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== ALTER TABLESPACE 语句【???和 NDB 群集有关】 === | |||
<syntaxhighlight lang="xml"> | |||
ALTER TABLESPACE tablespace_name | |||
{ADD | DROP} DATAFILE 'file_name' | |||
[INITIAL_SIZE [=] size] | |||
[WAIT] | |||
ENGINE [=] engine_name | |||
</syntaxhighlight> | |||
该语句用于添加新数据文件或从表空间删除数据文件。 | |||
* “ADD DATAFILE”变体使您可以使用“INITIAL_SIZE”子句指定初始大小: | |||
*# 其中 size 以字节为单位;【默认值为 134217728('''128 MB''')】 | |||
*# 可以在 size 之后加上一个字母的缩写表示数量级。【通常使用字母:'''M'''(兆字节)或'''G'''(千兆字节)之一】 | |||
** 【在 32 位系统上,INITIAL_SIZE 的最大支持值为 4294967296('''4 GB''')】 | |||
* 一旦创建了数据文件,就无法更改其大小。但是,您可以使用其他“ALTER TABLESPACE ... ADD DATAFILE”语句将更多数据文件添加到表空间。 | |||
* “ALTER TABLESPACE ... DROP DATAFILE”用于从表空间中删除数据文件,但不能从表空间中删除“正在被任何表使用的”数据文件。【即,数据文件必须为空】 | |||
* “ALTER TABLESPACE ... ADD DATAFILE”和“ALTER TABLESPACE ... DROP DATAFILE”都需要一个“ENGINE”子句,该子句指定表空间使用的存储引擎。 | |||
*: 当前,engine_name 唯一可接受的值为 '''NDB''' 和 '''NDBCLUSTER'''。 | |||
当“ALTER TABLESPACE ... ADD DATAFILE”与“ENGINE = NDB”一起使用时,将在每个 Cluster 数据节点上创建一个数据文件。您可以通过查询“INFORMATION_SCHEMA.FILES”表来验证是否已创建数据文件并获取有关它们的信息。例如,以下查询显示属于 newts 的表空间的所有数据文件: | |||
<syntaxhighlight lang="xml"> | |||
mysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA | |||
-> FROM INFORMATION_SCHEMA.FILES | |||
-> WHERE TABLESPACE_NAME = 'newts' AND FILE_TYPE = 'DATAFILE'; | |||
+--------------------+--------------+----------------+ | |||
| LOGFILE_GROUP_NAME | FILE_NAME | EXTRA | | |||
+--------------------+--------------+----------------+ | |||
| lg_3 | newdata.dat | CLUSTER_NODE=3 | | |||
| lg_3 | newdata.dat | CLUSTER_NODE=4 | | |||
| lg_3 | newdata2.dat | CLUSTER_NODE=3 | | |||
| lg_3 | newdata2.dat | CLUSTER_NODE=4 | | |||
+--------------------+--------------+----------------+ | |||
2 rows in set (0.03 sec) | |||
</syntaxhighlight> | |||
* “WAIT”语句在 MySQL 5.7 中没有效果,而是在将来扩展使用。 | |||
* “ALTER TABLESPACE”'''仅对 NDB 群集的磁盘数据存储有用'''。 | |||
* 【所有 NDB 群集磁盘数据对象共享相同的名称空间。这意味着“每个磁盘数据对象”必须被唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,不能有一个具有相同名称的表空间和一个数据文件,或具有相同名称的撤消日志文件和一个表空间。】 | |||
【???和 NDB 群集有关】 | |||
=== ALTER VIEW 语句 === | === ALTER VIEW 语句 === | ||
<syntaxhighlight lang="xml"> | |||
ALTER | |||
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] | |||
[DEFINER = user] | |||
[SQL SECURITY { DEFINER | INVOKER }] | |||
VIEW view_name [(column_list)] | |||
AS select_statement | |||
[WITH [CASCADED | LOCAL] CHECK OPTION] | |||
</syntaxhighlight> | |||
该语句更改视图的定义,该视图必须存在。【类似于“CREATE VIEW”的语法】 | |||
* 需要对视图具有'''“CREATE VIEW”和“DROP”权限''',并且需要对“SELECT”语句中引用的每一列都具有某些特权。 | |||
* “ALTER VIEW”仅允许定义者或具有“SUPER”权限的用户使用。 | |||
== CREATE 语句 == | == CREATE 语句 == | ||
=== CREATE DATABASE 语句 === | === CREATE DATABASE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE EVENT 语句 === | === CREATE EVENT 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE FUNCTION 语句 === | === CREATE FUNCTION 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE INDEX 语句 === | === CREATE INDEX 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE LOGFILE GROUP 语句 === | === CREATE LOGFILE GROUP 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE PROCEDURE 和 CREATE FUNCTION 语句 === | === CREATE PROCEDURE 和 CREATE FUNCTION 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE SERVER 语句 === | === CREATE SERVER 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE TABLE 语句 === | === CREATE TABLE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE TABLESPACE 语句 === | === CREATE TABLESPACE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE TRIGGER 语句 === | === CREATE TRIGGER 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== CREATE VIEW 语句 === | === CREATE VIEW 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
== DROP 语句 == | == DROP 语句 == | ||
=== DROP DATABASE 语句 === | === DROP DATABASE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP EVENT 语句 === | === DROP EVENT 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP FUNCTION 语句 === | === DROP FUNCTION 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP INDEX 语句 === | === DROP INDEX 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP LOGFILE GROUP 语句 === | === DROP LOGFILE GROUP 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP PROCEDURE 和 DROP FUNCTION 语句 === | === DROP PROCEDURE 和 DROP FUNCTION 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP SERVER 语句 === | === DROP SERVER 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP TABLE 语句 === | === DROP TABLE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP TABLESPACE 语句 === | === DROP TABLESPACE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP TRIGGER 语句 === | === DROP TRIGGER 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== DROP VIEW 语句 === | === DROP VIEW 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
== RENAME、TRUNCATE == | == RENAME、TRUNCATE == | ||
=== RENAME TABLE 语句 === | === RENAME TABLE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> | |||
=== TRUNCATE TABLE 语句 === | === TRUNCATE TABLE 语句 === | ||
<syntaxhighlight lang="xml"> | |||
</syntaxhighlight> |
2021年4月5日 (一) 02:09的版本
ALTER 语句
ALTER DATABASE 语句
ALTER {DATABASE | SCHEMA} [db_name]
alter_option ...
ALTER {DATABASE | SCHEMA} db_name
UPGRADE DATA DIRECTORY NAME
alter_option: {
[DEFAULT] CHARACTER SET [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
}
“ALTER DATABASE”可以更改数据库的总体 Feature。这些 Feature 存储在数据库目录的“db.opt”文件中。
- 该语句要求对数据库具有“ALTER”权限。
- “ALTER SCHEMA”是“ALTER DATABASE”的同义词。
从 MySQL 5.1 之前的版本升级
包含“UPGRADE DATA DIRECTORY NAME”子句的语法更新了与数据库关联的目录的名称,以使用 MySQL 5.1 中实现的编码将数据库名称映射到数据库目录名称。本条款在以下条件下使用:
- 它旨在将 MySQL 从较早版本升级到 5.1 或更高版本。
- 如果名称中包含需要编码的特殊字符,则打算将数据库目录名称更新为当前的编码格式。
- 该语句由“mysqlcheck”使用(由“mysql_upgrade”调用)。
例如,如果 MySQL 5.0 中的数据库名称为“a-b-c”,则该名称包含“-”(破折号)字符的实例。在 MySQL 5.0 中,数据库目录也命名为“a-b-c”,它不一定对所有文件系统都是安全的。在 MySQL 5.1 和更高版本中,相同的数据库名称被编码为“a@002db@002dc”,以产生文件系统无关的目录名称。
示例:
当 MySQL 安装从旧版本升级到 MySQL 5.1 或更高版本时,服务器将诸如“a-b-c”(采用旧格式)的名称显示为“#mysql50#a-b-c”,并且您必须使用“#mysql50#”前缀来引用该名称。在这种情况下,请使用“UPGRADE DATA DIRECTORY NAME”明确告诉服务器将数据库目录名称重新编码为当前编码格式:
ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;
执行此语句后,您可以将数据库命名为“a-b-c”,而没有特殊的“#mysql50#”前缀。
- “UPGRADE DATA DIRECTORY NAME”子句在 MySQL 5.7 中已弃用,在 MySQL 8.0 中已删除。
- 如果需要转换 MySQL 5.0 数据库或表名,一种解决方法是在升级到 MySQL 8.0 之前将 MySQL 5.0 安装升级到 MySQL 5.1.
ALTER EVENT 语句
ALTER
[DEFINER = user]
EVENT event_name
[ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'string']
[DO event_body]
“ALTER EVENT”语句更改了现有事件的一个或多个 Feature,而无需删除并重新创建它。
- “DEFINER”,“ON SCHEDULE”,“ON COMPLETION”,“COMMENT”,“ENABLE/DISABLE”和“DO”子句的语法与其用于“CREATE EVENT”的语法完全相同。
- 任何用户都可以更改在该用户具有“EVENT”权限的数据库上定义的事件。当用户执行成功的“ALTER EVENT”语句时,该用户将成为受影响事件的定义者。
示例:
禁用EVENT“myevent”:
ALTER EVENT myevent
DISABLE;
- “ON SCHEDULE”子句可以使用涉及内置 MySQL 函数和用户变量的表达式来获取其中包含的“timestamp”或“interval”值中的任何一个。您不能在此类表达式中使用存储的例程或用户定义的函数,也不能使用任何表引用。但是,您可以使用“SELECT FROM DUAL”。 【“ALTER EVENT”和“CREATE EVENT”语句均是如此】
- 尽管在“DO”子句中包含另一个“ALTER EVENT”语句的“ALTER EVENT”语句似乎成功,但是当服务器尝试执行生成的计划事件时,执行失败并显示错误。【即,不能嵌套】
- 没有“RENAME EVENT”语句。【而应使用“ALTER EVENT”语句的“RENAME TO”子句】
- 还可以使用“ALTER EVENT ... RENAME TO ...”和“db_name.event_name”表示法将事件移动到其他数据库,如下所示:
ALTER EVENT olddb.myevent RENAME TO newdb.myevent;
- 还可以使用“ALTER EVENT ... RENAME TO ...”和“db_name.event_name”表示法将事件移动到其他数据库,如下所示:
- 在复制从属服务器上使用“DISABLE ON SLAVE”(而不是“ENABLE”或“DISABLE”)来指示那些“在主服务器上创建并复制到从属服务器的”但“未在从属服务器上执行的”EVENT。
ALTER FUNCTION 语句
ALTER FUNCTION func_name [characteristic ...]
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
该语句可用于更改存储函数的 Feature。
- “ALTER FUNCTION”语句中可以指定多个更改。但是,不能使用此语句更改参数或存储函数的主体。【类似于“ALTER PROCEDURE”语句】
- 要进行此类更改,必须使用“DROP FUNCTION”和“CREATE FUNCTION”删除并重新创建该函数。
- 必须具有该功能的“ALTER ROUTINE”特权【???】(该特权会自动授予函数创建者)。
- 如果启用了二进制日志记录,则“ALTER FUNCTION”语句可能还需要“SUPER”特权【???】。
ALTER INSTANCE 语句【???】
ALTER INSTANCE ROTATE INNODB MASTER KEY
“ALTER INSTANCE”语句,【MySQL 5.7.11 中引入】,定义了适用于 MySQL 服务器实例的操作。此操作将旋转(即“ROTATE”)用于 InnoDB 表空间加密的主加密密钥。
- 密钥轮换需要“SUPER”权限。要执行此操作,必须安装并配置密钥环插件。
- “ALTER INSTANCE ROTATE INNODB MASTER KEY”支持并发 DML。但是,它不能与“CREATE TABLE ... ENCRYPTION”或“ALTER TABLE ... ENCRYPTION”操作同时运行,并且会采取锁定措施来防止由于同时执行这些语句而引起的冲突。如果其中一个冲突的语句正在运行,则必须先完成该语句,然后才能 continue 执行。
- “ALTER INSTANCE”操作被写入二进制日志,以便可以在复制的服务器上执行它们。
ALTER LOGFILE GROUP 语句【???和 NDB 群集有关】
ALTER LOGFILE GROUP logfile_group
ADD UNDOFILE 'file_name'
[INITIAL_SIZE [=] size]
[WAIT]
ENGINE [=] engine_name
该语句将名为“file_name ”的 UNDO文件【?】 添加到现有日志文件组“logfile_group”中。
- “ALTER LOGFILE GROUP”语句只有一个“ADD UNDOFILE”子句。当前不支持“DROP UNDOFILE”子句。
- “ALTER LOGFILE GROUP”仅对 NDB 群集的磁盘数据存储有用。
【。。。略】
【???和 NDB 群集有关】
ALTER PROCEDURE 语句
ALTER PROCEDURE proc_name [characteristic ...]
characteristic: {
COMMENT 'string'
| LANGUAGE SQL
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
}
该语句可用于更改存储过程的 Feature。
- “ALTER PROCEDURE”语句中可以指定多个更改。但是,您不能使用此语句更改参数或存储过程的主体。【类似于“ALTER FUNCTION”语句】
- 要进行此类更改,必须使用“DROP PROCEDURE”和“CREATE PROCEDURE”删除并重新创建该过程。
- 您必须具有该过程的“ALTER ROUTINE”权限【???】(默认情况下,该特权自动授予过程创建者)。
- 可以通过禁用“automatic_sp_privileges”系统变量来更改此行为。
ALTER SERVER 语句
ALTER SERVER server_name
OPTIONS (option [, option] ...)
更改 server_name 的服务器信息,并调整“CREATE SERVER”语句中允许的任何选项。【“mysql.servers”表中的相应字段将相应更新】
- 此语句需要“SUPER”权限。【???】
- 不管使用哪种日志记录格式,都不会将“ALTER SERVER”写入二进制日志。
ALTER TABLE 语句
ALTER TABLESPACE 语句【???和 NDB 群集有关】
ALTER TABLESPACE tablespace_name
{ADD | DROP} DATAFILE 'file_name'
[INITIAL_SIZE [=] size]
[WAIT]
ENGINE [=] engine_name
该语句用于添加新数据文件或从表空间删除数据文件。
- “ADD DATAFILE”变体使您可以使用“INITIAL_SIZE”子句指定初始大小:
- 其中 size 以字节为单位;【默认值为 134217728(128 MB)】
- 可以在 size 之后加上一个字母的缩写表示数量级。【通常使用字母:M(兆字节)或G(千兆字节)之一】
- 【在 32 位系统上,INITIAL_SIZE 的最大支持值为 4294967296(4 GB)】
- 一旦创建了数据文件,就无法更改其大小。但是,您可以使用其他“ALTER TABLESPACE ... ADD DATAFILE”语句将更多数据文件添加到表空间。
- “ALTER TABLESPACE ... DROP DATAFILE”用于从表空间中删除数据文件,但不能从表空间中删除“正在被任何表使用的”数据文件。【即,数据文件必须为空】
- “ALTER TABLESPACE ... ADD DATAFILE”和“ALTER TABLESPACE ... DROP DATAFILE”都需要一个“ENGINE”子句,该子句指定表空间使用的存储引擎。
- 当前,engine_name 唯一可接受的值为 NDB 和 NDBCLUSTER。
当“ALTER TABLESPACE ... ADD DATAFILE”与“ENGINE = NDB”一起使用时,将在每个 Cluster 数据节点上创建一个数据文件。您可以通过查询“INFORMATION_SCHEMA.FILES”表来验证是否已创建数据文件并获取有关它们的信息。例如,以下查询显示属于 newts 的表空间的所有数据文件:
mysql> SELECT LOGFILE_GROUP_NAME, FILE_NAME, EXTRA
-> FROM INFORMATION_SCHEMA.FILES
-> WHERE TABLESPACE_NAME = 'newts' AND FILE_TYPE = 'DATAFILE';
+--------------------+--------------+----------------+
| LOGFILE_GROUP_NAME | FILE_NAME | EXTRA |
+--------------------+--------------+----------------+
| lg_3 | newdata.dat | CLUSTER_NODE=3 |
| lg_3 | newdata.dat | CLUSTER_NODE=4 |
| lg_3 | newdata2.dat | CLUSTER_NODE=3 |
| lg_3 | newdata2.dat | CLUSTER_NODE=4 |
+--------------------+--------------+----------------+
2 rows in set (0.03 sec)
- “WAIT”语句在 MySQL 5.7 中没有效果,而是在将来扩展使用。
- “ALTER TABLESPACE”仅对 NDB 群集的磁盘数据存储有用。
- 【所有 NDB 群集磁盘数据对象共享相同的名称空间。这意味着“每个磁盘数据对象”必须被唯一命名(而不仅仅是给定类型的每个磁盘数据对象)。例如,不能有一个具有相同名称的表空间和一个数据文件,或具有相同名称的撤消日志文件和一个表空间。】
【???和 NDB 群集有关】
ALTER VIEW 语句
ALTER
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
该语句更改视图的定义,该视图必须存在。【类似于“CREATE VIEW”的语法】
- 需要对视图具有“CREATE VIEW”和“DROP”权限,并且需要对“SELECT”语句中引用的每一列都具有某些特权。
- “ALTER VIEW”仅允许定义者或具有“SUPER”权限的用户使用。
CREATE 语句
CREATE DATABASE 语句
CREATE EVENT 语句
CREATE FUNCTION 语句
CREATE INDEX 语句
CREATE LOGFILE GROUP 语句
CREATE PROCEDURE 和 CREATE FUNCTION 语句
CREATE SERVER 语句
CREATE TABLE 语句
CREATE TABLESPACE 语句
CREATE TRIGGER 语句
CREATE VIEW 语句
DROP 语句
DROP DATABASE 语句
DROP EVENT 语句
DROP FUNCTION 语句
DROP INDEX 语句
DROP LOGFILE GROUP 语句
DROP PROCEDURE 和 DROP FUNCTION 语句
DROP SERVER 语句
DROP TABLE 语句
DROP TABLESPACE 语句
DROP TRIGGER 语句
DROP VIEW 语句