CREATE DATABASE 语句

mysql 给定结果集 mysql数据定义语句_mysql中文注释语法报错


CREATE DATABASE语句用给定名称创建数据库。要使用此语句,您需要数据库的CREATE权限。CREATE SCHEMA是CREATE DATABASE的同义词。 如果数据库存在而您没有指定IF NOT EXISTS,则会发生错误。 在具有LOCK TABLES语句的会话中不允许创建数据库。 每个create_option指定一个数据库特征。数据库特征存储在数据字典中。 ●CHARACTER SET选项指定默认的数据库字符集。COLLATE选项指定默认的数据库排序规则。 要查看可用的字符集和排序规则,请分别使用 SHOW CHARACTER SET 和 SHOW COLLATION 语句。 ●MySQL 8.0.16中引入的ENCRYPTION选项,定义了默认的数据库加密,由数据库中创建的表继承。允许的值为'Y'(启用加密)和'N'(禁用加密)。如果未指定ENCRYPTION选项,则default_table_encryption系统变量的值定义默认数据库加密。如果启用table_encryption_privilege_check系统变量,则需要TABLE_ENCRYPTION_ADMIN权限来指定与default_table_encryption设置不同的默认加密设置。 MySQL中的数据库被实现为一个目录,其中包含与数据库中的表相对应的文件。因为最初创建数据库时数据库中没有表,CREATE DATABASE语句只在MySQL数据目录下创建一个目录。如果数据库名称包含特殊字符,则数据库目录的名称包含这些字符的编码版本。 MySQL8.0不支持通过在数据目录下手动创建目录(例如使用mkdir)来创建数据库目录。 创建数据库时,让服务器管理目录和其中的文件。直接操作数据库目录和文件会导致不一致和意外结果。 MySQL对数据库的数量没有限制。底层文件系统可能对目录的数量有限制。 也可以使用mysqladmin程序创建数据库。 CREATE EVENT 语句

mysql 给定结果集 mysql数据定义语句_mysql 给定结果集_02


此语句创建并调度新事件。除非启用事件调度器,否则事件不会运行。 CREATE EVENT需要具有创建事件的模式中的EVENT特权。如果存在DEFINER子句,则所需的特权取决于用户值。 有效CREATE EVENT语句的最低要求如下: ●关键字CREATE EVENT加上一个事件名称,它在数据库模式中唯一标识事件。 ●ON SCHEDULE子句,用于确定事件执行的时间和频率。 ●DO子句,它包含事件要执行的SQL语句。 以下是最小CREATE EVENT语句的示例:

mysql 给定结果集 mysql数据定义语句_mysql timestamp_03


前面的语句创建一个名为myevent的事件。此事件在创建一小时后执行一次,方法是运行一个SQL语句,该语句将myschema.mytable表的mycol列增加1。 event_name必须是有效的MySQL标识符,最大长度为64个字符。事件名称不区分大小写,因此不能在同一模式中有两个名为myevent和MyEvent的事件。一般来说,事件名的规则与存储例程名的规则相同。 事件与架构关联。如果event_name中没有指定模式,则假定使用默认(当前)模式。若要在特定模式中创建事件,请使用schema_name.event_name语法。 DEFINER子句指定在事件执行时检查访问权限时要使用的MySQL帐户。如果存在DEFINER子句,则用户值应该是指定为'user_name'@'host_name'、CURRENT_USER或CURRENT_USER()的MySQL帐户。允许的用户值取决于您所拥有的权限。 如果DEFINER子句被省略,默认的DEFINER是执行CREATE EVENT语句的用户。这与显式指定DEFINER = CURRENT_USER相同。 在事件体中,CURRENT_USER函数返回用于在事件执行时检查权限的帐户,即DEFINER用户。 IF NOT EXISTS对于CREATE EVENT的含义与CREATE TABLE的含义相同:如果名为 event_name 的事件已存在于同一模式中,则不会执行任何操作,也不会产生错误结果。(但是,在这种情况下会生成警告。) ON SCHEDULE子句确定事件体重复的时间、频率和持续时间。这个子句采用以下两种形式之一: ●AT timestamp用于一次性事件。它指定事件只在timestamp指定的日期和时间执行一次,时间戳必须同时包含日期和时间,或者必须是解析为日期时间值的表达式。为此,可以使用DATETIME或TIMESTAMP类型的值。如果日期是过去时间,则会出现警告,如下所示:

mysql 给定结果集 mysql数据定义语句_mysql timestamp 当前_04


CREATE EVENT语句本身如果无效--无论任何原因--都会失败报错。 可以使用CURRENT_TIMESTAMP指定当前日期和时间。在这种情况下,一旦事件被创建,就立即开始执行。 要创建一个在将来某个时间点发生的事件,例如使用"three weeks from now"所表示的事件,可以使用可选子句+INTERVAL 时间间隔。时间间隔由两部分组成,数量和时间单位,并遵循时间间隔中描述的语法规则,只是在定义事件时不能使用任何包含微秒的单位关键字。对于某些间隔类型,可以使用复杂的时间单位。"two minutes and ten seconds"可以表示为 + INTERVAL '2:10' MINUTE_SECOND。 也可以混用时间间隔。例如,AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY等于“three weeks and two days from now”。这样一个子句的每个部分都必须以+INTERVAL开头。 ●要定期重复操作,请使用EVERY子句。EVERY关键字后面跟着一个间隔,如前面对AT关键字的讨论所述。(+INTERVAL不与EVERY一起使用。)例如,EVERY 6 WEEK表示“每隔6周”。 尽管在EVERY子句中不允许使用+INTERVAL子句,但是可以使用+INTERVAL中允许的相同的复杂时间单位。 EVERY子句可以包含可选的STARTS子句。STARTS后面跟一个时间戳值,该值指示操作应该何时开始重复,还可以使用 + INTERVAL 时间间隔来指定"从现在开始"的时间量。例如,EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + INTERVAL 1 WEEK 表示"every three months, beginning one week from now"。类似地,可以用EVERY 2 WEEK STARTS CURRENT_TIMESTAMP + INTERVAL '6:15' HOUR_MINUTE 表示"every two weeks, beginning six hours and fifteen minutes from now"。不指定STARTS与使用STARTS CURRENT_TIMESTAMP相同,也就是说,为事件指定的操作在创建事件时立即开始重复。 EVERY子句可以包含可选的ENDS子句。ENDS关键字后面是一个时间戳值,它告诉MySQL事件何时应该停止重复。可以使用+INTERVAL 间隔以及ENDS;例如,EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK相当于“从现在开始30分钟后开始,每12小时执行一次,从现在起4周后结束”。不使用ENDS意味着事件将无限期地继续执行。 ENDS支持与STARTS相同的复杂时间单位语法。 可以在EVERY子句中使用STARTS、ENDS,也可以两者都用或者两者都不用。 如果重复事件没有在其调度间隔内终止,则结果可能是同时执行该事件的多个实例。如果这是不需要的,您应该建立一种机制来防止同时发生实例。例如,可以使用GET_LOCK()函数,或行或表锁定。 ON SCHEDULE子句可以使用包含内置MySQL函数和用户变量的表达式来获取它包含的任何时间戳或间隔值。不能在此类表达式中使用存储函数或用户定义函数,也不能使用任何表引用;但是,可以使用SELECT FROM DUAL。对于CREATE EVENT和ALTER EVENT语句都是这样。引用存储函数,用户定义函数和表都不允许使用,会导致语句失败报错。 使用当前会话time_zone时区值解释ON SCHEDULE子句中的时间。这将成为事件的时区;也就是说,用于事件调度的时区,在事件执行时在事件内有效。这些时间将转换为UTC并与事件时区一起存储在内部。这使得事件执行能够按照定义继续执行,而不管服务器时区或夏令时效果的后续更改如何。 通常,一旦事件过期,它将立即被删除。可以通过指定ON COMPLETION PRESERVE来重写此行为。使用ON COMPLETION NOT PRESERVE只会使默认的非持久行为更明显。 可以创建事件,但使用DISABLE关键字阻止它处于活动状态。或者,可以使用ENABLE显式地显示默认状态,即活动状态。这与ALTER EVENT一起使用非常有用。 第三个值也可能出现在ENABLE或DISABLE的位置;DISABLE ON SLAVE是为主从复制的从服务器上的事件状态设置的,以指示该事件是在主服务器上创建并复制到从服务器上的,但是没有在从服务器上执行。 您可以使用COMMENT子句为事件提供注释。注释可以是您希望用于描述事件的最多64个字符的任何字符串。注释文本是字符串文本,必须用引号括起来。 DO子句指定事件执行的操作,并由一个SQL语句组成。几乎所有可以在存储例程中使用的有效MySQL语句也可以用作调度事件的操作语句。例如,下面的事件e_hourly每小时从sessions表中删除所有行一次,其中该表是site_activity模式的一部分:

mysql 给定结果集 mysql数据定义语句_mysql中文注释语法报错_05


MySQL存储在创建或更改事件时生效的sql_mode系统变量设置,并始终使用此设置有效地执行事件,而不管事件开始执行时的当前服务器sql模式如何。 在其DO子句中包含ALTER EVENT语句的CREATE EVENT语句似乎可行;但是,当服务器尝试执行生成的计划事件时,执行失败并报错。 事件所属的模式是DO子句中表引用的默认模式。对其他模式中表的任何引用都必须使用正确的模式名称进行限定。 与存储例程一样,可以通过使用BEGIN和END关键字在DO子句中使用复合语句语法,如下所示:

mysql 给定结果集 mysql数据定义语句_mysql 给定结果集_06


此示例使用delimiter命令更改语句分隔符。 在事件中是可能使用更复杂的复合语句(如存储例程中使用的语句)的。此示例使用局部变量、错误处理程序和流控制结构:

mysql 给定结果集 mysql数据定义语句_mysql timestamp 当前_07


无法直接向事件传递参数或从事件传递参数;但是,可以在事件中调用带参数的存储例程:

mysql 给定结果集 mysql数据定义语句_mysql definer_08


如果事件的定义者有足够的权限来设置全局系统变量,则事件可以读写全局变量。由于给予这种权限有可能被滥用,因此在这样做时必须格外小心。 通常,存储例程中有效的任何语句都可以用于由事件执行的操作语句。可以将事件创建为存储例程的一部分,但不能用一个事件创建另一个事件。 官方文档: https://dev.mysql.com/doc/refman/8.0/en/create-database.html https://dev.mysql.com/doc/refman/8.0/en/create-event.html