(509,'CREATE VIEW',38,'Syntax:\nCREATE\n    [OR REPLACE]\n    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]\n    [DEFINER = user]\n    [SQL SECURITY { DEFINER | INVOKER }]\n    VIEW view_name [(column_list)]\n    AS select_statement\n    [WITH [CASCADED | LOCAL] CHECK OPTION]\n\nThe CREATE VIEW statement creates a new view, or replaces an existing\nview if the OR REPLACE clause is given. If the view does not exist,\nCREATE OR REPLACE VIEW is the same as CREATE VIEW. If the view does\nexist, CREATE OR REPLACE VIEW replaces it.\n\nFor information about restrictions on view use, see\nhttps://dev.mysql.com/doc/refman/5.7/en/view-restrictions.html.\n\nThe select_statement is a SELECT statement that provides the definition\nof the view. (Selecting from the view selects, in effect, using the\nSELECT statement.) The select_statement can select from base tables or\nother views.\n\nThe view definition is \"frozen\" at creation time and is not affected by\nsubsequent changes to the definitions of the underlying tables. For\nexample, if a view is defined as SELECT * on a table, new columns added\nto the table later do not become part of the view, and columns dropped\nfrom the table result in an error when selecting from the view.\n\nThe ALGORITHM clause affects how MySQL processes the view. The DEFINER\nand SQL SECURITY clauses specify the security context to be used when\nchecking access privileges at view invocation time. The WITH CHECK\nOPTION clause can be given to constrain inserts or updates to rows in\ntables referenced by the view. These clauses are described later in\nthis section.\n\nThe CREATE VIEW statement requires the CREATE VIEW privilege for the\nview, and some privilege for each column selected by the SELECT\nstatement. For columns used elsewhere in the SELECT statement, you must\nhave the SELECT privilege. If the OR REPLACE clause is present, you\nmust also have the DROP privilege for the view. If the DEFINER clause\nis present, the privileges required depend on the user value, as\ndiscussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.\n\nWhen a view is referenced, privilege checking occurs as described later\nin this section.\n\nA view belongs to a database. By default, a new view is created in the\ndefault database. To create the view explicitly in a given database,\nuse db_name.view_name syntax to qualify the view name with the database\nname:\n\nCREATE VIEW test.v AS SELECT * FROM t;\n\nUnqualified table or view names in the SELECT statement are also\ninterpreted with respect to the default database. A view can refer to\ntables or views in other databases by qualifying the table or view name\nwith the appropriate database name.\n\nWithin a database, base tables and views share the same namespace, so a\nbase table and a view cannot have the same name.\n\nColumns retrieved by the SELECT statement can be simple references to\ntable columns, or expressions that use functions, constant values,\noperators, and so forth.\n\nA view must have unique column names with no duplicates, just like a\nbase table. By default, the names of the columns retrieved by the\nSELECT statement are used for the view column names. To define explicit\nnames for the view columns, specify the optional column_list clause as\na list of comma-separated identifiers. The number of names in\ncolumn_list must be the same as the number of columns retrieved by the\nSELECT statement.\n\nA view can be created from many kinds of SELECT statements. It can\nrefer to base tables or other views. It can use joins, UNION, and\nsubqueries. The SELECT need not even refer to any tables:\n\nCREATE VIEW v_today (today) AS SELECT CURRENT_DATE;\n\nThe following example defines a view that selects two columns from\nanother table as well as an expression calculated from those columns:\n\nmysql> CREATE TABLE t (qty INT, price INT);\nmysql> INSERT INTO t VALUES(3, 50);\nmysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;\nmysql> SELECT * FROM v;\n+------+-------+-------+\n| qty  | price | value |\n+------+-------+-------+\n|    3 |    50 |   150 |\n+------+-------+-------+\n\nA view definition is subject to the following restrictions:\n\no The SELECT statement cannot refer to system variables or user-defined\n  variables.\n\no Within a stored program, the SELECT statement cannot refer to program\n  parameters or local variables.\n\no The SELECT statement cannot refer to prepared statement parameters.\n\no Any table or view referred to in the definition must exist. If, after\n  the view has been created, a table or view that the definition refers\n  to is dropped, use of the view results in an error. To check a view\n  definition for problems of this kind, use the CHECK TABLE statement.\n\no The definition cannot refer to a TEMPORARY table, and you cannot\n  create a TEMPORARY view.\n\no You cannot associate a trigger with a view.\n\no Aliases for column names in the SELECT statement are checked against\n  the maximum column length of 64 characters (not the maximum alias\n  length of 256 characters).\n\nORDER BY is permitted in a view definition, but it is ignored if you\nselect from a view using a statement that has its own ORDER BY.\n\nFor other options or clauses in the definition, they are added to the\noptions or clauses of the statement that references the view, but the\neffect is undefined. For example, if a view definition includes a LIMIT\nclause, and you select from the view using a statement that has its own\nLIMIT clause, it is undefined which limit applies. This same principle\napplies to options such as ALL, DISTINCT, or SQL_SMALL_RESULT that\nfollow the SELECT keyword, and to clauses such as INTO, FOR UPDATE,\nLOCK IN SHARE MODE, and PROCEDURE.\n\nThe results obtained from a view may be affected if you change the\nquery processing environment by changing system variables:\n\nmysql> CREATE VIEW v (mycol) AS SELECT \'abc\';\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SET sql_mode = \'\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT \"mycol\" FROM v;\n+-------+\n| mycol |\n+-------+\n| mycol |\n+-------+\n1 row in set (0.01 sec)\n\nmysql> SET sql_mode = \'ANSI_QUOTES\';\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT \"mycol\" FROM v;\n+-------+\n| mycol |\n+-------+\n| abc   |\n+-------+\n1 row in set (0.00 sec)\n\nThe DEFINER and SQL SECURITY clauses determine which MySQL account to\nuse when checking access privileges for the view when a statement is\nexecuted that references the view. The valid SQL SECURITY\ncharacteristic values are DEFINER (the default) and INVOKER. These\nindicate that the required privileges must be held by the user who\ndefined or invoked the view, respectively.\n\nIf the DEFINER clause is present, the user value should be a MySQL\naccount specified as \'user_name\'@\'host_name\', CURRENT_USER, or\nCURRENT_USER(). The permitted user values depend on the privileges you\nhold, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.\nAlso see that section for additional information about view security.\n\nIf the DEFINER clause is omitted, the default definer is the user who\nexecutes the CREATE VIEW statement. This is the same as specifying\nDEFINER = CURRENT_USER explicitly.\n\nWithin a view definition, the CURRENT_USER function returns the view\'s\nDEFINER value by default. For views defined with the SQL SECURITY\nINVOKER characteristic, CURRENT_USER returns the account for the view\'s\ninvoker. For information about user auditing within views, see\nhttps://dev.mysql.com/doc/refman/5.7/en/account-activity-auditing.html.\n\nWithin a stored routine that is defined with the SQL SECURITY DEFINER\ncharacteristic, CURRENT_USER returns the routine\'s DEFINER value. This\nalso affects a view defined within such a routine, if the view\ndefinition contains a DEFINER value of CURRENT_USER.\n\nMySQL checks view privileges like this:\n\no At view definition time, the view creator must have the privileges\n  needed to use the top-level objects accessed by the view. For\n  example, if the view definition refers to table columns, the creator\n  must have some privilege for each column in the select list of the\n  definition, and the SELECT privilege for each column used elsewhere\n  in the definition. If the definition refers to a stored function,\n  only the privileges needed to invoke the function can be checked. The\n  privileges required at function invocation time can be checked only\n  as it executes: For different invocations, different execution paths\n  within the function might be taken.\n\no The user who references a view must have appropriate privileges to\n  access it (SELECT to select from it, INSERT to insert into it, and so\n  forth.)\n\no When a view has been referenced, privileges for objects accessed by\n  the view are checked against the privileges held by the view DEFINER\n  account or invoker, depending on whether the SQL SECURITY\n  characteristic is DEFINER or INVOKER, respectively.\n\no If reference to a view causes execution of a stored function,\n  privilege checking for statements executed within the function depend\n  on whether the function SQL SECURITY characteristic is DEFINER or\n  INVOKER. If the security characteristic is DEFINER, the function runs\n  with the privileges of the DEFINER account. If the characteristic is\n  INVOKER, the function runs with the privileges determined by the\n  view\'s SQL SECURITY characteristic.\n\nExample: A view might depend on a stored function, and that function\nmight invoke other stored routines. For example, the following view\ninvokes a stored function f():\n\nCREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);\n\nSuppose that f() contains a statement such as this:\n\nIF name IS NULL then\n  CALL p1();\nELSE\n  CALL p2();\nEND IF;\n\nThe privileges required for executing statements within f() need to be\nchecked when f() executes. This might mean that privileges are needed\nfor p1() or p2(), depending on the execution path within f(). Those\nprivileges must be checked at runtime, and the user who must possess\nthe privileges is determined by the SQL SECURITY values of the view v\nand the function f().\n\nThe DEFINER and SQL SECURITY clauses for views are extensions to\nstandard SQL. In standard SQL, views are handled using the rules for\nSQL SECURITY DEFINER. The standard says that the definer of the view,\nwhich is the same as the owner of the view\'s schema, gets applicable\nprivileges on the view (for example, SELECT) and may grant them. MySQL\nhas no concept of a schema \"owner\", so MySQL adds a clause to identify\nthe definer. The DEFINER clause is an extension where the intent is to\nhave what the standard has; that is, a permanent record of who defined\nthe view. This is why the default DEFINER value is the account of the\nview creator.\n\nThe optional ALGORITHM clause is a MySQL extension to standard SQL. It\naffects how MySQL processes the view. ALGORITHM takes three values:\nMERGE, TEMPTABLE, or UNDEFINED. For more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/view-algorithms.html, as well\nas\nhttps://dev.mysql.com/doc/refman/5.7/en/derived-table-optimization.html\n.\n\nSome views are updatable. That is, you can use them in statements such\nas UPDATE, DELETE, or INSERT to update the contents of the underlying\ntable. For a view to be updatable, there must be a one-to-one\nrelationship between the rows in the view and the rows in the\nunderlying table. There are also certain other constructs that make a\nview nonupdatable.\n\nA generated column in a view is considered updatable because it is\npossible to assign to it. However, if such a column is updated\nexplicitly, the only permitted value is DEFAULT. For information about\ngenerated columns, see\nhttps://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.\nhtml.\n\nThe WITH CHECK OPTION clause can be given for an updatable view to\nprevent inserts or updates to rows except those for which the WHERE\nclause in the select_statement is true.\n\nIn a WITH CHECK OPTION clause for an updatable view, the LOCAL and\nCASCADED keywords determine the scope of check testing when the view is\ndefined in terms of another view. The LOCAL keyword restricts the CHECK\nOPTION only to the view being defined. CASCADED causes the checks for\nunderlying views to be evaluated as well. When neither keyword is\ngiven, the default is CASCADED.\n\nFor more information about updatable views and the WITH CHECK OPTION\nclause, see\nhttps://dev.mysql.com/doc/refman/5.7/en/view-updatability.html, and\nhttps://dev.mysql.com/doc/refman/5.7/en/view-check-option.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-view.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-view.html'),(510,'DROP DATABASE',38,'Syntax:\nDROP {DATABASE | SCHEMA} [IF EXISTS] db_name\n\nDROP DATABASE drops all tables in the database and deletes the\ndatabase. Be very careful with this statement! To use DROP DATABASE,\nyou need the DROP privilege on the database. DROP SCHEMA is a synonym\nfor DROP DATABASE.\n\n*Important*:\n\nWhen a database is dropped, privileges granted specifically for the\ndatabase are not automatically dropped. They must be dropped manually.\nSee [HELP GRANT].\n\nIF EXISTS is used to prevent an error from occurring if the database\ndoes not exist.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-database.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-database.html'),(511,'DROP SCHEMA',38,'Syntax:\nDROP {DATABASE | SCHEMA} [IF EXISTS] db_name\n\nDROP DATABASE drops all tables in the database and deletes the\ndatabase. Be very careful with this statement! To use DROP DATABASE,\nyou need the DROP privilege on the database. DROP SCHEMA is a synonym\nfor DROP DATABASE.\n\n*Important*:\n\nWhen a database is dropped, privileges granted specifically for the\ndatabase are not automatically dropped. They must be dropped manually.\nSee [HELP GRANT].\n\nIF EXISTS is used to prevent an error from occurring if the database\ndoes not exist.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-database.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-database.html'),(512,'DROP EVENT',38,'Syntax:\nDROP EVENT [IF EXISTS] event_name\n\nThis statement drops the event named event_name. The event immediately\nceases being active, and is deleted completely from the server.\n\nIf the event does not exist, the error ERROR 1517 (HY000): Unknown\nevent \'event_name\' results. You can override this and cause the\nstatement to generate a warning for nonexistent events instead using IF\nEXISTS.\n\nThis statement requires the EVENT privilege for the schema to which the\nevent to be dropped belongs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-event.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-event.html'),(513,'DROP INDEX',38,'Syntax:\nDROP INDEX index_name ON tbl_name\n    [algorithm_option | lock_option] ...\n\nalgorithm_option:\n    ALGORITHM [=] {DEFAULT | INPLACE | COPY}\n\nlock_option:\n    LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}\n\nDROP INDEX drops the index named index_name from the table tbl_name.\nThis statement is mapped to an ALTER TABLE statement to drop the index.\nSee [HELP ALTER TABLE].\n\nTo drop a primary key, the index name is always PRIMARY, which must be\nspecified as a quoted identifier because PRIMARY is a reserved word:\n\nDROP INDEX `PRIMARY` ON t;\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-index.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-index.html'),(514,'DROP PROCEDURE',38,'Syntax:\nDROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name\n\nThese statements are used to drop a stored routine (a stored procedure\nor function). That is, the specified routine is removed from the\nserver. (DROP FUNCTION is also used to drop loadable functions; see\n[HELP DROP FUNCTION loadable function].)\n\nTo drop a stored routine, you must have the ALTER ROUTINE privilege for\nit. (If the automatic_sp_privileges system variable is enabled, that\nprivilege and EXECUTE are granted automatically to the routine creator\nwhen the routine is created and dropped from the creator when the\nroutine is dropped. See\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html\n.)\n\nThe IF EXISTS clause is a MySQL extension. It prevents an error from\noccurring if the procedure or function does not exist. A warning is\nproduced that can be viewed with SHOW WARNINGS.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-procedure.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-procedure.html'),(515,'DROP FUNCTION',38,'Syntax:\nDROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name\n\nThese statements are used to drop a stored routine (a stored procedure\nor function). That is, the specified routine is removed from the\nserver. (DROP FUNCTION is also used to drop loadable functions; see\n[HELP DROP FUNCTION loadable function].)\n\nTo drop a stored routine, you must have the ALTER ROUTINE privilege for\nit. (If the automatic_sp_privileges system variable is enabled, that\nprivilege and EXECUTE are granted automatically to the routine creator\nwhen the routine is created and dropped from the creator when the\nroutine is dropped. See\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-routines-privileges.html\n.)\n\nThe IF EXISTS clause is a MySQL extension. It prevents an error from\noccurring if the procedure or function does not exist. A warning is\nproduced that can be viewed with SHOW WARNINGS.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-procedure.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-procedure.html'),(516,'DROP SERVER',38,'Syntax:\nDROP SERVER [ IF EXISTS ] server_name\n\nDrops the server definition for the server named server_name. The\ncorresponding row in the mysql.servers table is deleted. This statement\nrequires the SUPER privilege.\n\nDropping a server for a table does not affect any FEDERATED tables that\nused this connection information when they were created. See [HELP\nCREATE SERVER].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-server.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-server.html'),(517,'DROP TABLE',38,'Syntax:\nDROP [TEMPORARY] TABLE [IF EXISTS]\n    tbl_name [, tbl_name] ...\n    [RESTRICT | CASCADE]\n\nDROP TABLE removes one or more tables. You must have the DROP privilege\nfor each table.\n\nBe careful with this statement! For each table, it removes the table\ndefinition and all table data. If the table is partitioned, the\nstatement removes the table definition, all its partitions, all data\nstored in those partitions, and all partition definitions associated\nwith the dropped table.\n\nDropping a table also drops any triggers for the table.\n\nDROP TABLE causes an implicit commit, except when used with the\nTEMPORARY keyword. See\nhttps://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\n*Important*:\n\nWhen a table is dropped, privileges granted specifically for the table\nare not automatically dropped. They must be dropped manually. See [HELP\nGRANT].\n\nIf any tables named in the argument list do not exist, DROP TABLE\nbehavior depends on whether the IF EXISTS clause is given:\n\no Without IF EXISTS, the statement drops all named tables that do\n  exist, and returns an error indicating which nonexisting tables it\n  was unable to drop.\n\no With IF EXISTS, no error occurs for nonexisting tables. The statement\n  drops all named tables that do exist, and generates a NOTE diagnostic\n  for each nonexistent table. These notes can be displayed with SHOW\n  WARNINGS. See [HELP SHOW WARNINGS].\n\nIF EXISTS can also be useful for dropping tables in unusual\ncircumstances under which there is an .frm file but no table managed by\nthe storage engine. (For example, if an abnormal server exit occurs\nafter removal of the table from the storage engine but before .frm file\nremoval.)\n\nThe TEMPORARY keyword has the following effects:\n\no The statement drops only TEMPORARY tables.\n\no The statement does not cause an implicit commit.\n\no No access rights are checked. A TEMPORARY table is visible only with\n  the session that created it, so no check is necessary.\n\nIncluding the TEMPORARY keyword is a good way to prevent accidentally\ndropping non-TEMPORARY tables.\n\nThe RESTRICT and CASCADE keywords do nothing. They are permitted to\nmake porting easier from other database systems.\n\nDROP TABLE is not supported with all innodb_force_recovery settings.\nSee\nhttps://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-table.html'),(518,'DROP TABLESPACE',38,'Syntax:\nDROP TABLESPACE tablespace_name\n    [ENGINE [=] engine_name]\n\nThis statement drops a tablespace that was previously created using\nCREATE TABLESPACE. It is supported with all MySQL NDB Cluster 7.5\nreleases, and with InnoDB in the standard MySQL Server as well.\n\nENGINE sets the storage engine that uses the tablespace, where\nengine_name is the name of the storage engine. Currently, the values\nInnoDB and NDB are supported. If not set, the value of\ndefault_storage_engine is used. If it is not the same as the storage\nengine used to create the tablespace, the DROP TABLESPACE statement\nfails.\n\nFor an InnoDB tablespace, all tables must be dropped from the\ntablespace prior to a DROP TABLESPACE operation. If the tablespace is\nnot empty, DROP TABLESPACE returns an error.\n\nAs with the InnoDB system tablespace, truncating or dropping InnoDB\ntables stored in a general tablespace creates free space in the\ntablespace .ibd data file, which can only be used for new InnoDB data.\nSpace is not released back to the operating system by such operations\nas it is for file-per-table tablespaces.\n\nAn NDB tablespace to be dropped must not contain any data files; in\nother words, before you can drop an NDB tablespace, you must first drop\neach of its data files using ALTER TABLESPACE ... DROP DATAFILE.\n\nNotes\n\no Tablespaces are not deleted automatically. A tablespace must be\n  dropped explicitly using DROP TABLESPACE. DROP DATABASE has no effect\n  in this regard, even if the operation drops all tables belonging to\n  the tablespace.\n\no A DROP DATABASE operation can drop tables that belong to a general\n  tablespace but it cannot drop the tablespace, even if the operation\n  drops all tables that belong to the tablespace. The tablespace must\n  be dropped explicitly using DROP TABLESPACE tablespace_name.\n\no Similar to the system tablespace, truncating or dropping tables\n  stored in a general tablespace creates free space internally in the\n  general tablespace .ibd data file which can only be used for new\n  InnoDB data. Space is not released back to the operating system as it\n  is for file-per-table tablespaces.\n\nInnoDB Example\n\nThis example demonstrates how to drop an InnoDB general tablespace. The\ngeneral tablespace ts1 is created with a single table. Before dropping\nthe tablespace, the table must be dropped.\n\nmysql> CREATE TABLESPACE `ts1` ADD DATAFILE \'ts1.ibd\' Engine=InnoDB;\n\nmysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1 Engine=InnoDB;\n\nmysql> DROP TABLE t1;\n\nmysql> DROP TABLESPACE ts1;\n\nNDB Example\n\nThis example shows how to drop an NDB tablespace myts having a data\nfile named mydata-1.dat after first creating the tablespace, and\nassumes the existence of a log file group named mylg (see [HELP CREATE\nLOGFILE GROUP]).\n\nmysql> CREATE TABLESPACE myts\n    ->     ADD DATAFILE \'mydata-1.dat\'\n    ->     USE LOGFILE GROUP mylg\n    ->     ENGINE=NDB;\n\nYou must remove all data files from the tablespace using ALTER\nTABLESPACE, as shown here, before it can be dropped:\n\nmysql> ALTER TABLESPACE myts\n    ->     DROP DATAFILE \'mydata-1.dat\'\n    ->     ENGINE=NDB;\n\nmysql> DROP TABLESPACE myts;\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-tablespace.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-tablespace.html'),(519,'DROP TRIGGER',38,'Syntax:\nDROP TRIGGER [IF EXISTS] [schema_name.]trigger_name\n\nThis statement drops a trigger. The schema (database) name is optional.\nIf the schema is omitted, the trigger is dropped from the default\nschema. DROP TRIGGER requires the TRIGGER privilege for the table\nassociated with the trigger.\n\nUse IF EXISTS to prevent an error from occurring for a trigger that\ndoes not exist. A NOTE is generated for a nonexistent trigger when\nusing IF EXISTS. See [HELP SHOW WARNINGS].\n\nTriggers for a table are also dropped if you drop the table.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-trigger.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-trigger.html'),(520,'DROP VIEW',38,'Syntax:\nDROP VIEW [IF EXISTS]\n    view_name [, view_name] ...\n    [RESTRICT | CASCADE]\n\nDROP VIEW removes one or more views. You must have the DROP privilege\nfor each view.\n\nIf any views named in the argument list do not exist, the statement\nreturns an error indicating by name which nonexisting views it was\nunable to drop, but also drops all views in the list that do exist.\n\n*Note*:\n\nIn MySQL 8.0, DROP VIEW fails if any views named in the argument list\ndo not exist. Due to the change in behavior, a partially completed DROP\nVIEW operation on a MySQL 5.7 source fails when replicated to a MySQL\n8.0 replica. To avoid this failure scenario, use IF EXISTS syntax in\nDROP VIEW statements to prevent an error from occurring for views that\ndo not exist. For more information, see Atomic Data Definition\nStatement Support\n(https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html).\n\nThe IF EXISTS clause prevents an error from occurring for views that\ndon\'t exist. When this clause is given, a NOTE is generated for each\nnonexistent view. See [HELP SHOW WARNINGS].\n\nRESTRICT and CASCADE, if given, are parsed and ignored.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-view.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-view.html'),(521,'RENAME TABLE',38,'Syntax:\nRENAME TABLE\n    tbl_name TO new_tbl_name\n    [, tbl_name2 TO new_tbl_name2] ...\n\nRENAME TABLE renames one or more tables. You must have ALTER and DROP\nprivileges for the original table, and CREATE and INSERT privileges for\nthe new table.\n\nFor example, to rename a table named old_table to new_table, use this\nstatement:\n\nRENAME TABLE old_table TO new_table;\n\nThat statement is equivalent to the following ALTER TABLE statement:\n\nALTER TABLE old_table RENAME new_table;\n\nRENAME TABLE, unlike ALTER TABLE, can rename multiple tables within a\nsingle statement:\n\nRENAME TABLE old_table1 TO new_table1,\n             old_table2 TO new_table2,\n             old_table3 TO new_table3;\n\nRenaming operations are performed left to right. Thus, to swap two\ntable names, do this (assuming that a table with the intermediary name\ntmp_table does not already exist):\n\nRENAME TABLE old_table TO tmp_table,\n             new_table TO old_table,\n             tmp_table TO new_table;\n\nMetadata locks on tables are acquired in name order, which in some\ncases can make a difference in operation outcome when multiple\ntransactions execute concurrently. See\nhttps://dev.mysql.com/doc/refman/5.7/en/metadata-locking.html.\n\nTo execute RENAME TABLE, there must be no active transactions or tables\nlocked with LOCK TABLES. With the transaction table locking conditions\nsatisfied, the rename operation is done atomically; no other session\ncan access any of the tables while the rename is in progress.\n\nIf any errors occur during a RENAME TABLE, the statement fails and no\nchanges are made.\n\nYou can use RENAME TABLE to move a table from one database to another:\n\nRENAME TABLE current_db.tbl_name TO other_db.tbl_name;\n\nUsing this method to move all tables from one database to a different\none in effect renames the database (an operation for which MySQL has no\nsingle statement), except that the original database continues to\nexist, albeit with no tables.\n\nLike RENAME TABLE, ALTER TABLE ... RENAME can also be used to move a\ntable to a different database. Regardless of the statement used, if the\nrename operation would move the table to a database located on a\ndifferent file system, the success of the outcome is platform specific\nand depends on the underlying operating system calls used to move table\nfiles.\n\nIf a table has triggers, attempts to rename the table into a different\ndatabase fail with a Trigger in wrong schema (ER_TRG_IN_WRONG_SCHEMA\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_trg_in_wrong_schema)) error.\n\nTo rename TEMPORARY tables, RENAME TABLE does not work. Use ALTER TABLE\ninstead.\n\nRENAME TABLE works for views, except that views cannot be renamed into\na different database.\n\nAny privileges granted specifically for a renamed table or view are not\nmigrated to the new name. They must be changed manually.\n\nRENAME TABLE tbl_name TO new_tbl_name changes internally generated\nforeign key constraint names and user-defined foreign key constraint\nnames that begin with the string \"tbl_name_ibfk_\" to reflect the new\ntable name. InnoDB interprets foreign key constraint names that begin\nwith the string \"tbl_name_ibfk_\" as internally generated names.\n\nForeign key constraint names that point to the renamed table are\nautomatically updated unless there is a conflict, in which case the\nstatement fails with an error. A conflict occurs if the renamed\nconstraint name already exists. In such cases, you must drop and\nre-create the foreign keys for them to function properly.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/rename-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/rename-table.html'),(522,'TRUNCATE TABLE',38,'Syntax:\nTRUNCATE [TABLE] tbl_name\n\nTRUNCATE TABLE empties a table completely. It requires the DROP\nprivilege.\n\nLogically, TRUNCATE TABLE is similar to a DELETE statement that deletes\nall rows, or a sequence of DROP TABLE and CREATE TABLE statements. To\nachieve high performance, it bypasses the DML method of deleting data.\nThus, it cannot be rolled back, it does not cause ON DELETE triggers to\nfire, and it cannot be performed for InnoDB tables with parent-child\nforeign key relationships.\n\nAlthough TRUNCATE TABLE is similar to DELETE, it is classified as a DDL\nstatement rather than a DML statement. It differs from DELETE in the\nfollowing ways:\n\no Truncate operations drop and re-create the table, which is much\n  faster than deleting rows one by one, particularly for large tables.\n\no Truncate operations cause an implicit commit, and so cannot be rolled\n  back. See\n  https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\no Truncation operations cannot be performed if the session holds an\n  active table lock.\n\no TRUNCATE TABLE fails for an InnoDB table or NDB table if there are\n  any FOREIGN KEY constraints from other tables that reference the\n  table. Foreign key constraints between columns of the same table are\n  permitted.\n\no Truncation operations do not return a meaningful value for the number\n  of deleted rows. The usual result is \"0 rows affected,\" which should\n  be interpreted as \"no information.\"\n\no As long as the table format file tbl_name.frm is valid, the table can\n  be re-created as an empty table with TRUNCATE TABLE, even if the data\n  or index files have become corrupted.\n\no Any AUTO_INCREMENT value is reset to its start value. This is true\n  even for MyISAM and InnoDB, which normally do not reuse sequence\n  values.\n\no When used with partitioned tables, TRUNCATE TABLE preserves the\n  partitioning; that is, the data and index files are dropped and\n  re-created, while the partition definitions (.par) file is\n  unaffected.\n\no The TRUNCATE TABLE statement does not invoke ON DELETE triggers.\n\nTRUNCATE TABLE is treated for purposes of binary logging and\nreplication as DDL rather than DML, and is always logged as a\nstatement.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/truncate-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/truncate-table.html'),(523,'CALL',39,'Syntax:\nCALL sp_name([parameter[,...]])\nCALL sp_name[()]\n\nThe CALL statement invokes a stored procedure that was defined\npreviously with CREATE PROCEDURE.\n\nStored procedures that take no arguments can be invoked without\nparentheses. That is, CALL p() and CALL p are equivalent.\n\nCALL can pass back values to its caller using parameters that are\ndeclared as OUT or INOUT parameters. When the procedure returns, a\nclient program can also obtain the number of rows affected for the\nfinal statement executed within the routine: At the SQL level, call the\nROW_COUNT() function; from the C API, call the mysql_affected_rows()\n(https://dev.mysql.com/doc/c-api/5.7/en/mysql-affected-rows.html)\nfunction.\n\nFor information about the effect of unhandled conditions on procedure\nparameters, see\nhttps://dev.mysql.com/doc/refman/5.7/en/conditions-and-parameters.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/call.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/call.html'),(524,'DELETE',39,'Syntax:\nDELETE is a DML statement that removes rows from a table.\n\nSingle-Table Syntax\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [WHERE where_condition]\n    [ORDER BY ...]\n    [LIMIT row_count]\n\nThe DELETE statement deletes rows from tbl_name and returns the number\nof deleted rows. To check the number of deleted rows, call the\nROW_COUNT() function described in\nhttps://dev.mysql.com/doc/refman/5.7/en/information-functions.html.\n\nMain Clauses\n\nThe conditions in the optional WHERE clause identify which rows to\ndelete. With no WHERE clause, all rows are deleted.\n\nwhere_condition is an expression that evaluates to true for each row to\nbe deleted. It is specified as described in\nhttps://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nIf the ORDER BY clause is specified, the rows are deleted in the order\nthat is specified. The LIMIT clause places a limit on the number of\nrows that can be deleted. These clauses apply to single-table deletes,\nbut not multi-table deletes.\n\nMultiple-Table Syntax\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n    tbl_name[.*] [, tbl_name[.*]] ...\n    FROM table_references\n    [WHERE where_condition]\n\nDELETE [LOW_PRIORITY] [QUICK] [IGNORE]\n    FROM tbl_name[.*] [, tbl_name[.*]] ...\n    USING table_references\n    [WHERE where_condition]\n\nPrivileges\n\nYou need the DELETE privilege on a table to delete rows from it. You\nneed only the SELECT privilege for any columns that are only read, such\nas those named in the WHERE clause.\n\nPerformance\n\nWhen you do not need to know the number of deleted rows, the TRUNCATE\nTABLE statement is a faster way to empty a table than a DELETE\nstatement with no WHERE clause. Unlike DELETE, TRUNCATE TABLE cannot be\nused within a transaction or if you have a lock on the table. See [HELP\nTRUNCATE TABLE] and [HELP LOCK TABLES].\n\nThe speed of delete operations may also be affected by factors\ndiscussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/delete-optimization.html.\n\nTo ensure that a given DELETE statement does not take too much time,\nthe MySQL-specific LIMIT row_count clause for DELETE specifies the\nmaximum number of rows to be deleted. If the number of rows to delete\nis larger than the limit, repeat the DELETE statement until the number\nof affected rows is less than the LIMIT value.\n\nSubqueries\n\nYou cannot delete from a table and select from the same table in a\nsubquery.\n\nPartitioned Table Support\n\nDELETE supports explicit partition selection using the PARTITION\nclause, which takes a list of the comma-separated names of one or more\npartitions or subpartitions (or both) from which to select rows to be\ndropped. Partitions not included in the list are ignored. Given a\npartitioned table t with a partition named p0, executing the statement\nDELETE FROM t PARTITION (p0) has the same effect on the table as\nexecuting ALTER TABLE t TRUNCATE PARTITION (p0); in both cases, all\nrows in partition p0 are dropped.\n\nPARTITION can be used along with a WHERE condition, in which case the\ncondition is tested only on rows in the listed partitions. For example,\nDELETE FROM t PARTITION (p0) WHERE c < 5 deletes rows only from\npartition p0 for which the condition c < 5 is true; rows in any other\npartitions are not checked and thus not affected by the DELETE.\n\nThe PARTITION clause can also be used in multiple-table DELETE\nstatements. You can use up to one such option per table named in the\nFROM option.\n\nFor more information and examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/delete.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/delete.html'),(525,'DO',39,'Syntax:\nDO expr [, expr] ...\n\nDO executes the expressions but does not return any results. In most\nrespects, DO is shorthand for SELECT expr, ..., but has the advantage\nthat it is slightly faster when you do not care about the result.\n\nDO is useful primarily with functions that have side effects, such as\nRELEASE_LOCK().\n\nExample: This SELECT statement pauses, but also produces a result set:\n\nmysql> SELECT SLEEP(5);\n+----------+\n| SLEEP(5) |\n+----------+\n|        0 |\n+----------+\n1 row in set (5.02 sec)\n\nDO, on the other hand, pauses without producing a result set.:\n\nmysql> DO SLEEP(5);\nQuery OK, 0 rows affected (4.99 sec)\n\nThis could be useful, for example in a stored function or trigger,\nwhich prohibit statements that produce result sets.\n\nDO only executes expressions. It cannot be used in all cases where\nSELECT can be used. For example, DO id FROM t1 is invalid because it\nreferences a table.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/do.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/do.html'),(526,'HANDLER',39,'Syntax:\nHANDLER tbl_name OPEN [ [AS] alias]\n\nHANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)\n    [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }\n    [ WHERE where_condition ] [LIMIT ... ]\nHANDLER tbl_name READ { FIRST | NEXT }\n    [ WHERE where_condition ] [LIMIT ... ]\n\nHANDLER tbl_name CLOSE\n\nThe HANDLER statement provides direct access to table storage engine\ninterfaces. It is available for InnoDB and MyISAM tables.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/handler.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/handler.html'),(527,'INSERT',39,'Syntax:\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [(col_name [, col_name] ...)]\n    {VALUES | VALUE} (value_list) [, (value_list)] ...\n    [ON DUPLICATE KEY UPDATE assignment_list]\n\nINSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    SET assignment_list\n    [ON DUPLICATE KEY UPDATE assignment_list]\n\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [(col_name [, col_name] ...)]\n    SELECT ...\n    [ON DUPLICATE KEY UPDATE assignment_list]\n\nvalue:\n    {expr | DEFAULT}\n\nvalue_list:\n    value [, value] ...\n\nassignment:\n    col_name = value\n\nassignment_list:\n    assignment [, assignment] ...\n\nINSERT inserts new rows into an existing table. The INSERT ... VALUES\nand INSERT ... SET forms of the statement insert rows based on\nexplicitly specified values. The INSERT ... SELECT form inserts rows\nselected from another table or tables. INSERT with an ON DUPLICATE KEY\nUPDATE clause enables existing rows to be updated if a row to be\ninserted would cause a duplicate value in a UNIQUE index or PRIMARY\nKEY.\n\nFor additional information about INSERT ... SELECT and INSERT ... ON\nDUPLICATE KEY UPDATE, see [HELP INSERT SELECT], and\nhttps://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html.\n\nIn MySQL 5.7, the DELAYED keyword is accepted but ignored by the\nserver. For the reasons for this, see [HELP INSERT DELAYED],\n\nInserting into a table requires the INSERT privilege for the table. If\nthe ON DUPLICATE KEY UPDATE clause is used and a duplicate key causes\nan UPDATE to be performed instead, the statement requires the UPDATE\nprivilege for the columns to be updated. For columns that are read but\nnot modified you need only the SELECT privilege (such as for a column\nreferenced only on the right hand side of an col_name=expr assignment\nin an ON DUPLICATE KEY UPDATE clause).\n\nWhen inserting into a partitioned table, you can control which\npartitions and subpartitions accept new rows. The PARTITION clause\ntakes a list of the comma-separated names of one or more partitions or\nsubpartitions (or both) of the table. If any of the rows to be inserted\nby a given INSERT statement do not match one of the partitions listed,\nthe INSERT statement fails with the error Found a row not matching the\ngiven partition set. For more information and examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/insert.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/insert.html'),(528,'INSERT SELECT',39,'Syntax:\nINSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [(col_name [, col_name] ...)]\n    SELECT ...\n    [ON DUPLICATE KEY UPDATE assignment_list]\n\nvalue:\n    {expr | DEFAULT}\n\nassignment:\n    col_name = value\n\nassignment_list:\n    assignment [, assignment] ...\n\nWith INSERT ... SELECT, you can quickly insert many rows into a table\nfrom the result of a SELECT statement, which can select from one or\nmany tables. For example:\n\nINSERT INTO tbl_temp2 (fld_id)\n  SELECT tbl_temp1.fld_order_id\n  FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/insert-select.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/insert-select.html'),(529,'INSERT DELAYED',39,'Syntax:\nINSERT DELAYED ...\n\nThe DELAYED option for the INSERT statement is a MySQL extension to\nstandard SQL. In previous versions of MySQL, it can be used for certain\nkinds of tables (such as MyISAM), such that when a client uses INSERT\nDELAYED, it gets an okay from the server at once, and the row is queued\nto be inserted when the table is not in use by any other thread.\n\nDELAYED inserts and replaces were deprecated in MySQL 5.6. In MySQL\n5.7, DELAYED is not supported. The server recognizes but ignores the\nDELAYED keyword, handles the insert as a nondelayed insert, and\ngenerates an ER_WARN_LEGACY_SYNTAX_CONVERTED warning: INSERT DELAYED is\nno longer supported. The statement was converted to INSERT. The DELAYED\nkeyword is scheduled for removal in a future release.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/insert-delayed.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/insert-delayed.html'),(530,'LOAD DATA',39,'Syntax:\nLOAD DATA\n    [LOW_PRIORITY | CONCURRENT] [LOCAL]\n    INFILE \'file_name\'\n    [REPLACE | IGNORE]\n    INTO TABLE tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [CHARACTER SET charset_name]\n    [{FIELDS | COLUMNS}\n        [TERMINATED BY \'string\']\n        [[OPTIONALLY] ENCLOSED BY \'char\']\n        [ESCAPED BY \'char\']\n    ]\n    [LINES\n        [STARTING BY \'string\']\n        [TERMINATED BY \'string\']\n    ]\n    [IGNORE number {LINES | ROWS}]\n    [(col_name_or_user_var\n        [, col_name_or_user_var] ...)]\n    [SET col_name={expr | DEFAULT}\n        [, col_name={expr | DEFAULT}] ...]\n\nThe LOAD DATA statement reads rows from a text file into a table at a\nvery high speed. The file can be read from the server host or the\nclient host, depending on whether the LOCAL modifier is given. LOCAL\nalso affects data interpretation and error handling.\n\nLOAD DATA is the complement of SELECT ... INTO OUTFILE. (See\nhttps://dev.mysql.com/doc/refman/5.7/en/select-into.html.) To write\ndata from a table to a file, use SELECT ... INTO OUTFILE. To read the\nfile back into a table, use LOAD DATA. The syntax of the FIELDS and\nLINES clauses is the same for both statements.\n\nThe mysqlimport utility provides another way to load data files; it\noperates by sending a LOAD DATA statement to the server. See\nhttps://dev.mysql.com/doc/refman/5.7/en/mysqlimport.html.\n\nFor information about the efficiency of INSERT versus LOAD DATA and\nspeeding up LOAD DATA, see\nhttps://dev.mysql.com/doc/refman/5.7/en/insert-optimization.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/load-data.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/load-data.html'),(531,'LOAD XML',39,'Syntax:\nLOAD XML\n    [LOW_PRIORITY | CONCURRENT] [LOCAL]\n    INFILE \'file_name\'\n    [REPLACE | IGNORE]\n    INTO TABLE [db_name.]tbl_name\n    [CHARACTER SET charset_name]\n    [ROWS IDENTIFIED BY \'<tagname>\']\n    [IGNORE number {LINES | ROWS}]\n    [(field_name_or_user_var\n        [, field_name_or_user_var] ...)]\n    [SET col_name={expr | DEFAULT}\n        [, col_name={expr | DEFAULT}] ...]\n\nThe LOAD XML statement reads data from an XML file into a table. The\nfile_name must be given as a literal string. The tagname in the\noptional ROWS IDENTIFIED BY clause must also be given as a literal\nstring, and must be surrounded by angle brackets (< and >).\n\nLOAD XML acts as the complement of running the mysql client in XML\noutput mode (that is, starting the client with the --xml option). To\nwrite data from a table to an XML file, you can invoke the mysql client\nwith the --xml and -e options from the system shell, as shown here:\n\nshell> mysql --xml -e \'SELECT * FROM mydb.mytable\' > file.xml\n\nTo read the file back into a table, use LOAD XML. By default, the <row>\nelement is considered to be the equivalent of a database table row;\nthis can be changed using the ROWS IDENTIFIED BY clause.\n\nThis statement supports three different XML formats:\n\no Column names as attributes and column values as attribute values:\n\n<row column1=\"value1\" column2=\"value2\" .../>\n\no Column names as tags and column values as the content of these tags:\n\n<row>\n  <column1>value1</column1>\n  <column2>value2</column2>\n</row>\n\no Column names are the name attributes of <field> tags, and values are\n  the contents of these tags:\n\n<row>\n  <field name=\'column1\'>value1</field>\n  <field name=\'column2\'>value2</field>\n</row>\n\n  This is the format used by other MySQL tools, such as mysqldump.\n\nAll three formats can be used in the same XML file; the import routine\nautomatically detects the format for each row and interprets it\ncorrectly. Tags are matched based on the tag or attribute name and the\ncolumn name.\n\nIn MySQL 5.7, LOAD XML does not support CDATA sections in the source\nXML. This limitation is removed in MySQL 8.0. (Bug #30753708, Bug\n#98199)\n\nThe following clauses work essentially the same way for LOAD XML as\nthey do for LOAD DATA:\n\no LOW_PRIORITY or CONCURRENT\n\no LOCAL\n\no REPLACE or IGNORE\n\no CHARACTER SET\n\no SET\n\nSee [HELP LOAD DATA], for more information about these clauses.\n\n(field_name_or_user_var, ...) is a list of one or more comma-separated\nXML fields or user variables. The name of a user variable used for this\npurpose must match the name of a field from the XML file, prefixed with\n@. You can use field names to select only desired fields. User\nvariables can be employed to store the corresponding field values for\nsubsequent re-use.\n\nThe IGNORE number LINES or IGNORE number ROWS clause causes the first\nnumber rows in the XML file to be skipped. It is analogous to the LOAD\nDATA statement\'s IGNORE ... LINES clause.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/load-xml.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/load-xml.html'),(532,'REPLACE',39,'Syntax:\nREPLACE [LOW_PRIORITY | DELAYED]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [(col_name [, col_name] ...)]\n    {VALUES | VALUE} (value_list) [, (value_list)] ...\n\nREPLACE [LOW_PRIORITY | DELAYED]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    SET assignment_list\n\nREPLACE [LOW_PRIORITY | DELAYED]\n    [INTO] tbl_name\n    [PARTITION (partition_name [, partition_name] ...)]\n    [(col_name [, col_name] ...)]\n    SELECT ...\n\nvalue:\n    {expr | DEFAULT}\n\nvalue_list:\n    value [, value] ...\n\nassignment:\n    col_name = value\n\nassignment_list:\n    assignment [, assignment] ...\n\nREPLACE works exactly like INSERT, except that if an old row in the\ntable has the same value as a new row for a PRIMARY KEY or a UNIQUE\nindex, the old row is deleted before the new row is inserted. See [HELP\nINSERT].\n\nREPLACE is a MySQL extension to the SQL standard. It either inserts, or\ndeletes and inserts. For another MySQL extension to standard SQL---that\neither inserts or updates---see\nhttps://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html.\n\nDELAYED inserts and replaces were deprecated in MySQL 5.6. In MySQL\n5.7, DELAYED is not supported. The server recognizes but ignores the\nDELAYED keyword, handles the replace as a nondelayed replace, and\ngenerates an ER_WARN_LEGACY_SYNTAX_CONVERTED warning: REPLACE DELAYED\nis no longer supported. The statement was converted to REPLACE. The\nDELAYED keyword is scheduled for removal in a future release. release.\n\n*Note*:\n\nREPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE index.\nOtherwise, it becomes equivalent to INSERT, because there is no index\nto be used to determine whether a new row duplicates another.\n\nValues for all columns are taken from the values specified in the\nREPLACE statement. Any missing columns are set to their default values,\njust as happens for INSERT. You cannot refer to values from the current\nrow and use them in the new row. If you use an assignment such as SET\ncol_name = col_name + 1, the reference to the column name on the right\nhand side is treated as DEFAULT(col_name), so the assignment is\nequivalent to SET col_name = DEFAULT(col_name) + 1.\n\nTo use REPLACE, you must have both the INSERT and DELETE privileges for\nthe table.\n\nIf a generated column is replaced explicitly, the only permitted value\nis DEFAULT. For information about generated columns, see\nhttps://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.\nhtml.\n\nREPLACE supports explicit partition selection using the PARTITION\nclause with a list of comma-separated names of partitions,\nsubpartitions, or both. As with INSERT, if it is not possible to insert\nthe new row into any of these partitions or subpartitions, the REPLACE\nstatement fails with the error Found a row not matching the given\npartition set. For more information and examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/replace.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/replace.html'),(533,'SELECT',39,'Syntax:\nSELECT\n    [ALL | DISTINCT | DISTINCTROW ]\n    [HIGH_PRIORITY]\n    [STRAIGHT_JOIN]\n    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]\n    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]\n    select_expr [, select_expr] ...\n    [into_option]\n    [FROM table_references\n      [PARTITION partition_list]]\n    [WHERE where_condition]\n    [GROUP BY {col_name | expr | position}\n      [ASC | DESC], ... [WITH ROLLUP]]\n    [HAVING where_condition]\n    [ORDER BY {col_name | expr | position}\n      [ASC | DESC], ...]\n    [LIMIT {[offset,] row_count | row_count OFFSET offset}]\n    [PROCEDURE procedure_name(argument_list)]\n    [into_option]\n    [FOR UPDATE | LOCK IN SHARE MODE]\n\ninto_option: {\n    INTO OUTFILE \'file_name\'\n        [CHARACTER SET charset_name]\n        export_options\n  | INTO DUMPFILE \'file_name\'\n  | INTO var_name [, var_name] ...\n}\n\nSELECT is used to retrieve rows selected from one or more tables, and\ncan include UNION statements and subqueries. See [HELP UNION], and\nhttps://dev.mysql.com/doc/refman/5.7/en/subqueries.html.\n\nThe most commonly used clauses of SELECT statements are these:\n\no Each select_expr indicates a column that you want to retrieve. There\n  must be at least one select_expr.\n\no table_references indicates the table or tables from which to retrieve\n  rows. Its syntax is described in [HELP JOIN].\n\no SELECT supports explicit partition selection using the PARTITION\n  clause with a list of partitions or subpartitions (or both) following\n  the name of the table in a table_reference (see [HELP JOIN]). In this\n  case, rows are selected only from the partitions listed, and any\n  other partitions of the table are ignored. For more information and\n  examples, see\n  https://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\n  SELECT ... PARTITION from tables using storage engines such as MyISAM\n  that perform table-level locks (and thus partition locks) lock only\n  the partitions or subpartitions named by the PARTITION option.\n\n  For more information, see\n  https://dev.mysql.com/doc/refman/5.7/en/partitioning-limitations-lock\n  ing.html.\n\no The WHERE clause, if given, indicates the condition or conditions\n  that rows must satisfy to be selected. where_condition is an\n  expression that evaluates to true for each row to be selected. The\n  statement selects all rows if there is no WHERE clause.\n\n  In the WHERE expression, you can use any of the functions and\n  operators that MySQL supports, except for aggregate (group)\n  functions. See\n  https://dev.mysql.com/doc/refman/5.7/en/expressions.html, and\n  https://dev.mysql.com/doc/refman/5.7/en/functions.html.\n\nSELECT can also be used to retrieve rows computed without reference to\nany table.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/select.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/select.html'),(534,'DUAL',39,'You are permitted to specify DUAL as a dummy table name in situations\nwhere no tables are referenced:\n\nmysql> SELECT 1 + 1 FROM DUAL;\n        -> 2\n\nDUAL is purely for the convenience of people who require that all\nSELECT statements should have FROM and possibly other clauses. MySQL\nmay ignore the clauses. MySQL does not require FROM DUAL if no tables\nare referenced.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/select.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/select.html'),(535,'JOIN',39,'MySQL supports the following JOIN syntax for the table_references part\nof SELECT statements and multiple-table DELETE and UPDATE statements:\n\ntable_references:\n    escaped_table_reference [, escaped_table_reference] ...\n\nescaped_table_reference: {\n    table_reference\n  | { OJ table_reference }\n}\n\ntable_reference: {\n    table_factor\n  | joined_table\n}\n\ntable_factor: {\n    tbl_name [PARTITION (partition_names)]\n        [[AS] alias] [index_hint_list]\n  | table_subquery [AS] alias\n  | ( table_references )\n}\n\njoined_table: {\n    table_reference [INNER | CROSS] JOIN table_factor [join_specification]\n  | table_reference STRAIGHT_JOIN table_factor\n  | table_reference STRAIGHT_JOIN table_factor ON search_condition\n  | table_reference {LEFT|RIGHT} [OUTER] JOIN table_reference join_specification\n  | table_reference NATURAL [{LEFT|RIGHT} [OUTER]] JOIN table_factor\n}\n\njoin_specification: {\n    ON search_condition\n  | USING (join_column_list)\n}\n\njoin_column_list:\n    column_name [, column_name] ...\n\nindex_hint_list:\n    index_hint [, index_hint] ...\n\nindex_hint: {\n    USE {INDEX|KEY}\n      [FOR {JOIN|ORDER BY|GROUP BY}] ([index_list])\n  | {IGNORE|FORCE} {INDEX|KEY}\n      [FOR {JOIN|ORDER BY|GROUP BY}] (index_list)\n}\n\nindex_list:\n    index_name [, index_name] ...\n\nA table reference is also known as a join expression.\n\nA table reference (when it refers to a partitioned table) may contain a\nPARTITION clause, including a list of comma-separated partitions,\nsubpartitions, or both. This option follows the name of the table and\nprecedes any alias declaration. The effect of this option is that rows\nare selected only from the listed partitions or subpartitions. Any\npartitions or subpartitions not named in the list are ignored. For more\ninformation and examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nThe syntax of table_factor is extended in MySQL in comparison with\nstandard SQL. The standard accepts only table_reference, not a list of\nthem inside a pair of parentheses.\n\nThis is a conservative extension if each comma in a list of\ntable_reference items is considered as equivalent to an inner join. For\nexample:\n\nSELECT * FROM t1 LEFT JOIN (t2, t3, t4)\n                 ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)\n\nis equivalent to:\n\nSELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)\n                 ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)\n\nIn MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents\n(they can replace each other). In standard SQL, they are not\nequivalent. INNER JOIN is used with an ON clause, CROSS JOIN is used\notherwise.\n\nIn general, parentheses can be ignored in join expressions containing\nonly inner join operations. MySQL also supports nested joins. See\nhttps://dev.mysql.com/doc/refman/5.7/en/nested-join-optimization.html.\n\nIndex hints can be specified to affect how the MySQL optimizer makes\nuse of indexes. For more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/index-hints.html. Optimizer\nhints and the optimizer_switch system variable are other ways to\ninfluence optimizer use of indexes. See\nhttps://dev.mysql.com/doc/refman/5.7/en/optimizer-hints.html, and\nhttps://dev.mysql.com/doc/refman/5.7/en/switchable-optimizations.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/join.html\n\n','SELECT left_tbl.*\n  FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id\n  WHERE right_tbl.id IS NULL;\n','https://dev.mysql.com/doc/refman/5.7/en/join.html'),(536,'UNION',39,'Syntax:\nSELECT ...\nUNION [ALL | DISTINCT] SELECT ...\n[UNION [ALL | DISTINCT] SELECT ...]\n\nUNION combines the result from multiple SELECT statements into a single\nresult set. Example:\n\nmysql> SELECT 1, 2;\n+---+---+\n| 1 | 2 |\n+---+---+\n| 1 | 2 |\n+---+---+\nmysql> SELECT \'a\', \'b\';\n+---+---+\n| a | b |\n+---+---+\n| a | b |\n+---+---+\nmysql> SELECT 1, 2 UNION SELECT \'a\', \'b\';\n+---+---+\n| 1 | 2 |\n+---+---+\n| 1 | 2 |\n| a | b |\n+---+---+\n\no https://dev.mysql.com/doc/refman/5.7/en/union.html#union-result-set\n\no https://dev.mysql.com/doc/refman/5.7/en/union.html#union-distinct-all\n\no https://dev.mysql.com/doc/refman/5.7/en/union.html#union-order-by-lim\n  it\n\no https://dev.mysql.com/doc/refman/5.7/en/union.html#union-restrictions\n\nResult Set Column Names and Data Types\n\nThe column names for a UNION result set are taken from the column names\nof the first SELECT statement.\n\nSelected columns listed in corresponding positions of each SELECT\nstatement should have the same data type. For example, the first column\nselected by the first statement should have the same type as the first\ncolumn selected by the other statements. If the data types of\ncorresponding SELECT columns do not match, the types and lengths of the\ncolumns in the UNION result take into account the values retrieved by\nall the SELECT statements. For example, consider the following, where\nthe column length is not constrained to the length of the value from\nthe first SELECT:\n\nmysql> SELECT REPEAT(\'a\',1) UNION SELECT REPEAT(\'b\',20);\n+----------------------+\n| REPEAT(\'a\',1)        |\n+----------------------+\n| a                    |\n| bbbbbbbbbbbbbbbbbbbb |\n+----------------------+\n\nUNION DISTINCT and UNION ALL\n\nBy default, duplicate rows are removed from UNION results. The optional\nDISTINCT keyword has the same effect but makes it explicit. With the\noptional ALL keyword, duplicate-row removal does not occur and the\nresult includes all matching rows from all the SELECT statements.\n\nYou can mix UNION ALL and UNION DISTINCT in the same query. Mixed UNION\ntypes are treated such that a DISTINCT union overrides any ALL union to\nits left. A DISTINCT union can be produced explicitly by using UNION\nDISTINCT or implicitly by using UNION with no following DISTINCT or ALL\nkeyword.\n\nORDER BY and LIMIT in Unions\n\nTo apply an ORDER BY or LIMIT clause to an individual SELECT,\nparenthesize the SELECT and place the clause inside the parentheses:\n\n(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)\nUNION\n(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);\n\n*Note*:\n\nPrevious versions of MySQL may permit such statements without\nparentheses. In MySQL 5.7, the requirement for parentheses is enforced.\n\nUse of ORDER BY for individual SELECT statements implies nothing about\nthe order in which the rows appear in the final result because UNION by\ndefault produces an unordered set of rows. Therefore, ORDER BY in this\ncontext typically is used in conjunction with LIMIT, to determine the\nsubset of the selected rows to retrieve for the SELECT, even though it\ndoes not necessarily affect the order of those rows in the final UNION\nresult. If ORDER BY appears without LIMIT in a SELECT, it is optimized\naway because it has no effect.\n\nTo use an ORDER BY or LIMIT clause to sort or limit the entire UNION\nresult, parenthesize the individual SELECT statements and place the\nORDER BY or LIMIT after the last one:\n\n(SELECT a FROM t1 WHERE a=10 AND B=1)\nUNION\n(SELECT a FROM t2 WHERE a=11 AND B=2)\nORDER BY a LIMIT 10;\n\nA statement without parentheses is equivalent to one parenthesized as\njust shown.\n\nThis kind of ORDER BY cannot use column references that include a table\nname (that is, names in tbl_name.col_name format). Instead, provide a\ncolumn alias in the first SELECT statement and refer to the alias in\nthe ORDER BY. (Alternatively, refer to the column in the ORDER BY using\nits column position. However, use of column positions is deprecated.)\n\nAlso, if a column to be sorted is aliased, the ORDER BY clause must\nrefer to the alias, not the column name. The first of the following\nstatements is permitted, but the second fails with an Unknown column\n\'a\' in \'order clause\' error:\n\n(SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY b;\n(SELECT a AS b FROM t) UNION (SELECT ...) ORDER BY a;\n\nTo cause rows in a UNION result to consist of the sets of rows\nretrieved by each SELECT one after the other, select an additional\ncolumn in each SELECT to use as a sort column and add an ORDER BY that\nsorts on that column following the last SELECT:\n\n(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)\nUNION\n(SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col;\n\nTo additionally maintain sort order within individual SELECT results,\nadd a secondary column to the ORDER BY clause:\n\n(SELECT 1 AS sort_col, col1a, col1b, ... FROM t1)\nUNION\n(SELECT 2, col2a, col2b, ... FROM t2) ORDER BY sort_col, col1a;\n\nUse of an additional column also enables you to determine which SELECT\neach row comes from. Extra columns can provide other identifying\ninformation as well, such as a string that indicates a table name.\n\nUNION queries with an aggregate function in an ORDER BY clause are\nrejected with an ER_AGGREGATE_ORDER_FOR_UNION\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_aggregate_order_for_union) error. Example:\n\nSELECT 1 AS foo UNION SELECT 2 ORDER BY MAX(1);\n\nUNION Restrictions\n\nIn a UNION, the SELECT statements are normal select statements, but\nwith the following restrictions:\n\no HIGH_PRIORITY in the first SELECT has no effect. HIGH_PRIORITY in any\n  subsequent SELECT produces a syntax error.\n\no Only the last SELECT statement can use an INTO clause. However, the\n  entire UNION result is written to the INTO output destination.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/union.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/union.html'),(537,'UPDATE',39,'Syntax:\nUPDATE is a DML statement that modifies rows in a table.\n\nSingle-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_reference\n    SET assignment_list\n    [WHERE where_condition]\n    [ORDER BY ...]\n    [LIMIT row_count]\n\nvalue:\n    {expr | DEFAULT}\n\nassignment:\n    col_name = value\n\nassignment_list:\n    assignment [, assignment] ...\n\nMultiple-table syntax:\n\nUPDATE [LOW_PRIORITY] [IGNORE] table_references\n    SET assignment_list\n    [WHERE where_condition]\n\nFor the single-table syntax, the UPDATE statement updates columns of\nexisting rows in the named table with new values. The SET clause\nindicates which columns to modify and the values they should be given.\nEach value can be given as an expression, or the keyword DEFAULT to set\na column explicitly to its default value. The WHERE clause, if given,\nspecifies the conditions that identify which rows to update. With no\nWHERE clause, all rows are updated. If the ORDER BY clause is\nspecified, the rows are updated in the order that is specified. The\nLIMIT clause places a limit on the number of rows that can be updated.\n\nFor the multiple-table syntax, UPDATE updates rows in each table named\nin table_references that satisfy the conditions. Each matching row is\nupdated once, even if it matches the conditions multiple times. For\nmultiple-table syntax, ORDER BY and LIMIT cannot be used.\n\nFor partitioned tables, both the single-single and multiple-table forms\nof this statement support the use of a PARTITION clause as part of a\ntable reference. This option takes a list of one or more partitions or\nsubpartitions (or both). Only the partitions (or subpartitions) listed\nare checked for matches, and a row that is not in any of these\npartitions or subpartitions is not updated, whether it satisfies the\nwhere_condition or not.\n\n*Note*:\n\nUnlike the case when using PARTITION with an INSERT or REPLACE\nstatement, an otherwise valid UPDATE ... PARTITION statement is\nconsidered successful even if no rows in the listed partitions (or\nsubpartitions) match the where_condition.\n\nFor more information and examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-selection.html.\n\nwhere_condition is an expression that evaluates to true for each row to\nbe updated. For expression syntax, see\nhttps://dev.mysql.com/doc/refman/5.7/en/expressions.html.\n\ntable_references and where_condition are specified as described in\nhttps://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nYou need the UPDATE privilege only for columns referenced in an UPDATE\nthat are actually updated. You need only the SELECT privilege for any\ncolumns that are read but not modified.\n\nThe UPDATE statement supports the following modifiers:\n\no With the LOW_PRIORITY modifier, execution of the UPDATE is delayed\n  until no other clients are reading from the table. This affects only\n  storage engines that use only table-level locking (such as MyISAM,\n  MEMORY, and MERGE).\n\no With the IGNORE modifier, the update statement does not abort even if\n  errors occur during the update. Rows for which duplicate-key\n  conflicts occur on a unique key value are not updated. Rows updated\n  to values that would cause data conversion errors are updated to the\n  closest valid values instead. For more information, see\n  https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#ignore-effect-o\n  n-execution.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/update.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/update.html'),(538,'START TRANSACTION',40,'Syntax:\nSTART TRANSACTION\n    [transaction_characteristic [, transaction_characteristic] ...]\n\ntransaction_characteristic: {\n    WITH CONSISTENT SNAPSHOT\n  | READ WRITE\n  | READ ONLY\n}\n\nBEGIN [WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\nThese statements provide control over use of transactions:\n\no START TRANSACTION or BEGIN start a new transaction.\n\no COMMIT commits the current transaction, making its changes permanent.\n\no ROLLBACK rolls back the current transaction, canceling its changes.\n\no SET autocommit disables or enables the default autocommit mode for\n  the current session.\n\nBy default, MySQL runs with autocommit mode enabled. This means that,\nwhen not otherwise inside a transaction, each statement is atomic, as\nif it were surrounded by START TRANSACTION and COMMIT. You cannot use\nROLLBACK to undo the effect; however, if an error occurs during\nstatement execution, the statement is rolled back.\n\nTo disable autocommit mode implicitly for a single series of\nstatements, use the START TRANSACTION statement:\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nWith START TRANSACTION, autocommit remains disabled until you end the\ntransaction with COMMIT or ROLLBACK. The autocommit mode then reverts\nto its previous state.\n\nSTART TRANSACTION permits several modifiers that control transaction\ncharacteristics. To specify multiple modifiers, separate them by\ncommas.\n\no The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for\n  storage engines that are capable of it. This applies only to InnoDB.\n  The effect is the same as issuing a START TRANSACTION followed by a\n  SELECT from any InnoDB table. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html.\n  The WITH CONSISTENT SNAPSHOT modifier does not change the current\n  transaction isolation level, so it provides a consistent snapshot\n  only if the current isolation level is one that permits a consistent\n  read. The only isolation level that permits a consistent read is\n  REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT\n  SNAPSHOT clause is ignored. As of MySQL 5.7.2, a warning is generated\n  when the WITH CONSISTENT SNAPSHOT clause is ignored.\n\no The READ WRITE and READ ONLY modifiers set the transaction access\n  mode. They permit or prohibit changes to tables used in the\n  transaction. The READ ONLY restriction prevents the transaction from\n  modifying or locking both transactional and nontransactional tables\n  that are visible to other transactions; the transaction can still\n  modify or lock temporary tables.\n\n  MySQL enables extra optimizations for queries on InnoDB tables when\n  the transaction is known to be read-only. Specifying READ ONLY\n  ensures these optimizations are applied in cases where the read-only\n  status cannot be determined automatically. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-performance-ro-txn.htm\n  l for more information.\n\n  If no access mode is specified, the default mode applies. Unless the\n  default has been changed, it is read/write. It is not permitted to\n  specify both READ WRITE and READ ONLY in the same statement.\n\n  In read-only mode, it remains possible to change tables created with\n  the TEMPORARY keyword using DML statements. Changes made with DDL\n  statements are not permitted, just as with permanent tables.\n\n  For additional information about transaction access mode, including\n  ways to change the default mode, see [HELP SET TRANSACTION].\n\n  If the read_only system variable is enabled, explicitly starting a\n  transaction with START TRANSACTION READ WRITE requires the SUPER\n  privilege.\n\n*Important*:\n\nMany APIs used for writing MySQL client applications (such as JDBC)\nprovide their own methods for starting transactions that can (and\nsometimes should) be used instead of sending a START TRANSACTION\nstatement from the client. See\nhttps://dev.mysql.com/doc/refman/5.7/en/connectors-apis.html, or the\ndocumentation for your API, for more information.\n\nTo disable autocommit mode explicitly, use the following statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to\nzero, changes to transaction-safe tables (such as those for InnoDB or\nNDB) are not made permanent immediately. You must use COMMIT to store\nyour changes to disk or ROLLBACK to ignore the changes.\n\nautocommit is a session variable and must be set for each session. To\ndisable autocommit mode for each new connection, see the description of\nthe autocommit system variable at\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nBEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for\ninitiating a transaction. START TRANSACTION is standard SQL syntax, is\nthe recommended way to start an ad-hoc transaction, and permits\nmodifiers that BEGIN does not.\n\nThe BEGIN statement differs from the use of the BEGIN keyword that\nstarts a BEGIN ... END compound statement. The latter does not begin a\ntransaction. See [HELP BEGIN END].\n\n*Note*:\n\nWithin all stored programs (stored procedures and functions, triggers,\nand events), the parser treats BEGIN [WORK] as the beginning of a BEGIN\n... END block. Begin a transaction in this context with START\nTRANSACTION instead.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are\nthe CHAIN and RELEASE clauses. CHAIN and RELEASE can be used for\nadditional control over transaction completion. The value of the\ncompletion_type system variable determines the default completion\nbehavior. See\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the\ncurrent one ends, and the new transaction has the same isolation level\nas the just-terminated transaction. The new transaction also uses the\nsame access mode (READ WRITE or READ ONLY) as the just-terminated\ntransaction. The RELEASE clause causes the server to disconnect the\ncurrent client session after terminating the current transaction.\nIncluding the NO keyword suppresses CHAIN or RELEASE completion, which\ncan be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/commit.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/commit.html'),(539,'BEGIN',40,'Syntax:\nSTART TRANSACTION\n    [transaction_characteristic [, transaction_characteristic] ...]\n\ntransaction_characteristic: {\n    WITH CONSISTENT SNAPSHOT\n  | READ WRITE\n  | READ ONLY\n}\n\nBEGIN [WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\nThese statements provide control over use of transactions:\n\no START TRANSACTION or BEGIN start a new transaction.\n\no COMMIT commits the current transaction, making its changes permanent.\n\no ROLLBACK rolls back the current transaction, canceling its changes.\n\no SET autocommit disables or enables the default autocommit mode for\n  the current session.\n\nBy default, MySQL runs with autocommit mode enabled. This means that,\nwhen not otherwise inside a transaction, each statement is atomic, as\nif it were surrounded by START TRANSACTION and COMMIT. You cannot use\nROLLBACK to undo the effect; however, if an error occurs during\nstatement execution, the statement is rolled back.\n\nTo disable autocommit mode implicitly for a single series of\nstatements, use the START TRANSACTION statement:\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nWith START TRANSACTION, autocommit remains disabled until you end the\ntransaction with COMMIT or ROLLBACK. The autocommit mode then reverts\nto its previous state.\n\nSTART TRANSACTION permits several modifiers that control transaction\ncharacteristics. To specify multiple modifiers, separate them by\ncommas.\n\no The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for\n  storage engines that are capable of it. This applies only to InnoDB.\n  The effect is the same as issuing a START TRANSACTION followed by a\n  SELECT from any InnoDB table. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html.\n  The WITH CONSISTENT SNAPSHOT modifier does not change the current\n  transaction isolation level, so it provides a consistent snapshot\n  only if the current isolation level is one that permits a consistent\n  read. The only isolation level that permits a consistent read is\n  REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT\n  SNAPSHOT clause is ignored. As of MySQL 5.7.2, a warning is generated\n  when the WITH CONSISTENT SNAPSHOT clause is ignored.\n\no The READ WRITE and READ ONLY modifiers set the transaction access\n  mode. They permit or prohibit changes to tables used in the\n  transaction. The READ ONLY restriction prevents the transaction from\n  modifying or locking both transactional and nontransactional tables\n  that are visible to other transactions; the transaction can still\n  modify or lock temporary tables.\n\n  MySQL enables extra optimizations for queries on InnoDB tables when\n  the transaction is known to be read-only. Specifying READ ONLY\n  ensures these optimizations are applied in cases where the read-only\n  status cannot be determined automatically. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-performance-ro-txn.htm\n  l for more information.\n\n  If no access mode is specified, the default mode applies. Unless the\n  default has been changed, it is read/write. It is not permitted to\n  specify both READ WRITE and READ ONLY in the same statement.\n\n  In read-only mode, it remains possible to change tables created with\n  the TEMPORARY keyword using DML statements. Changes made with DDL\n  statements are not permitted, just as with permanent tables.\n\n  For additional information about transaction access mode, including\n  ways to change the default mode, see [HELP SET TRANSACTION].\n\n  If the read_only system variable is enabled, explicitly starting a\n  transaction with START TRANSACTION READ WRITE requires the SUPER\n  privilege.\n\n*Important*:\n\nMany APIs used for writing MySQL client applications (such as JDBC)\nprovide their own methods for starting transactions that can (and\nsometimes should) be used instead of sending a START TRANSACTION\nstatement from the client. See\nhttps://dev.mysql.com/doc/refman/5.7/en/connectors-apis.html, or the\ndocumentation for your API, for more information.\n\nTo disable autocommit mode explicitly, use the following statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to\nzero, changes to transaction-safe tables (such as those for InnoDB or\nNDB) are not made permanent immediately. You must use COMMIT to store\nyour changes to disk or ROLLBACK to ignore the changes.\n\nautocommit is a session variable and must be set for each session. To\ndisable autocommit mode for each new connection, see the description of\nthe autocommit system variable at\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nBEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for\ninitiating a transaction. START TRANSACTION is standard SQL syntax, is\nthe recommended way to start an ad-hoc transaction, and permits\nmodifiers that BEGIN does not.\n\nThe BEGIN statement differs from the use of the BEGIN keyword that\nstarts a BEGIN ... END compound statement. The latter does not begin a\ntransaction. See [HELP BEGIN END].\n\n*Note*:\n\nWithin all stored programs (stored procedures and functions, triggers,\nand events), the parser treats BEGIN [WORK] as the beginning of a BEGIN\n... END block. Begin a transaction in this context with START\nTRANSACTION instead.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are\nthe CHAIN and RELEASE clauses. CHAIN and RELEASE can be used for\nadditional control over transaction completion. The value of the\ncompletion_type system variable determines the default completion\nbehavior. See\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the\ncurrent one ends, and the new transaction has the same isolation level\nas the just-terminated transaction. The new transaction also uses the\nsame access mode (READ WRITE or READ ONLY) as the just-terminated\ntransaction. The RELEASE clause causes the server to disconnect the\ncurrent client session after terminating the current transaction.\nIncluding the NO keyword suppresses CHAIN or RELEASE completion, which\ncan be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/commit.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/commit.html'),(540,'COMMIT',40,'Syntax:\nSTART TRANSACTION\n    [transaction_characteristic [, transaction_characteristic] ...]\n\ntransaction_characteristic: {\n    WITH CONSISTENT SNAPSHOT\n  | READ WRITE\n  | READ ONLY\n}\n\nBEGIN [WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\nThese statements provide control over use of transactions:\n\no START TRANSACTION or BEGIN start a new transaction.\n\no COMMIT commits the current transaction, making its changes permanent.\n\no ROLLBACK rolls back the current transaction, canceling its changes.\n\no SET autocommit disables or enables the default autocommit mode for\n  the current session.\n\nBy default, MySQL runs with autocommit mode enabled. This means that,\nwhen not otherwise inside a transaction, each statement is atomic, as\nif it were surrounded by START TRANSACTION and COMMIT. You cannot use\nROLLBACK to undo the effect; however, if an error occurs during\nstatement execution, the statement is rolled back.\n\nTo disable autocommit mode implicitly for a single series of\nstatements, use the START TRANSACTION statement:\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nWith START TRANSACTION, autocommit remains disabled until you end the\ntransaction with COMMIT or ROLLBACK. The autocommit mode then reverts\nto its previous state.\n\nSTART TRANSACTION permits several modifiers that control transaction\ncharacteristics. To specify multiple modifiers, separate them by\ncommas.\n\no The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for\n  storage engines that are capable of it. This applies only to InnoDB.\n  The effect is the same as issuing a START TRANSACTION followed by a\n  SELECT from any InnoDB table. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html.\n  The WITH CONSISTENT SNAPSHOT modifier does not change the current\n  transaction isolation level, so it provides a consistent snapshot\n  only if the current isolation level is one that permits a consistent\n  read. The only isolation level that permits a consistent read is\n  REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT\n  SNAPSHOT clause is ignored. As of MySQL 5.7.2, a warning is generated\n  when the WITH CONSISTENT SNAPSHOT clause is ignored.\n\no The READ WRITE and READ ONLY modifiers set the transaction access\n  mode. They permit or prohibit changes to tables used in the\n  transaction. The READ ONLY restriction prevents the transaction from\n  modifying or locking both transactional and nontransactional tables\n  that are visible to other transactions; the transaction can still\n  modify or lock temporary tables.\n\n  MySQL enables extra optimizations for queries on InnoDB tables when\n  the transaction is known to be read-only. Specifying READ ONLY\n  ensures these optimizations are applied in cases where the read-only\n  status cannot be determined automatically. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-performance-ro-txn.htm\n  l for more information.\n\n  If no access mode is specified, the default mode applies. Unless the\n  default has been changed, it is read/write. It is not permitted to\n  specify both READ WRITE and READ ONLY in the same statement.\n\n  In read-only mode, it remains possible to change tables created with\n  the TEMPORARY keyword using DML statements. Changes made with DDL\n  statements are not permitted, just as with permanent tables.\n\n  For additional information about transaction access mode, including\n  ways to change the default mode, see [HELP SET TRANSACTION].\n\n  If the read_only system variable is enabled, explicitly starting a\n  transaction with START TRANSACTION READ WRITE requires the SUPER\n  privilege.\n\n*Important*:\n\nMany APIs used for writing MySQL client applications (such as JDBC)\nprovide their own methods for starting transactions that can (and\nsometimes should) be used instead of sending a START TRANSACTION\nstatement from the client. See\nhttps://dev.mysql.com/doc/refman/5.7/en/connectors-apis.html, or the\ndocumentation for your API, for more information.\n\nTo disable autocommit mode explicitly, use the following statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to\nzero, changes to transaction-safe tables (such as those for InnoDB or\nNDB) are not made permanent immediately. You must use COMMIT to store\nyour changes to disk or ROLLBACK to ignore the changes.\n\nautocommit is a session variable and must be set for each session. To\ndisable autocommit mode for each new connection, see the description of\nthe autocommit system variable at\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nBEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for\ninitiating a transaction. START TRANSACTION is standard SQL syntax, is\nthe recommended way to start an ad-hoc transaction, and permits\nmodifiers that BEGIN does not.\n\nThe BEGIN statement differs from the use of the BEGIN keyword that\nstarts a BEGIN ... END compound statement. The latter does not begin a\ntransaction. See [HELP BEGIN END].\n\n*Note*:\n\nWithin all stored programs (stored procedures and functions, triggers,\nand events), the parser treats BEGIN [WORK] as the beginning of a BEGIN\n... END block. Begin a transaction in this context with START\nTRANSACTION instead.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are\nthe CHAIN and RELEASE clauses. CHAIN and RELEASE can be used for\nadditional control over transaction completion. The value of the\ncompletion_type system variable determines the default completion\nbehavior. See\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the\ncurrent one ends, and the new transaction has the same isolation level\nas the just-terminated transaction. The new transaction also uses the\nsame access mode (READ WRITE or READ ONLY) as the just-terminated\ntransaction. The RELEASE clause causes the server to disconnect the\ncurrent client session after terminating the current transaction.\nIncluding the NO keyword suppresses CHAIN or RELEASE completion, which\ncan be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/commit.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/commit.html'),(541,'ROLLBACK',40,'Syntax:\nSTART TRANSACTION\n    [transaction_characteristic [, transaction_characteristic] ...]\n\ntransaction_characteristic: {\n    WITH CONSISTENT SNAPSHOT\n  | READ WRITE\n  | READ ONLY\n}\n\nBEGIN [WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\nThese statements provide control over use of transactions:\n\no START TRANSACTION or BEGIN start a new transaction.\n\no COMMIT commits the current transaction, making its changes permanent.\n\no ROLLBACK rolls back the current transaction, canceling its changes.\n\no SET autocommit disables or enables the default autocommit mode for\n  the current session.\n\nBy default, MySQL runs with autocommit mode enabled. This means that,\nwhen not otherwise inside a transaction, each statement is atomic, as\nif it were surrounded by START TRANSACTION and COMMIT. You cannot use\nROLLBACK to undo the effect; however, if an error occurs during\nstatement execution, the statement is rolled back.\n\nTo disable autocommit mode implicitly for a single series of\nstatements, use the START TRANSACTION statement:\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nWith START TRANSACTION, autocommit remains disabled until you end the\ntransaction with COMMIT or ROLLBACK. The autocommit mode then reverts\nto its previous state.\n\nSTART TRANSACTION permits several modifiers that control transaction\ncharacteristics. To specify multiple modifiers, separate them by\ncommas.\n\no The WITH CONSISTENT SNAPSHOT modifier starts a consistent read for\n  storage engines that are capable of it. This applies only to InnoDB.\n  The effect is the same as issuing a START TRANSACTION followed by a\n  SELECT from any InnoDB table. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-consistent-read.html.\n  The WITH CONSISTENT SNAPSHOT modifier does not change the current\n  transaction isolation level, so it provides a consistent snapshot\n  only if the current isolation level is one that permits a consistent\n  read. The only isolation level that permits a consistent read is\n  REPEATABLE READ. For all other isolation levels, the WITH CONSISTENT\n  SNAPSHOT clause is ignored. As of MySQL 5.7.2, a warning is generated\n  when the WITH CONSISTENT SNAPSHOT clause is ignored.\n\no The READ WRITE and READ ONLY modifiers set the transaction access\n  mode. They permit or prohibit changes to tables used in the\n  transaction. The READ ONLY restriction prevents the transaction from\n  modifying or locking both transactional and nontransactional tables\n  that are visible to other transactions; the transaction can still\n  modify or lock temporary tables.\n\n  MySQL enables extra optimizations for queries on InnoDB tables when\n  the transaction is known to be read-only. Specifying READ ONLY\n  ensures these optimizations are applied in cases where the read-only\n  status cannot be determined automatically. See\n  https://dev.mysql.com/doc/refman/5.7/en/innodb-performance-ro-txn.htm\n  l for more information.\n\n  If no access mode is specified, the default mode applies. Unless the\n  default has been changed, it is read/write. It is not permitted to\n  specify both READ WRITE and READ ONLY in the same statement.\n\n  In read-only mode, it remains possible to change tables created with\n  the TEMPORARY keyword using DML statements. Changes made with DDL\n  statements are not permitted, just as with permanent tables.\n\n  For additional information about transaction access mode, including\n  ways to change the default mode, see [HELP SET TRANSACTION].\n\n  If the read_only system variable is enabled, explicitly starting a\n  transaction with START TRANSACTION READ WRITE requires the SUPER\n  privilege.\n\n*Important*:\n\nMany APIs used for writing MySQL client applications (such as JDBC)\nprovide their own methods for starting transactions that can (and\nsometimes should) be used instead of sending a START TRANSACTION\nstatement from the client. See\nhttps://dev.mysql.com/doc/refman/5.7/en/connectors-apis.html, or the\ndocumentation for your API, for more information.\n\nTo disable autocommit mode explicitly, use the following statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to\nzero, changes to transaction-safe tables (such as those for InnoDB or\nNDB) are not made permanent immediately. You must use COMMIT to store\nyour changes to disk or ROLLBACK to ignore the changes.\n\nautocommit is a session variable and must be set for each session. To\ndisable autocommit mode for each new connection, see the description of\nthe autocommit system variable at\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nBEGIN and BEGIN WORK are supported as aliases of START TRANSACTION for\ninitiating a transaction. START TRANSACTION is standard SQL syntax, is\nthe recommended way to start an ad-hoc transaction, and permits\nmodifiers that BEGIN does not.\n\nThe BEGIN statement differs from the use of the BEGIN keyword that\nstarts a BEGIN ... END compound statement. The latter does not begin a\ntransaction. See [HELP BEGIN END].\n\n*Note*:\n\nWithin all stored programs (stored procedures and functions, triggers,\nand events), the parser treats BEGIN [WORK] as the beginning of a BEGIN\n... END block. Begin a transaction in this context with START\nTRANSACTION instead.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are\nthe CHAIN and RELEASE clauses. CHAIN and RELEASE can be used for\nadditional control over transaction completion. The value of the\ncompletion_type system variable determines the default completion\nbehavior. See\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the\ncurrent one ends, and the new transaction has the same isolation level\nas the just-terminated transaction. The new transaction also uses the\nsame access mode (READ WRITE or READ ONLY) as the just-terminated\ntransaction. The RELEASE clause causes the server to disconnect the\ncurrent client session after terminating the current transaction.\nIncluding the NO keyword suppresses CHAIN or RELEASE completion, which\ncan be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/commit.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/commit.html'),(542,'SAVEPOINT',40,'Syntax:\nSAVEPOINT identifier\nROLLBACK [WORK] TO [SAVEPOINT] identifier\nRELEASE SAVEPOINT identifier\n\nInnoDB supports the SQL statements SAVEPOINT, ROLLBACK TO SAVEPOINT,\nRELEASE SAVEPOINT and the optional WORK keyword for ROLLBACK.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/savepoint.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/savepoint.html'),(543,'ROLLBACK TO SAVEPOINT',40,'Syntax:\nSAVEPOINT identifier\nROLLBACK [WORK] TO [SAVEPOINT] identifier\nRELEASE SAVEPOINT identifier\n\nInnoDB supports the SQL statements SAVEPOINT, ROLLBACK TO SAVEPOINT,\nRELEASE SAVEPOINT and the optional WORK keyword for ROLLBACK.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/savepoint.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/savepoint.html'),(544,'RELEASE SAVEPOINT',40,'Syntax:\nSAVEPOINT identifier\nROLLBACK [WORK] TO [SAVEPOINT] identifier\nRELEASE SAVEPOINT identifier\n\nInnoDB supports the SQL statements SAVEPOINT, ROLLBACK TO SAVEPOINT,\nRELEASE SAVEPOINT and the optional WORK keyword for ROLLBACK.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/savepoint.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/savepoint.html'),(545,'LOCK TABLES',40,'Syntax:\nLOCK TABLES\n    tbl_name [[AS] alias] lock_type\n    [, tbl_name [[AS] alias] lock_type] ...\n\nlock_type: {\n    READ [LOCAL]\n  | [LOW_PRIORITY] WRITE\n}\n\nUNLOCK TABLES\n\nMySQL enables client sessions to acquire table locks explicitly for the\npurpose of cooperating with other sessions for access to tables, or to\nprevent other sessions from modifying tables during periods when a\nsession requires exclusive access to them. A session can acquire or\nrelease locks only for itself. One session cannot acquire locks for\nanother session or release locks held by another session.\n\nLocks may be used to emulate transactions or to get more speed when\nupdating tables. This is explained in more detail in\nhttps://dev.mysql.com/doc/refman/5.7/en/lock-tables.html#lock-tables-re\nstrictions.\n\nLOCK TABLES explicitly acquires table locks for the current client\nsession. Table locks can be acquired for base tables or views. You must\nhave the LOCK TABLES privilege, and the SELECT privilege for each\nobject to be locked.\n\nFor view locking, LOCK TABLES adds all base tables used in the view to\nthe set of tables to be locked and locks them automatically. As of\nMySQL 5.7.32, LOCK TABLES checks that the view definer has the proper\nprivileges on the tables underlying the view.\n\nIf you lock a table explicitly with LOCK TABLES, any tables used in\ntriggers are also locked implicitly, as described in\nhttps://dev.mysql.com/doc/refman/5.7/en/lock-tables.html#lock-tables-an\nd-triggers.\n\nUNLOCK TABLES explicitly releases any table locks held by the current\nsession. LOCK TABLES implicitly releases any table locks held by the\ncurrent session before acquiring new locks.\n\nAnother use for UNLOCK TABLES is to release the global read lock\nacquired with the FLUSH TABLES WITH READ LOCK statement, which enables\nyou to lock all tables in all databases. See [HELP FLUSH]. (This is a\nvery convenient way to get backups if you have a file system such as\nVeritas that can take snapshots in time.)\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/lock-tables.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/lock-tables.html'),(546,'SET TRANSACTION',40,'Syntax:\nSET [GLOBAL | SESSION] TRANSACTION\n    transaction_characteristic [, transaction_characteristic] ...\n\ntransaction_characteristic: {\n    ISOLATION LEVEL level\n  | access_mode\n}\n\nlevel: {\n     REPEATABLE READ\n   | READ COMMITTED\n   | READ UNCOMMITTED\n   | SERIALIZABLE\n}\n\naccess_mode: {\n     READ WRITE\n   | READ ONLY\n}\n\nThis statement specifies transaction characteristics. It takes a list\nof one or more characteristic values separated by commas. Each\ncharacteristic value sets the transaction isolation level or access\nmode. The isolation level is used for operations on InnoDB tables. The\naccess mode specifies whether transactions operate in read/write or\nread-only mode.\n\nIn addition, SET TRANSACTION can include an optional GLOBAL or SESSION\nkeyword to indicate the scope of the statement.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html'),(547,'XA',40,'Syntax:\nXA {START|BEGIN} xid [JOIN|RESUME]\n\nXA END xid [SUSPEND [FOR MIGRATE]]\n\nXA PREPARE xid\n\nXA COMMIT xid [ONE PHASE]\n\nXA ROLLBACK xid\n\nXA RECOVER [CONVERT XID]\n\nFor XA START, the JOIN and RESUME clauses are recognized but have no\neffect.\n\nFor XA END the SUSPEND [FOR MIGRATE] clause is recognized but has no\neffect.\n\nEach XA statement begins with the XA keyword, and most of them require\nan xid value. An xid is an XA transaction identifier. It indicates\nwhich transaction the statement applies to. xid values are supplied by\nthe client, or generated by the MySQL server. An xid value has from one\nto three parts:\n\nxid: gtrid [, bqual [, formatID ]]\n\ngtrid is a global transaction identifier, bqual is a branch qualifier,\nand formatID is a number that identifies the format used by the gtrid\nand bqual values. As indicated by the syntax, bqual and formatID are\noptional. The default bqual value is \'\' if not given. The default\nformatID value is 1 if not given.\n\ngtrid and bqual must be string literals, each up to 64 bytes (not\ncharacters) long. gtrid and bqual can be specified in several ways. You\ncan use a quoted string (\'ab\'), hex string (X\'6162\', 0x6162), or bit\nvalue (b\'nnnn\').\n\nformatID is an unsigned integer.\n\nThe gtrid and bqual values are interpreted in bytes by the MySQL\nserver\'s underlying XA support routines. However, while an SQL\nstatement containing an XA statement is being parsed, the server works\nwith some specific character set. To be safe, write gtrid and bqual as\nhex strings.\n\nxid values typically are generated by the Transaction Manager. Values\ngenerated by one TM must be different from values generated by other\nTMs. A given TM must be able to recognize its own xid values in a list\nof values returned by the XA RECOVER statement.\n\nXA START xid starts an XA transaction with the given xid value. Each XA\ntransaction must have a unique xid value, so the value must not\ncurrently be used by another XA transaction. Uniqueness is assessed\nusing the gtrid and bqual values. All following XA statements for the\nXA transaction must be specified using the same xid value as that given\nin the XA START statement. If you use any of those statements but\nspecify an xid value that does not correspond to some existing XA\ntransaction, an error occurs.\n\nOne or more XA transactions can be part of the same global transaction.\nAll XA transactions within a given global transaction must use the same\ngtrid value in the xid value. For this reason, gtrid values must be\nglobally unique so that there is no ambiguity about which global\ntransaction a given XA transaction is part of. The bqual part of the\nxid value must be different for each XA transaction within a global\ntransaction. (The requirement that bqual values be different is a\nlimitation of the current MySQL XA implementation. It is not part of\nthe XA specification.)\n\nThe XA RECOVER statement returns information for those XA transactions\non the MySQL server that are in the PREPARED state. (See\nhttps://dev.mysql.com/doc/refman/5.7/en/xa-states.html.) The output\nincludes a row for each such XA transaction on the server, regardless\nof which client started it.\n\nXA RECOVER output rows look like this (for an example xid value\nconsisting of the parts \'abc\', \'def\', and 7):\n\nmysql> XA RECOVER;\n+----------+--------------+--------------+--------+\n| formatID | gtrid_length | bqual_length | data   |\n+----------+--------------+--------------+--------+\n|        7 |            3 |            3 | abcdef |\n+----------+--------------+--------------+--------+\n\nThe output columns have the following meanings:\n\no formatID is the formatID part of the transaction xid\n\no gtrid_length is the length in bytes of the gtrid part of the xid\n\no bqual_length is the length in bytes of the bqual part of the xid\n\no data is the concatenation of the gtrid and bqual parts of the xid\n\nXID values may contain nonprintable characters. As of MySQL 5.7.5, XA\nRECOVER permits an optional CONVERT XID clause so that clients can\nrequest XID values in hexadecimal.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html'),(548,'PURGE BINARY LOGS',41,'Syntax:\nPURGE { BINARY | MASTER } LOGS {\n    TO \'log_name\'\n  | BEFORE datetime_expr\n}\n\nThe binary log is a set of files that contain information about data\nmodifications made by the MySQL server. The log consists of a set of\nbinary log files, plus an index file (see\nhttps://dev.mysql.com/doc/refman/5.7/en/binary-log.html).\n\nThe PURGE BINARY LOGS statement deletes all the binary log files listed\nin the log index file prior to the specified log file name or date.\nBINARY and MASTER are synonyms. Deleted log files also are removed from\nthe list recorded in the index file, so that the given log file becomes\nthe first in the list.\n\nPURGE BINARY LOGS requires the BINLOG_ADMIN\n(https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_\nbinlog-admin) privilege. This statement has no effect if the server was\nnot started with the --log-bin option to enable binary logging.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/purge-binary-logs.html\n\n','PURGE BINARY LOGS TO \'mysql-bin.010\';\nPURGE BINARY LOGS BEFORE \'2019-04-02 22:46:26\';\n','https://dev.mysql.com/doc/refman/5.7/en/purge-binary-logs.html'),(549,'PURGE MASTER LOGS',41,'Syntax:\nPURGE { BINARY | MASTER } LOGS {\n    TO \'log_name\'\n  | BEFORE datetime_expr\n}\n\nThe binary log is a set of files that contain information about data\nmodifications made by the MySQL server. The log consists of a set of\nbinary log files, plus an index file (see\nhttps://dev.mysql.com/doc/refman/5.7/en/binary-log.html).\n\nThe PURGE BINARY LOGS statement deletes all the binary log files listed\nin the log index file prior to the specified log file name or date.\nBINARY and MASTER are synonyms. Deleted log files also are removed from\nthe list recorded in the index file, so that the given log file becomes\nthe first in the list.\n\nPURGE BINARY LOGS requires the BINLOG_ADMIN\n(https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_\nbinlog-admin) privilege. This statement has no effect if the server was\nnot started with the --log-bin option to enable binary logging.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/purge-binary-logs.html\n\n','PURGE BINARY LOGS TO \'mysql-bin.010\';\nPURGE BINARY LOGS BEFORE \'2019-04-02 22:46:26\';\n','https://dev.mysql.com/doc/refman/5.7/en/purge-binary-logs.html'),(550,'RESET MASTER',41,'Syntax:\nRESET MASTER\n\n*Warning*:\n\nUse this statement with caution to ensure you do not lose any wanted\nbinary log file data and GTID execution history.\n\nRESET MASTER requires the RELOAD privilege.\n\nFor a server where binary logging is enabled (log_bin is ON), RESET\nMASTER deletes all existing binary log files and resets the binary log\nindex file, resetting the server to its state before binary logging was\nstarted. A new empty binary log file is created so that binary logging\ncan be restarted.\n\nFor a server where GTIDs are in use (gtid_mode is ON), issuing RESET\nMASTER resets the GTID execution history. The value of the gtid_purged\nsystem variable is set to an empty string (\'\'), the global value (but\nnot the session value) of the gtid_executed system variable is set to\nan empty string, and the mysql.gtid_executed table is cleared (see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html\n#replication-gtids-gtid-executed-table). If the GTID-enabled server has\nbinary logging enabled, RESET MASTER also resets the binary log as\ndescribed above. Note that RESET MASTER is the method to reset the GTID\nexecution history even if the GTID-enabled server is a replica where\nbinary logging is disabled; RESET SLAVE has no effect on the GTID\nexecution history. For more information on resetting the GTID execution\nhistory, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-gtids-lifecycle.htm\nl#replication-gtids-execution-history.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/reset-master.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/reset-master.html'),(551,'SET SQL_LOG_BIN',41,'Syntax:\nSET sql_log_bin = {OFF|ON}\n\nThe sql_log_bin variable controls whether logging to the binary log is\nenabled for the current session (assuming that the binary log itself is\nenabled). The default value is ON. To disable or enable binary logging\nfor the current session, set the session sql_log_bin variable to OFF or\nON.\n\nSet this variable to OFF for a session to temporarily disable binary\nlogging while making changes to the source you do not want replicated\nto the replica.\n\nSetting the session value of this system variable is a restricted\noperation. The session user must have privileges sufficient to set\nrestricted session variables. See\nhttps://dev.mysql.com/doc/refman/5.7/en/system-variable-privileges.html\n.\n\nIt is not possible to set the session value of sql_log_bin within a\ntransaction or subquery.\n\nSetting this variable to OFF prevents GTIDs from being assigned to\ntransactions in the binary log. If you are using GTIDs for replication,\nthis means that even when binary logging is later enabled again, the\nGTIDs written into the log from this point do not account for any\ntransactions that occurred in the meantime, so in effect those\ntransactions are lost.\n\nThe global sql_log_bin variable is read only and cannot be modified.\nThe global scope is deprecated; expect it to be removed in a future\nMySQL release.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-sql-log-bin.html'),(552,'CHANGE MASTER TO',41,'Syntax:\nCHANGE MASTER TO option [, option] ... [ channel_option ]\n\noption: {\n    MASTER_BIND = \'interface_name\'\n  | MASTER_HOST = \'host_name\'\n  | MASTER_USER = \'user_name\'\n  | MASTER_PASSWORD = \'password\'\n  | MASTER_PORT = port_num\n  | MASTER_CONNECT_RETRY = interval\n  | MASTER_RETRY_COUNT = count\n  | MASTER_DELAY = interval\n  | MASTER_HEARTBEAT_PERIOD = interval\n  | MASTER_LOG_FILE = \'source_log_name\'\n  | MASTER_LOG_POS = source_log_pos\n  | MASTER_AUTO_POSITION = {0|1}\n  | RELAY_LOG_FILE = \'relay_log_name\'\n  | RELAY_LOG_POS = relay_log_pos\n  | MASTER_SSL = {0|1}\n  | MASTER_SSL_CA = \'ca_file_name\'\n  | MASTER_SSL_CAPATH = \'ca_directory_name\'\n  | MASTER_SSL_CERT = \'cert_file_name\'\n  | MASTER_SSL_CRL = \'crl_file_name\'\n  | MASTER_SSL_CRLPATH = \'crl_directory_name\'\n  | MASTER_SSL_KEY = \'key_file_name\'\n  | MASTER_SSL_CIPHER = \'cipher_list\'\n  | MASTER_SSL_VERIFY_SERVER_CERT = {0|1}\n  | MASTER_TLS_VERSION = \'protocol_list\'\n  | IGNORE_SERVER_IDS = (server_id_list)\n}\n\nchannel_option:\n    FOR CHANNEL channel\n\nserver_id_list:\n    [server_id [, server_id] ... ]\n\nCHANGE MASTER TO changes the parameters that the replica uses for\nconnecting to the replication source server, for reading the source\'s\nbinary log, and reading the replica\'s relay log. It also updates the\ncontents of the replication metadata repositories (see\nhttps://dev.mysql.com/doc/refman/5.7/en/replica-logs.html). CHANGE\nMASTER TO requires the SUPER privilege.\n\nPrior to MySQL 5.7.4, the replication threads must be stopped, using\nSTOP SLAVE if necessary, before issuing this statement. In MySQL 5.7.4\nand later, you can issue CHANGE MASTER TO statements on a running\nreplica without doing this, depending on the states of the replication\nSQL thread and replication I/O thread. The rules governing such use are\nprovided later in this section.\n\nWhen using a multithreaded replica (in other words\nslave_parallel_workers is greater than 0), stopping the replica can\ncause \"gaps\" in the sequence of transactions that have been executed\nfrom the relay log, regardless of whether the replica was stopped\nintentionally or otherwise. When such gaps exist, issuing CHANGE MASTER\nTO fails. The solution in this situation is to issue START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS which ensures that the gaps are closed.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the CHANGE MASTER TO statement to a specific\nreplication channel, and is used to add a new channel or modify an\nexisting channel. For example, to add a new channel called channel2:\n\nCHANGE MASTER TO MASTER_HOST=host1, MASTER_PORT=3002 FOR CHANNEL \'channel2\'\n\nIf no clause is named and no extra channels exist, the statement\napplies to the default channel.\n\nWhen using multiple replication channels, if a CHANGE MASTER TO\nstatement does not name a channel using a FOR CHANNEL channel clause,\nan error occurs. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nOptions not specified retain their value, except as indicated in the\nfollowing discussion. Thus, in most cases, there is no need to specify\noptions that do not change. For example, if the password to connect to\nyour replication source server has changed, issue this statement to\ntell the replica about the new password:\n\nCHANGE MASTER TO MASTER_PASSWORD=\'new3cret\';\n\nMASTER_HOST, MASTER_USER, MASTER_PASSWORD, and MASTER_PORT provide\ninformation to the replica about how to connect to its replication\nsource server:\n\no MASTER_HOST and MASTER_PORT are the host name (or IP address) of the\n  master host and its TCP/IP port.\n\n  *Note*:\n\n  Replication cannot use Unix socket files. You must be able to connect\n  to the replication source server using TCP/IP.\n\n  If you specify the MASTER_HOST or MASTER_PORT option, the replica\n  assumes that the source is different from before (even if the option\n  value is the same as its current value.) In this case, the old values\n  for the source\'s binary log file name and position are considered no\n  longer applicable, so if you do not specify MASTER_LOG_FILE and\n  MASTER_LOG_POS in the statement, MASTER_LOG_FILE=\'\' and\n  MASTER_LOG_POS=4 are silently appended to it.\n\n  Setting MASTER_HOST=\'\' (that is, setting its value explicitly to an\n  empty string) is not the same as not setting MASTER_HOST at all.\n  Beginning with MySQL 5.5, trying to set MASTER_HOST to an empty\n  string fails with an error. Previously, setting MASTER_HOST to an\n  empty string caused START SLAVE subsequently to fail. (Bug #28796)\n\n  Values used for MASTER_HOST and other CHANGE MASTER TO options are\n  checked for linefeed (\\n or 0x0A) characters; the presence of such\n  characters in these values causes the statement to fail with\n  ER_MASTER_INFO\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html#error_er_master_info). (Bug #11758581, Bug #50801)\n\no MASTER_USER and MASTER_PASSWORD are the user name and password of the\n  account to use for connecting to the source. If you specify\n  MASTER_PASSWORD, MASTER_USER is also required. The password used for\n  a replication user account in a CHANGE MASTER TO statement is limited\n  to 32 characters in length; prior to MySQL 5.7.5, if the password was\n  longer, the statement succeeded, but any excess characters were\n  silently truncated. In MySQL 5.7.5 and later, trying to use a\n  password of more than 32 characters causes CHANGE MASTER TO to fail.\n  (Bug #11752299, Bug #43439)\n\n  It is possible to set an empty user name by specifying\n  MASTER_USER=\'\', but the replication channel cannot be started with an\n  empty user name. Only set an empty MASTER_USER user name if you need\n  to clear previously used credentials from the replica\'s repositories\n  for security purposes, and do not attempt to use the channel\n  afterwards.\n\n  The text of a running CHANGE MASTER TO statement, including values\n  for MASTER_USER and MASTER_PASSWORD, can be seen in the output of a\n  concurrent SHOW PROCESSLIST statement. (The complete text of a START\n  SLAVE statement is also visible to SHOW PROCESSLIST.)\n\nThe MASTER_SSL_xxx options and the MASTER_TLS_VERSION option specify\nhow the replica uses encryption and ciphers to secure the replication\nconnection. These options can be changed even on replicas that are\ncompiled without SSL support. They are saved to the source metadata\nrepository, but are ignored if the replica does not have SSL support\nenabled. The MASTER_SSL_xxx and MASTER_TLS_VERSION options perform the\nsame functions as the --ssl-xxx and --tls-version client options\ndescribed in\nhttps://dev.mysql.com/doc/refman/5.7/en/connection-options.html#encrypt\ned-connection-options. The correspondence between the two sets of\noptions, and the use of the MASTER_SSL_xxx and MASTER_TLS_VERSION\noptions to set up a secure connection, is explained in\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-solutions-encrypted\n-connections.html.\n\nAs of MySQL 5.7.3, setting MASTER_SSL=1 means that the replica\'s\nconnection to the source must use SSL, or the connection attempt fails.\nBefore 5.7.3, the use of an SSL connection by the replica was not\nenforced with MASTER_SSL=1. This is analogous to the client-side\nmeaning of the --ssl command-line option; see\nhttps://dev.mysql.com/doc/refman/5.7/en/connection-options.html#encrypt\ned-connection-options.\n\nThe MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY, and\nMASTER_RETRY_COUNT options control how the replica recognizes that the\nconnection to the source has been lost and makes attempts to reconnect.\n\no The slave_net_timeout system variable specifies the number of seconds\n  that the replica waits for either more data or a heartbeat signal\n  from the source, before the replica considers the connection broken,\n  aborts the read, and tries to reconnect. The default value is 60\n  seconds (one minute). Prior to MySQL 5.7.7, the default was 3600\n  seconds (one hour).\n\no The heartbeat interval, which stops the connection timeout occurring\n  in the absence of data if the connection is still good, is controlled\n  by the MASTER_HEARTBEAT_PERIOD option. A heartbeat signal is sent to\n  the replica after that number of seconds, and the waiting period is\n  reset whenever the source\'s binary log is updated with an event.\n  Heartbeats are therefore sent by the source only if there are no\n  unsent events in the binary log file for a period longer than this.\n  The heartbeat interval interval is a decimal value having the range 0\n  to 4294967 seconds and a resolution in milliseconds; the smallest\n  nonzero value is 0.001. Setting interval to 0 disables heartbeats\n  altogether. The heartbeat interval defaults to half the value of the\n  slave_net_timeout system variable. It is recorded in the source\n  metadata repository and shown in the\n  replication_connection_configuration Performance Schema table.\n  Issuing RESET SLAVE resets the heartbeat interval to the default\n  value.\n\no Prior to MySQL 5.7.4, not including MASTER_HEARTBEAT_PERIOD caused\n  CHANGE MASTER TO to reset the heartbeat interval to the default (half\n  the value of the slave_net_timeout system variable), and\n  Slave_received_heartbeats to 0. The heartbeat interval is now not\n  reset except by RESET SLAVE. (Bug #18185490)\n\no Note that a change to the value or default setting of\n  slave_net_timeout does not automatically change the heartbeat\n  interval, whether that has been set explicitly or is using a\n  previously calculated default. A warning is issued if you set\n  @@GLOBAL.slave_net_timeout to a value less than that of the current\n  heartbeat interval. If slave_net_timeout is changed, you must also\n  issue CHANGE MASTER TO to adjust the heartbeat interval to an\n  appropriate value so that the heartbeat signal occurs before the\n  connection timeout. If you do not do this, the heartbeat signal has\n  no effect, and if no data is received from the source, the replica\n  can make repeated reconnection attempts, creating zombie dump\n  threads.\n\no If the replica does need to reconnect, the first retry occurs\n  immediately after the timeout. MASTER_CONNECT_RETRY specifies the\n  interval between reconnection attempts, and MASTER_RETRY_COUNT limits\n  the number of reconnection attempts. If both the default settings are\n  used, the replica waits 60 seconds between reconnection attempts\n  (MASTER_CONNECT_RETRY=60), and keeps attempting to reconnect at this\n  rate for 60 days (MASTER_RETRY_COUNT=86400). A setting of 0 for\n  MASTER_RETRY_COUNT means that there is no limit on the number of\n  reconnection attempts, so the replica keeps trying to reconnect\n  indefinitely. These values are recorded in the source metadata\n  repository and shown in the replication_connection_configuration\n  Performance Schema table. MASTER_RETRY_COUNT supersedes the\n  --master-retry-count server startup option.\n\nMASTER_DELAY specifies how many seconds behind the source the replica\nmust lag. An event received from the source is not executed until at\nleast interval seconds later than its execution on the source. The\ndefault is 0. An error occurs if interval is not a nonnegative integer\nin the range from 0 to 231−1. For more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-delayed.html.\n\nFrom MySQL 5.7, a CHANGE MASTER TO statement employing the MASTER_DELAY\noption can be executed on a running replica when the replication SQL\nthread is stopped.\n\nMASTER_BIND is for use on replicas having multiple network interfaces,\nand determines which of the replica\'s network interfaces is chosen for\nconnecting to the source.\n\nThe address configured with this option, if any, can be seen in the\nMaster_Bind column of the output from SHOW SLAVE STATUS. If you are\nusing a table for the source metadata repository (server started with\nmaster_info_repository=TABLE), the value can also be seen as the\nMaster_bind column of the mysql.slave_master_info table.\n\nThe ability to bind a replica to a specific network interface is also\nsupported by NDB Cluster.\n\nMASTER_LOG_FILE and MASTER_LOG_POS are the coordinates at which the\nreplication I/O thread should begin reading from the source the next\ntime the thread starts. RELAY_LOG_FILE and RELAY_LOG_POS are the\ncoordinates at which the replication SQL thread should begin reading\nfrom the relay log the next time the thread starts. If you specify any\nof these options, you cannot specify MASTER_AUTO_POSITION = 1\n(described later in this section). If neither of MASTER_LOG_FILE or\nMASTER_LOG_POS is specified, the replica uses the last coordinates of\nthe replication SQL thread before CHANGE MASTER TO was issued. This\nensures that there is no discontinuity in replication, even if the\nreplication SQL thread was late compared to the replication I/O thread,\nwhen you merely want to change, say, the password to use.\n\nFrom MySQL 5.7, a CHANGE MASTER TO statement employing RELAY_LOG_FILE,\nRELAY_LOG_POS, or both options can be executed on a running replica\nwhen the replication SQL thread is stopped. Prior to MySQL 5.7.4,\nCHANGE MASTER TO deletes all relay log files and starts a new one,\nunless you specify RELAY_LOG_FILE or RELAY_LOG_POS. In that case, relay\nlog files are kept; the relay_log_purge global variable is set silently\nto 0. In MySQL 5.7.4 and later, relay logs are preserved if at least\none of the replication SQL thread and the replication I/O thread is\nrunning. If both threads are stopped, all relay log files are deleted\nunless at least one of RELAY_LOG_FILE or RELAY_LOG_POS is specified.\nFor the Group Replication applier channel (group_replication_applier),\nwhich only has an SQL thread and no I/O thread, this is the case if the\nSQL thread is stopped, but with that channel you cannot use the\nRELAY_LOG_FILE and RELAY_LOG_POS options.\n\nRELAY_LOG_FILE can use either an absolute or relative path, and uses\nthe same base name as MASTER_LOG_FILE. (Bug #12190)\n\nWhen MASTER_AUTO_POSITION = 1 is used with CHANGE MASTER TO, the\nreplica attempts to connect to the source using the auto-positioning\nfeature of GTID-based replication, rather than a binary log file based\nposition. From MySQL 5.7, this option can be employed by CHANGE MASTER\nTO only if both the replication SQL thread and the replication I/O\nthread are stopped. Both the replica and the source must have GTIDs\nenabled (GTID_MODE=ON, ON_PERMISSIVE, or OFF_PERMISSIVE on the replica,\nand GTID_MODE=ON on the source). MASTER_LOG_FILE, MASTER_LOG_POS,\nRELAY_LOG_FILE, and RELAY_LOG_POS cannot be specified together with\nMASTER_AUTO_POSITION = 1. If multi-source replication is enabled on the\nreplica, you need to set the MASTER_AUTO_POSITION = 1 option for each\napplicable replication channel.\n\nWith MASTER_AUTO_POSITION = 1 set, in the initial connection handshake,\nthe replica sends a GTID set containing the transactions that it has\nalready received, committed, or both. The source responds by sending\nall transactions recorded in its binary log whose GTID is not included\nin the GTID set sent by the replica. This exchange ensures that the\nsource only sends the transactions with a GTID that the replica has not\nalready recorded or committed. If the replica receives transactions\nfrom more than one source, as in the case of a diamond topology, the\nauto-skip function ensures that the transactions are not applied twice.\nFor details of how the GTID set sent by the replica is computed, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-gtids-auto-position\ning.html.\n\nIf any of the transactions that should be sent by the source have been\npurged from the source\'s binary log, or added to the set of GTIDs in\nthe gtid_purged system variable by another method, the source sends the\nerror ER_MASTER_HAS_PURGED_REQUIRED_GTIDS to the replica, and\nreplication does not start. Also, if during the exchange of\ntransactions it is found that the replica has recorded or committed\ntransactions with the source\'s UUID in the GTID, but the source itself\nhas not committed them, the source sends the error\nER_SLAVE_HAS_MORE_GTIDS_THAN_MASTER to the replica and replication does\nnot start. For information on how to handle these situations, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-gtids-auto-position\ning.html.\n\nIGNORE_SERVER_IDS takes a comma-separated list of 0 or more server IDs.\nEvents originating from the corresponding servers are ignored, with the\nexception of log rotation and deletion events, which are still recorded\nin the relay log.\n\nIn circular replication, the originating server normally acts as the\nterminator of its own events, so that they are not applied more than\nonce. Thus, this option is useful in circular replication when one of\nthe servers in the circle is removed. Suppose that you have a circular\nreplication setup with 4 servers, having server IDs 1, 2, 3, and 4, and\nserver 3 fails. When bridging the gap by starting replication from\nserver 2 to server 4, you can include IGNORE_SERVER_IDS = (3) in the\nCHANGE MASTER TO statement that you issue on server 4 to tell it to use\nserver 2 as its source instead of server 3. Doing so causes it to\nignore and not to propagate any statements that originated with the\nserver that is no longer in use.\n\nIf a CHANGE MASTER TO statement is issued without any IGNORE_SERVER_IDS\noption, any existing list is preserved. To clear the list of ignored\nservers, it is necessary to use the option with an empty list:\n\nCHANGE MASTER TO IGNORE_SERVER_IDS = ();\n\nPrior to MySQL 5.7.5, RESET SLAVE ALL has no effect on the server ID\nlist. In MySQL 5.7.5 and later, RESET SLAVE ALL clears\nIGNORE_SERVER_IDS. (Bug #18816897)\n\nIf IGNORE_SERVER_IDS contains the server\'s own ID and the server was\nstarted with the --replicate-same-server-id option enabled, an error\nresults.\n\nThe source metadata repository and the output of SHOW SLAVE STATUS\nprovide the list of servers that are currently ignored. For more\ninformation, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replica-logs-status.html, and\n[HELP SHOW SLAVE STATUS].\n\nInvoking CHANGE MASTER TO causes the previous values for MASTER_HOST,\nMASTER_PORT, MASTER_LOG_FILE, and MASTER_LOG_POS to be written to the\nerror log, along with other information about the replica\'s state prior\nto execution.\n\nCHANGE MASTER TO causes an implicit commit of an ongoing transaction.\nSee https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIn MySQL 5.7.4 and later, the strict requirement to execute STOP SLAVE\nprior to issuing any CHANGE MASTER TO statement (and START SLAVE\nafterward) is removed. Instead of depending on whether the replica is\nstopped, the behavior of CHANGE MASTER TO depends (in MySQL 5.7.4 and\nlater) on the states of the replication SQL thread and the replication\nI/O thread; which of these threads is stopped or running now determines\nthe options that can or cannot be used with a CHANGE MASTER TO\nstatement at a given point in time. The rules for making this\ndetermination are listed here:\n\no If the SQL thread is stopped, you can execute CHANGE MASTER TO using\n  any combination that is otherwise allowed of RELAY_LOG_FILE,\n  RELAY_LOG_POS, and MASTER_DELAY options, even if the replication I/O\n  thread is running. No other options may be used with this statement\n  when the I/O thread is running.\n\no If the I/O thread is stopped, you can execute CHANGE MASTER TO using\n  any of the options for this statement (in any allowed combination)\n  except RELAY_LOG_FILE, RELAY_LOG_POS, MASTER_DELAY, or\n  MASTER_AUTO_POSITION = 1 even when the SQL thread is running.\n\no Both the SQL thread and the I/O thread must be stopped before issuing\n  a CHANGE MASTER TO statement that employs MASTER_AUTO_POSITION = 1.\n\nYou can check the current state of the replication SQL thread and the\nreplication I/O thread using SHOW SLAVE STATUS. Note that the Group\nReplication applier channel (group_replication_applier) has no I/O\nthread, only an SQL thread.\n\nFor more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-solutions-switch.ht\nml.\n\nIf you are using statement-based replication and temporary tables, it\nis possible for a CHANGE MASTER TO statement following a STOP SLAVE\nstatement to leave behind temporary tables on the replica. From MySQL\n5.7, a warning (ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_warn_open_temp_tables_must_be_zero)) is issued whenever\nthis occurs. You can avoid this in such cases by making sure that the\nvalue of the Slave_open_temp_tables system status variable is equal to\n0 prior to executing such a CHANGE MASTER TO statement.\n\nCHANGE MASTER TO is useful for setting up a replica when you have the\nsnapshot of the replication source server and have recorded the\nsource\'s binary log coordinates corresponding to the time of the\nsnapshot. After loading the snapshot into the replica to synchronize it\nwith the source, you can run CHANGE MASTER TO\nMASTER_LOG_FILE=\'log_name\', MASTER_LOG_POS=log_pos on the replica to\nspecify the coordinates at which the replica should begin reading the\nsource\'s binary log.\n\nThe following example changes the replication source server the replica\nuses and establishes the source\'s binary log coordinates from which the\nreplica begins reading. This is used when you want to set up the\nreplica to replicate the source:\n\nCHANGE MASTER TO\n  MASTER_HOST=\'source2.example.com\',\n  MASTER_USER=\'replication\',\n  MASTER_PASSWORD=\'password\',\n  MASTER_PORT=3306,\n  MASTER_LOG_FILE=\'source2-bin.001\',\n  MASTER_LOG_POS=4,\n  MASTER_CONNECT_RETRY=10;\n\nThe next example shows an operation that is less frequently employed.\nIt is used when the replica has relay log files that you want it to\nexecute again for some reason. To do this, the source need not be\nreachable. You need only use CHANGE MASTER TO and start the SQL thread\n(START SLAVE SQL_THREAD):\n\nCHANGE MASTER TO\n  RELAY_LOG_FILE=\'replica-relay-bin.006\',\n  RELAY_LOG_POS=4025;\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html'),(553,'CHANGE REPLICATION FILTER',41,'Syntax:\nCHANGE REPLICATION FILTER filter[, filter][, ...]\n\nfilter: {\n    REPLICATE_DO_DB = (db_list)\n  | REPLICATE_IGNORE_DB = (db_list)\n  | REPLICATE_DO_TABLE = (tbl_list)\n  | REPLICATE_IGNORE_TABLE = (tbl_list)\n  | REPLICATE_WILD_DO_TABLE = (wild_tbl_list)\n  | REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)\n  | REPLICATE_REWRITE_DB = (db_pair_list)\n}\n\ndb_list:\n    db_name[, db_name][, ...]\n\ntbl_list:\n    db_name.table_name[, db_table_name][, ...]\nwild_tbl_list:\n    \'db_pattern.table_pattern\'[, \'db_pattern.table_pattern\'][, ...]\n\ndb_pair_list:\n    (db_pair)[, (db_pair)][, ...]\n\ndb_pair:\n    from_db, to_db\n\nCHANGE REPLICATION FILTER sets one or more replication filtering rules\non the replica in the same way as starting the replica mysqld with\nreplication filtering options such as --replicate-do-db or\n--replicate-wild-ignore-table. Unlike the case with the server options,\nthis statement does not require restarting the server to take effect,\nonly that the replication SQL thread be stopped using STOP SLAVE\nSQL_THREAD first (and restarted with START SLAVE SQL_THREAD\nafterwards). CHANGE REPLICATION FILTER requires the SUPER privilege.\n\nReplication filters cannot be set on a MySQL server instance that is\nconfigured for Group Replication, because filtering transactions on\nsome servers would make the group unable to reach agreement on a\nconsistent state.\n\nThe following list shows the CHANGE REPLICATION FILTER options and how\nthey relate to --replicate-* server options:\n\no REPLICATE_DO_DB: Include updates based on database name. Equivalent\n  to --replicate-do-db.\n\no REPLICATE_IGNORE_DB: Exclude updates based on database name.\n  Equivalent to --replicate-ignore-db.\n\no REPLICATE_DO_TABLE: Include updates based on table name. Equivalent\n  to --replicate-do-table.\n\no REPLICATE_IGNORE_TABLE: Exclude updates based on table name.\n  Equivalent to --replicate-ignore-table.\n\no REPLICATE_WILD_DO_TABLE: Include updates based on wildcard pattern\n  matching table name. Equivalent to --replicate-wild-do-table.\n\no REPLICATE_WILD_IGNORE_TABLE: Exclude updates based on wildcard\n  pattern matching table name. Equivalent to\n  --replicate-wild-ignore-table.\n\no REPLICATE_REWRITE_DB: Perform updates on replica after substituting\n  new name on replica for specified database on source. Equivalent to\n  --replicate-rewrite-db.\n\nThe precise effects of REPLICATE_DO_DB and REPLICATE_IGNORE_DB filters\nare dependent on whether statement-based or row-based replication is in\neffect. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-rules.html, for\nmore information.\n\nMultiple replication filtering rules can be created in a single CHANGE\nREPLICATION FILTER statement by separating the rules with commas, as\nshown here:\n\nCHANGE REPLICATION FILTER\n    REPLICATE_DO_DB = (d1), REPLICATE_IGNORE_DB = (d2);\n\nIssuing the statement just shown is equivalent to starting the replica\nmysqld with the options --replicate-do-db=d1 --replicate-ignore-db=d2.\n\nIf the same filtering rule is specified multiple times, only the last\nsuch rule is actually used. For example, the two statements shown here\nhave exactly the same effect, because the first REPLICATE_DO_DB rule in\nthe first statement is ignored:\n\nCHANGE REPLICATION FILTER\n    REPLICATE_DO_DB = (db1, db2), REPLICATE_DO_DB = (db3, db4);\n\nCHANGE REPLICATION FILTER\n    REPLICATE_DO_DB = (db3,db4);\n\n*Caution*:\n\nThis behavior differs from that of the --replicate-* filter options\nwhere specifying the same option multiple times causes the creation of\nmultiple filter rules.\n\nNames of tables and database not containing any special characters need\nnot be quoted. Values used with REPLICATION_WILD_TABLE and\nREPLICATION_WILD_IGNORE_TABLE are string expressions, possibly\ncontaining (special) wildcard characters, and so must be quoted. This\nis shown in the following example statements:\n\nCHANGE REPLICATION FILTER\n    REPLICATE_WILD_DO_TABLE = (\'db1.old%\');\n\nCHANGE REPLICATION FILTER\n    REPLICATE_WILD_IGNORE_TABLE = (\'db1.new%\', \'db2.new%\');\n\nValues used with REPLICATE_REWRITE_DB represent pairs of database\nnames; each such value must be enclosed in parentheses. The following\nstatement rewrites statements occurring on database db1 on the source\nto database db2 on the replica:\n\nCHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((db1, db2));\n\nThe statement just shown contains two sets of parentheses, one\nenclosing the pair of database names, and the other enclosing the\nentire list. This is perhaps more easily seen in the following example,\nwhich creates two rewrite-db rules, one rewriting database dbA to dbB,\nand one rewriting database dbC to dbD:\n\nCHANGE REPLICATION FILTER\n  REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));\n\nThis statement leaves any existing replication filtering rules\nunchanged; to unset all filters of a given type, set the filter\'s value\nto an explicitly empty list, as shown in this example, which removes\nall existing REPLICATE_DO_DB and REPLICATE_IGNORE_DB rules:\n\nCHANGE REPLICATION FILTER\n    REPLICATE_DO_DB = (), REPLICATE_IGNORE_DB = ();\n\nSetting a filter to empty in this way removes all existing rules, does\nnot create any new ones, and does not restore any rules set at mysqld\nstartup using --replicate-* options on the command line or in the\nconfiguration file.\n\nValues employed with REPLICATE_WILD_DO_TABLE and\nREPLICATE_WILD_IGNORE_TABLE must be in the format db_name.tbl_name.\nPrior to MySQL 5.7.5, this was not strictly enforced, although using\nnonconforming values with these options could lead to erroneous results\n(Bug #18095449).\n\nFor more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-rules.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/change-replication-filter.html'),(554,'RESET SLAVE',41,'Syntax:\nRESET SLAVE [ALL] [channel_option]\n\nchannel_option:\n    FOR CHANNEL channel\n\nRESET SLAVE makes the replica forget its replication position in the\nsource\'s binary log. This statement is meant to be used for a clean\nstart: It clears the replication metadata repositories, deletes all the\nrelay log files, and starts a new relay log file. It also resets to 0\nthe replication delay specified with the MASTER_DELAY option to CHANGE\nMASTER TO.\n\n*Note*:\n\nAll relay log files are deleted, even if they have not been completely\nexecuted by the replication SQL thread. (This is a condition likely to\nexist on a replica if you have issued a STOP SLAVE statement or if the\nreplica is highly loaded.)\n\nFor a server where GTIDs are in use (gtid_mode is ON), issuing RESET\nSLAVE has no effect on the GTID execution history. The statement does\nnot change the values of gtid_executed or gtid_purged, or the\nmysql.gtid_executed table. If you need to reset the GTID execution\nhistory, use RESET MASTER, even if the GTID-enabled server is a replica\nwhere binary logging is disabled.\n\nRESET SLAVE requires the RELOAD privilege.\n\nTo use RESET SLAVE, the replication threads must be stopped, so on a\nrunning replica use STOP SLAVE before issuing RESET SLAVE. To use RESET\nSLAVE on a Group Replication group member, the member status must be\nOFFLINE, meaning that the plugin is loaded but the member does not\ncurrently belong to any group. A group member can be taken offline by\nusing a STOP GROUP REPLICATION statement.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the RESET SLAVE statement to a specific\nreplication channel. Combining a FOR CHANNEL channel clause with the\nALL option deletes the specified channel. If no channel is named and no\nextra channels exist, the statement applies to the default channel.\nIssuing a RESET SLAVE ALL statement without a FOR CHANNEL channel\nclause when multiple replication channels exist deletes all replication\nchannels and recreates only the default channel. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nRESET SLAVE does not change any replication connection parameters such\nas the source\'s host name and port, or the replication user account\nname and its password.\n\no From MySQL 5.7.24, when master_info_repository=TABLE is set on the\n  server, replication connection parameters are preserved in the\n  crash-safe InnoDB table mysql.slave_master_info as part of the RESET\n  SLAVE operation. They are also retained in memory. In the event of an\n  unexpected server exit or deliberate restart after issuing RESET\n  SLAVE but before issuing START SLAVE, the replication connection\n  parameters are retrieved from the table and reused for the new\n  connection.\n\no When master_info_repository=FILE is set on the server (which is the\n  default in MySQL 5.7), replication connection parameters are only\n  retained in memory. If the replica mysqld is restarted immediately\n  after issuing RESET SLAVE due to an unexpected server exit or\n  deliberate restart, the connection parameters are lost. In that case,\n  you must issue a CHANGE MASTER TO statement after the server start to\n  respecify the connection parameters before issuing START SLAVE.\n\nIf you want to reset the connection parameters intentionally, you need\nto use RESET SLAVE ALL, which clears the connection parameters. In that\ncase, you must issue a CHANGE MASTER TO statement after the server\nstart to specify the new connection parameters.\n\nRESET SLAVE causes an implicit commit of an ongoing transaction. See\nhttps://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nIf the replication SQL thread was in the middle of replicating\ntemporary tables when it was stopped, and RESET SLAVE is issued, these\nreplicated temporary tables are deleted on the replica.\n\nPrior to MySQL 5.7.5, RESET SLAVE also had the effect of resetting both\nthe heartbeat period (Slave_heartbeat_period) and\nSSL_VERIFY_SERVER_CERT. This issue is fixed in MySQL 5.7.5 and later.\n(Bug #18777899, Bug #18778485)\n\nPrior to MySQL 5.7.5, RESET SLAVE ALL did not clear the\nIGNORE_SERVER_IDS list set by CHANGE MASTER TO. In MySQL 5.7.5 and\nlater, the statement clears the list. (Bug #18816897)\n\n*Note*:\n\nWhen used on an NDB Cluster replica SQL node, RESET SLAVE clears the\nmysql.ndb_apply_status table. You should keep in mind when using this\nstatement that ndb_apply_status uses the NDB storage engine and so is\nshared by all SQL nodes attached to the replica cluster.\n\nYou can override this behavior by issuing SET GLOBAL\n@@ndb_clear_apply_status=OFF prior to executing RESET SLAVE, which\nkeeps the replica from purging the ndb_apply_status table in such\ncases.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/reset-slave.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/reset-slave.html'),(555,'START SLAVE',41,'Syntax:\nSTART SLAVE [thread_types] [until_option] [connection_options] [channel_option]\n\nthread_types:\n    [thread_type [, thread_type] ... ]\n\nthread_type:\n    IO_THREAD | SQL_THREAD\n\nuntil_option:\n    UNTIL {   {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set\n          |   MASTER_LOG_FILE = \'log_name\', MASTER_LOG_POS = log_pos\n          |   RELAY_LOG_FILE = \'log_name\', RELAY_LOG_POS = log_pos\n          |   SQL_AFTER_MTS_GAPS  }\n\nconnection_options:\n    [USER=\'user_name\'] [PASSWORD=\'user_pass\'] [DEFAULT_AUTH=\'plugin_name\'] [PLUGIN_DIR=\'plugin_dir\']\n\n\nchannel_option:\n    FOR CHANNEL channel\n\ngtid_set:\n    uuid_set [, uuid_set] ...\n    | \'\'\n\nuuid_set:\n    uuid:interval[:interval]...\n\nuuid:\n    hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh\n\nh:\n    [0-9,A-F]\n\ninterval:\n    n[-n]\n\n    (n >= 1)\n\nSTART SLAVE with no thread_type options starts both of the replication\nthreads. The replication I/O thread reads events from the source server\nand stores them in the relay log. The replication SQL thread reads\nevents from the relay log and executes them. START SLAVE requires the\nSUPER privilege.\n\nIf START SLAVE succeeds in starting the replication threads, it returns\nwithout any error. However, even in that case, it might be that the\nreplication threads start and then later stop (for example, because\nthey do not manage to connect to the source or read its binary log, or\nsome other problem). START SLAVE does not warn you about this. You must\ncheck the replica\'s error log for error messages generated by the\nreplication threads, or check that they are running satisfactorily with\nSHOW SLAVE STATUS.\n\nSTART SLAVE causes an implicit commit of an ongoing transaction. See\nhttps://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\ngtid_next must be set to AUTOMATIC before issuing this statement.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the START SLAVE statement to a specific\nreplication channel. If no clause is named and no extra channels exist,\nthe statement applies to the default channel. If a START SLAVE\nstatement does not have a channel defined when using multiple channels,\nthis statement starts the specified threads for all channels. This\nstatement is disallowed for the group_replication_recovery channel. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nYou can add IO_THREAD and SQL_THREAD options to the statement to name\nwhich of the threads to start. Note that the Group Replication applier\nchannel (group_replication_applier) has no I/O thread, only an SQL\nthread. Specifying the IO_THREAD or SQL_THREAD options when you start\nthis channel has no benefit.\n\nSTART SLAVE supports pluggable user-password authentication with the\nUSER, PASSWORD, DEFAULT_AUTH and PLUGIN_DIR options, as described in\nthe following list:\n\no USER: User name. Cannot be set to an empty or null string, or left\n  unset if PASSWORD is used.\n\no PASSWORD: Password.\n\no DEFAULT_AUTH: Name of plugin; default is MySQL native authentication.\n\no PLUGIN_DIR: Location of plugin.\n\nYou cannot use the SQL_THREAD option when specifying any of USER,\nPASSWORD, DEFAULT_AUTH, or PLUGIN_DIR, unless the IO_THREAD option is\nalso provided.\n\nFor more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/pluggable-authentication.html.\n\nIf an insecure connection is used with any these options, the server\nissues the warning Sending passwords in plain text without SSL/TLS is\nextremely insecure.\n\nSTART SLAVE ... UNTIL supports two additional options for use with\nglobal transaction identifiers (GTIDs) (see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-gtids.html). Each\nof these takes a set of one or more global transaction identifiers\ngtid_set as an argument (see\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-gtids-concepts.html\n#replication-gtids-concepts-gtid-sets, for more information).\n\nWhen no thread_type is specified, START SLAVE UNTIL SQL_BEFORE_GTIDS\ncauses the replication SQL thread to process transactions until it has\nreached the first transaction whose GTID is listed in the gtid_set.\nSTART SLAVE UNTIL SQL_AFTER_GTIDS causes the replication threads to\nprocess all transactions until the last transaction in the gtid_set has\nbeen processed by both threads. In other words, START SLAVE UNTIL\nSQL_BEFORE_GTIDS causes the replication SQL thread to process all\ntransactions occurring before the first GTID in the gtid_set is\nreached, and START SLAVE UNTIL SQL_AFTER_GTIDS causes the replication\nthreads to handle all transactions, including those whose GTIDs are\nfound in gtid_set, until each has encountered a transaction whose GTID\nis not part of the set. SQL_BEFORE_GTIDS and SQL_AFTER_GTIDS each\nsupport the SQL_THREAD and IO_THREAD options, although using IO_THREAD\nwith them currently has no effect.\n\nFor example, START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56 causes the replication SQL\nthread to process all transactions originating from the source whose\nserver_uuid is 3E11FA47-71CA-11E1-9E33-C80AA9429562 until it encounters\nthe transaction having sequence number 11; it then stops without\nprocessing this transaction. In other words, all transactions up to and\nincluding the transaction with sequence number 10 are processed.\nExecuting START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS =\n3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56, on the other hand, would\ncause the replication SQL thread to obtain all transactions just\nmentioned from the source, including all of the transactions having the\nsequence numbers 11 through 56, and then to stop without processing any\nadditional transactions; that is, the transaction having sequence\nnumber 56 would be the last transaction fetched by the replication SQL\nthread.\n\nWhen using a multithreaded replica, there is a chance of gaps in the\nsequence of transactions that have been executed from the relay log in\nthe following cases:\n\no killing the coordinator thread\n\no after an error occurs in the worker threads\n\no mysqld shuts down unexpectedly\n\nUse the START SLAVE UNTIL SQL_AFTER_MTS_GAPS statement to cause a\nmultithreaded replica\'s worker threads to only run until no more gaps\nare found in the relay log, and then to stop. This statement can take\nan SQL_THREAD option, but the effects of the statement remain\nunchanged. It has no effect on the replication I/O thread (and cannot\nbe used with the IO_THREAD option).\n\nIssuing START SLAVE on a multithreaded replica with gaps in the\nsequence of transactions executed from the relay log generates a\nwarning. In such a situation, the solution is to use START SLAVE UNTIL\nSQL_AFTER_MTS_GAPS, then issue RESET SLAVE to remove any remaining\nrelay logs. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-features-transactio\nn-inconsistencies.html for more information.\n\nTo change a failed multithreaded replica to single-threaded mode, you\ncan issue the following series of statements, in the order shown:\n\nSTART SLAVE UNTIL SQL_AFTER_MTS_GAPS;\n\nSET @@GLOBAL.slave_parallel_workers = 0;\n\nSTART SLAVE SQL_THREAD;\n\n*Note*:\n\nIt is possible to view the entire text of a running START SLAVE ...\nstatement, including any USER or PASSWORD values used, in the output of\nSHOW PROCESSLIST. This is also true for the text of a running CHANGE\nMASTER TO statement, including any values it employs for MASTER_USER or\nMASTER_PASSWORD.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/start-slave.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/start-slave.html'),(556,'STOP SLAVE',41,'Syntax:\nSTOP SLAVE [thread_types] [channel_option]\n\nthread_types:\n    [thread_type [, thread_type] ... ]\n\nthread_type: IO_THREAD | SQL_THREAD\n\nchannel_option:\n    FOR CHANNEL channel\n\nStops the replication threads. STOP SLAVE requires the\nREPLICATION_SLAVE_ADMIN\n(https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_\nreplication-slave-admin) or SUPER privilege. Recommended best practice\nis to execute STOP SLAVE on the replica before stopping the replica\nserver (see\nhttps://dev.mysql.com/doc/refman/5.7/en/server-shutdown.html, for more\ninformation).\n\nWhen using the row-based logging format: You should execute STOP SLAVE\nor STOP SLAVE SQL_THREAD on the replica prior to shutting down the\nreplica server if you are replicating any tables that use a\nnontransactional storage engine (see the Note later in this section).\n\nLike START SLAVE, this statement may be used with the IO_THREAD and\nSQL_THREAD options to name the thread or threads to be stopped. Note\nthat the Group Replication applier channel (group_replication_applier)\nhas no replication I/O thread, only a replication SQL thread. Using the\nSQL_THREAD option therefore stops this channel completely.\n\nSTOP SLAVE causes an implicit commit of an ongoing transaction. See\nhttps://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\ngtid_next must be set to AUTOMATIC before issuing this statement.\n\nYou can control how long STOP SLAVE waits before timing out by setting\nthe rpl_stop_slave_timeout system variable. This can be used to avoid\ndeadlocks between STOP SLAVE and other SQL statements using different\nclient connections to the replica. When the timeout value is reached,\nthe issuing client returns an error message and stops waiting, but the\nSTOP SLAVE instruction remains in effect. Once the replication threads\nare no longer busy, the STOP SLAVE statement is executed and the\nreplica stops.\n\nSome CHANGE MASTER TO statements are allowed while the replica is\nrunning, depending on the states of the replication SQL thread and the\nreplication I/O thread. However, using STOP SLAVE prior to executing\nCHANGE MASTER TO in such cases is still supported. See [HELP CHANGE\nMASTER TO], and\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-solutions-switch.ht\nml, for more information.\n\nThe optional FOR CHANNEL channel clause enables you to name which\nreplication channel the statement applies to. Providing a FOR CHANNEL\nchannel clause applies the STOP SLAVE statement to a specific\nreplication channel. If no channel is named and no extra channels\nexist, the statement applies to the default channel. If a STOP SLAVE\nstatement does not name a channel when using multiple channels, this\nstatement stops the specified threads for all channels. This statement\ncannot be used with the group_replication_recovery channel. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-channels.html for\nmore information.\n\nWhen using statement-based replication: changing the source while it\nhas open temporary tables is potentially unsafe. This is one of the\nreasons why statement-based replication of temporary tables is not\nrecommended. You can find out whether there are any temporary tables on\nthe replica by checking the value of Slave_open_temp_tables; when using\nstatement-based replication, this value should be 0 before executing\nCHANGE MASTER TO. If there are any temporary tables open on the\nreplica, issuing a CHANGE MASTER TO statement after issuing a STOP\nSLAVE causes an ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO\n(https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference.h\ntml#error_er_warn_open_temp_tables_must_be_zero) warning.\n\nWhen using a multithreaded replica (slave_parallel_workers is a nonzero\nvalue), any gaps in the sequence of transactions executed from the\nrelay log are closed as part of stopping the worker threads. If the\nreplica is stopped unexpectedly (for example due to an error in a\nworker thread, or another thread issuing KILL) while a STOP SLAVE\nstatement is executing, the sequence of executed transactions from the\nrelay log may become inconsistent. See\nhttps://dev.mysql.com/doc/refman/5.7/en/replication-features-transactio\nn-inconsistencies.html, for more information.\n\nIf the current replication event group has modified one or more\nnontransactional tables, STOP SLAVE waits for up to 60 seconds for the\nevent group to complete, unless you issue a KILL QUERY or KILL\nCONNECTION statement for the replication SQL thread. If the event group\nremains incomplete after the timeout, an error message is logged.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/stop-slave.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/stop-slave.html'),(557,'PREPARE',42,'Syntax:\nPREPARE stmt_name FROM preparable_stmt\n\nThe PREPARE statement prepares a SQL statement and assigns it a name,\nstmt_name, by which to refer to the statement later. The prepared\nstatement is executed with EXECUTE and released with DEALLOCATE\nPREPARE. For examples, see\nhttps://dev.mysql.com/doc/refman/5.7/en/sql-prepared-statements.html.\n\nStatement names are not case-sensitive. preparable_stmt is either a\nstring literal or a user variable that contains the text of the SQL\nstatement. The text must represent a single statement, not multiple\nstatements. Within the statement, ? characters can be used as parameter\nmarkers to indicate where data values are to be bound to the query\nlater when you execute it. The ? characters should not be enclosed\nwithin quotation marks, even if you intend to bind them to string\nvalues. Parameter markers can be used only where data values should\nappear, not for SQL keywords, identifiers, and so forth.\n\nIf a prepared statement with the given name already exists, it is\ndeallocated implicitly before the new statement is prepared. This means\nthat if the new statement contains an error and cannot be prepared, an\nerror is returned and no statement with the given name exists.\n\nThe scope of a prepared statement is the session within which it is\ncreated, which as several implications:\n\no A prepared statement created in one session is not available to other\n  sessions.\n\no When a session ends, whether normally or abnormally, its prepared\n  statements no longer exist. If auto-reconnect is enabled, the client\n  is not notified that the connection was lost. For this reason,\n  clients may wish to disable auto-reconnect. See Automatic\n  Reconnection Control\n  (https://dev.mysql.com/doc/c-api/5.7/en/c-api-auto-reconnect.html).\n\no A prepared statement created within a stored program continues to\n  exist after the program finishes executing and can be executed\n  outside the program later.\n\no A statement prepared in stored program context cannot refer to stored\n  procedure or function parameters or local variables because they go\n  out of scope when the program ends and would be unavailable were the\n  statement to be executed later outside the program. As a workaround,\n  refer instead to user-defined variables, which also have session\n  scope; see\n  https://dev.mysql.com/doc/refman/5.7/en/user-variables.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/prepare.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/prepare.html'),(558,'EXECUTE STATEMENT',42,'Syntax:\nEXECUTE stmt_name\n    [USING @var_name [, @var_name] ...]\n\nAfter preparing a statement with PREPARE, you execute it with an\nEXECUTE statement that refers to the prepared statement name. If the\nprepared statement contains any parameter markers, you must supply a\nUSING clause that lists user variables containing the values to be\nbound to the parameters. Parameter values can be supplied only by user\nvariables, and the USING clause must name exactly as many variables as\nthe number of parameter markers in the statement.\n\nYou can execute a given prepared statement multiple times, passing\ndifferent variables to it or setting the variables to different values\nbefore each execution.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/execute.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/execute.html'),(559,'DEALLOCATE PREPARE',42,'Syntax:\n{DEALLOCATE | DROP} PREPARE stmt_name\n\nTo deallocate a prepared statement produced with PREPARE, use a\nDEALLOCATE PREPARE statement that refers to the prepared statement\nname. Attempting to execute a prepared statement after deallocating it\nresults in an error. If too many prepared statements are created and\nnot deallocated by either the DEALLOCATE PREPARE statement or the end\nof the session, you might encounter the upper limit enforced by the\nmax_prepared_stmt_count system variable.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/deallocate-prepare.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/deallocate-prepare.html'),(560,'DROP PREPARE',42,'Syntax:\n{DEALLOCATE | DROP} PREPARE stmt_name\n\nTo deallocate a prepared statement produced with PREPARE, use a\nDEALLOCATE PREPARE statement that refers to the prepared statement\nname. Attempting to execute a prepared statement after deallocating it\nresults in an error. If too many prepared statements are created and\nnot deallocated by either the DEALLOCATE PREPARE statement or the end\nof the session, you might encounter the upper limit enforced by the\nmax_prepared_stmt_count system variable.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/deallocate-prepare.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/deallocate-prepare.html'),(561,'BEGIN END',43,'Syntax:\n[begin_label:] BEGIN\n    [statement_list]\nEND [end_label]\n\nBEGIN ... END syntax is used for writing compound statements, which can\nappear within stored programs (stored procedures and functions,\ntriggers, and events). A compound statement can contain multiple\nstatements, enclosed by the BEGIN and END keywords. statement_list\nrepresents a list of one or more statements, each terminated by a\nsemicolon (;) statement delimiter. The statement_list itself is\noptional, so the empty compound statement (BEGIN END) is legal.\n\nBEGIN ... END blocks can be nested.\n\nUse of multiple statements requires that a client is able to send\nstatement strings containing the ; statement delimiter. In the mysql\ncommand-line client, this is handled with the delimiter command.\nChanging the ; end-of-statement delimiter (for example, to //) permit ;\nto be used in a program body. For an example, see\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-programs-defining.html.\n\nA BEGIN ... END block can be labeled. See [HELP labels].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/begin-end.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/begin-end.html'),(562,'LABELS',43,'Syntax:\n[begin_label:] BEGIN\n    [statement_list]\nEND [end_label]\n\n[begin_label:] LOOP\n    statement_list\nEND LOOP [end_label]\n\n[begin_label:] REPEAT\n    statement_list\nUNTIL search_condition\nEND REPEAT [end_label]\n\n[begin_label:] WHILE search_condition DO\n    statement_list\nEND WHILE [end_label]\n\nLabels are permitted for BEGIN ... END blocks and for the LOOP, REPEAT,\nand WHILE statements. Label use for those statements follows these\nrules:\n\no begin_label must be followed by a colon.\n\no begin_label can be given without end_label. If end_label is present,\n  it must be the same as begin_label.\n\no end_label cannot be given without begin_label.\n\no Labels at the same nesting level must be distinct.\n\no Labels can be up to 16 characters long.\n\nTo refer to a label within the labeled construct, use an ITERATE or\nLEAVE statement. The following example uses those statements to\ncontinue iterating or terminate the loop:\n\nCREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n  label1: LOOP\n    SET p1 = p1 + 1;\n    IF p1 < 10 THEN ITERATE label1; END IF;\n    LEAVE label1;\n  END LOOP label1;\nEND;\n\nThe scope of a block label does not include the code for handlers\ndeclared within the block. For details, see [HELP DECLARE HANDLER].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/statement-labels.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/statement-labels.html'),(563,'DECLARE VARIABLE',43,'Syntax:\nDECLARE var_name [, var_name] ... type [DEFAULT value]\n\nThis statement declares local variables within stored programs. To\nprovide a default value for a variable, include a DEFAULT clause. The\nvalue can be specified as an expression; it need not be a constant. If\nthe DEFAULT clause is missing, the initial value is NULL.\n\nLocal variables are treated like stored routine parameters with respect\nto data type and overflow checking. See [HELP CREATE PROCEDURE].\n\nVariable declarations must appear before cursor or handler\ndeclarations.\n\nLocal variable names are not case-sensitive. Permissible characters and\nquoting rules are the same as for other identifiers, as described in\nhttps://dev.mysql.com/doc/refman/5.7/en/identifiers.html.\n\nThe scope of a local variable is the BEGIN ... END block within which\nit is declared. The variable can be referred to in blocks nested within\nthe declaring block, except those blocks that declare a variable with\nthe same name.\n\nFor examples of variable declarations, see\nhttps://dev.mysql.com/doc/refman/5.7/en/local-variable-scope.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/declare-local-variable.html'),(564,'CASE STATEMENT',43,'Syntax:\nCASE case_value\n    WHEN when_value THEN statement_list\n    [WHEN when_value THEN statement_list] ...\n    [ELSE statement_list]\nEND CASE\n\nOr:\n\nCASE\n    WHEN search_condition THEN statement_list\n    [WHEN search_condition THEN statement_list] ...\n    [ELSE statement_list]\nEND CASE\n\nThe CASE statement for stored programs implements a complex conditional\nconstruct.\n\n*Note*:\n\nThere is also a CASE operator, which differs from the CASE statement\ndescribed here. See\nhttps://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html.\nThe CASE statement cannot have an ELSE NULL clause, and it is\nterminated with END CASE instead of END.\n\nFor the first syntax, case_value is an expression. This value is\ncompared to the when_value expression in each WHEN clause until one of\nthem is equal. When an equal when_value is found, the corresponding\nTHEN clause statement_list executes. If no when_value is equal, the\nELSE clause statement_list executes, if there is one.\n\nThis syntax cannot be used to test for equality with NULL because NULL\n= NULL is false. See\nhttps://dev.mysql.com/doc/refman/5.7/en/working-with-null.html.\n\nFor the second syntax, each WHEN clause search_condition expression is\nevaluated until one is true, at which point its corresponding THEN\nclause statement_list executes. If no search_condition is equal, the\nELSE clause statement_list executes, if there is one.\n\nIf no when_value or search_condition matches the value tested and the\nCASE statement contains no ELSE clause, a Case not found for CASE\nstatement error results.\n\nEach statement_list consists of one or more SQL statements; an empty\nstatement_list is not permitted.\n\nTo handle situations where no value is matched by any WHEN clause, use\nan ELSE containing an empty BEGIN ... END block, as shown in this\nexample. (The indentation used here in the ELSE clause is for purposes\nof clarity only, and is not otherwise significant.)\n\nDELIMITER |\n\nCREATE PROCEDURE p()\n  BEGIN\n    DECLARE v INT DEFAULT 1;\n\n    CASE v\n      WHEN 2 THEN SELECT v;\n      WHEN 3 THEN SELECT 0;\n      ELSE\n        BEGIN\n        END;\n    END CASE;\n  END;\n  |\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/case.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/case.html'),(565,'IF STATEMENT',43,'Syntax:\nIF search_condition THEN statement_list\n    [ELSEIF search_condition THEN statement_list] ...\n    [ELSE statement_list]\nEND IF\n\nThe IF statement for stored programs implements a basic conditional\nconstruct.\n\n*Note*:\n\nThere is also an IF() function, which differs from the IF statement\ndescribed here. See\nhttps://dev.mysql.com/doc/refman/5.7/en/flow-control-functions.html.\nThe IF statement can have THEN, ELSE, and ELSEIF clauses, and it is\nterminated with END IF.\n\nIf a given search_condition evaluates to true, the corresponding THEN\nor ELSEIF clause statement_list executes. If no search_condition\nmatches, the ELSE clause statement_list executes.\n\nEach statement_list consists of one or more SQL statements; an empty\nstatement_list is not permitted.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/if.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/if.html'),(566,'ITERATE',43,'Syntax:\nITERATE label\n\nITERATE can appear only within LOOP, REPEAT, and WHILE statements.\nITERATE means \"start the loop again.\"\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/iterate.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/iterate.html'),(567,'LEAVE',43,'Syntax:\nLEAVE label\n\nThis statement is used to exit the flow control construct that has the\ngiven label. If the label is for the outermost stored program block,\nLEAVE exits the program.\n\nLEAVE can be used within BEGIN ... END or loop constructs (LOOP,\nREPEAT, WHILE).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/leave.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/leave.html'),(568,'LOOP',43,'Syntax:\n[begin_label:] LOOP\n    statement_list\nEND LOOP [end_label]\n\nLOOP implements a simple loop construct, enabling repeated execution of\nthe statement list, which consists of one or more statements, each\nterminated by a semicolon (;) statement delimiter. The statements\nwithin the loop are repeated until the loop is terminated. Usually,\nthis is accomplished with a LEAVE statement. Within a stored function,\nRETURN can also be used, which exits the function entirely.\n\nNeglecting to include a loop-termination statement results in an\ninfinite loop.\n\nA LOOP statement can be labeled. For the rules regarding label use, see\n[HELP labels].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/loop.html\n\n','CREATE PROCEDURE doiterate(p1 INT)\nBEGIN\n  label1: LOOP\n    SET p1 = p1 + 1;\n    IF p1 < 10 THEN\n      ITERATE label1;\n    END IF;\n    LEAVE label1;\n  END LOOP label1;\n  SET @x = p1;\nEND;\n','https://dev.mysql.com/doc/refman/5.7/en/loop.html'),(569,'REPEAT LOOP',43,'Syntax:\n[begin_label:] REPEAT\n    statement_list\nUNTIL search_condition\nEND REPEAT [end_label]\n\nThe statement list within a REPEAT statement is repeated until the\nsearch_condition expression is true. Thus, a REPEAT always enters the\nloop at least once. statement_list consists of one or more statements,\neach terminated by a semicolon (;) statement delimiter.\n\nA REPEAT statement can be labeled. For the rules regarding label use,\nsee [HELP labels].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/repeat.html\n\n','mysql> delimiter //\n\nmysql> CREATE PROCEDURE dorepeat(p1 INT)\n       BEGIN\n         SET @x = 0;\n         REPEAT\n           SET @x = @x + 1;\n         UNTIL @x > p1 END REPEAT;\n       END\n       //\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CALL dorepeat(1000)//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @x//\n+------+\n| @x   |\n+------+\n| 1001 |\n+------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/5.7/en/repeat.html'),(570,'RETURN',43,'Syntax:\nRETURN expr\n\nThe RETURN statement terminates execution of a stored function and\nreturns the value expr to the function caller. There must be at least\none RETURN statement in a stored function. There may be more than one\nif the function has multiple exit points.\n\nThis statement is not used in stored procedures, triggers, or events.\nThe LEAVE statement can be used to exit a stored program of those\ntypes.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/return.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/return.html'),(571,'WHILE',43,'Syntax:\n[begin_label:] WHILE search_condition DO\n    statement_list\nEND WHILE [end_label]\n\nThe statement list within a WHILE statement is repeated as long as the\nsearch_condition expression is true. statement_list consists of one or\nmore SQL statements, each terminated by a semicolon (;) statement\ndelimiter.\n\nA WHILE statement can be labeled. For the rules regarding label use,\nsee [HELP labels].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/while.html\n\n','CREATE PROCEDURE dowhile()\nBEGIN\n  DECLARE v1 INT DEFAULT 5;\n\n  WHILE v1 > 0 DO\n    ...\n    SET v1 = v1 - 1;\n  END WHILE;\nEND;\n','https://dev.mysql.com/doc/refman/5.7/en/while.html'),(572,'CLOSE',43,'Syntax:\nCLOSE cursor_name\n\nThis statement closes a previously opened cursor. For an example, see\nhttps://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nAn error occurs if the cursor is not open.\n\nIf not closed explicitly, a cursor is closed at the end of the BEGIN\n... END block in which it was declared.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/close.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/close.html'),(573,'DECLARE CURSOR',43,'Syntax:\nDECLARE cursor_name CURSOR FOR select_statement\n\nThis statement declares a cursor and associates it with a SELECT\nstatement that retrieves the rows to be traversed by the cursor. To\nfetch the rows later, use a FETCH statement. The number of columns\nretrieved by the SELECT statement must match the number of output\nvariables specified in the FETCH statement.\n\nThe SELECT statement cannot have an INTO clause.\n\nCursor declarations must appear before handler declarations and after\nvariable and condition declarations.\n\nA stored program may contain multiple cursor declarations, but each\ncursor declared in a given block must have a unique name. For an\nexample, see https://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nFor information available through SHOW statements, it is possible in\nmany cases to obtain equivalent information by using a cursor with an\nINFORMATION_SCHEMA table.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/declare-cursor.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/declare-cursor.html'),(574,'FETCH',43,'Syntax:\nFETCH [[NEXT] FROM] cursor_name INTO var_name [, var_name] ...\n\nThis statement fetches the next row for the SELECT statement associated\nwith the specified cursor (which must be open), and advances the cursor\npointer. If a row exists, the fetched columns are stored in the named\nvariables. The number of columns retrieved by the SELECT statement must\nmatch the number of output variables specified in the FETCH statement.\n\nIf no more rows are available, a No Data condition occurs with SQLSTATE\nvalue \'02000\'. To detect this condition, you can set up a handler for\nit (or for a NOT FOUND condition). For an example, see\nhttps://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nBe aware that another operation, such as a SELECT or another FETCH, may\nalso cause the handler to execute by raising the same condition. If it\nis necessary to distinguish which operation raised the condition, place\nthe operation within its own BEGIN ... END block so that it can be\nassociated with its own handler.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/fetch.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/fetch.html'),(575,'OPEN',43,'Syntax:\nOPEN cursor_name\n\nThis statement opens a previously declared cursor. For an example, see\nhttps://dev.mysql.com/doc/refman/5.7/en/cursors.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/open.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/open.html'),(576,'DECLARE CONDITION',43,'Syntax:\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value: {\n    mysql_error_code\n  | SQLSTATE [VALUE] sqlstate_value\n}\n\nThe DECLARE ... CONDITION statement declares a named error condition,\nassociating a name with a condition that needs specific handling. The\nname can be referred to in a subsequent DECLARE ... HANDLER statement\n(see [HELP DECLARE HANDLER]).\n\nCondition declarations must appear before cursor or handler\ndeclarations.\n\nThe condition_value for DECLARE ... CONDITION indicates the specific\ncondition or class of conditions to associate with the condition name.\nIt can take the following forms:\n\no mysql_error_code: An integer literal indicating a MySQL error code.\n\n  Do not use MySQL error code 0 because that indicates success rather\n  than an error condition. For a list of MySQL error codes, see Server\n  Error Message Reference\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html).\n\no SQLSTATE [VALUE] sqlstate_value: A 5-character string literal\n  indicating an SQLSTATE value.\n\n  Do not use SQLSTATE values that begin with \'00\' because those\n  indicate success rather than an error condition. For a list of\n  SQLSTATE values, see Server Error Message Reference\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html).\n\nCondition names referred to in SIGNAL or use RESIGNAL statements must\nbe associated with SQLSTATE values, not MySQL error codes.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/declare-condition.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/declare-condition.html'),(577,'DECLARE HANDLER',43,'Syntax:\nDECLARE handler_action HANDLER\n    FOR condition_value [, condition_value] ...\n    statement\n\nhandler_action: {\n    CONTINUE\n  | EXIT\n  | UNDO\n}\n\ncondition_value: {\n    mysql_error_code\n  | SQLSTATE [VALUE] sqlstate_value\n  | condition_name\n  | SQLWARNING\n  | NOT FOUND\n  | SQLEXCEPTION\n}\n\nThe DECLARE ... HANDLER statement specifies a handler that deals with\none or more conditions. If one of these conditions occurs, the\nspecified statement executes. statement can be a simple statement such\nas SET var_name = value, or a compound statement written using BEGIN\nand END (see [HELP BEGIN END]).\n\nHandler declarations must appear after variable or condition\ndeclarations.\n\nThe handler_action value indicates what action the handler takes after\nexecution of the handler statement:\n\no CONTINUE: Execution of the current program continues.\n\no EXIT: Execution terminates for the BEGIN ... END compound statement\n  in which the handler is declared. This is true even if the condition\n  occurs in an inner block.\n\no UNDO: Not supported.\n\nThe condition_value for DECLARE ... HANDLER indicates the specific\ncondition or class of conditions that activates the handler. It can\ntake the following forms:\n\no mysql_error_code: An integer literal indicating a MySQL error code,\n  such as 1051 to specify \"unknown table\":\n\nDECLARE CONTINUE HANDLER FOR 1051\n  BEGIN\n    -- body of handler\n  END;\n\n  Do not use MySQL error code 0 because that indicates success rather\n  than an error condition. For a list of MySQL error codes, see Server\n  Error Message Reference\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html).\n\no SQLSTATE [VALUE] sqlstate_value: A 5-character string literal\n  indicating an SQLSTATE value, such as \'42S01\' to specify \"unknown\n  table\":\n\nDECLARE CONTINUE HANDLER FOR SQLSTATE \'42S02\'\n  BEGIN\n    -- body of handler\n  END;\n\n  Do not use SQLSTATE values that begin with \'00\' because those\n  indicate success rather than an error condition. For a list of\n  SQLSTATE values, see Server Error Message Reference\n  (https://dev.mysql.com/doc/mysql-errors/5.7/en/server-error-reference\n  .html).\n\no condition_name: A condition name previously specified with DECLARE\n  ... CONDITION. A condition name can be associated with a MySQL error\n  code or SQLSTATE value. See [HELP DECLARE CONDITION].\n\no SQLWARNING: Shorthand for the class of SQLSTATE values that begin\n  with \'01\'.\n\nDECLARE CONTINUE HANDLER FOR SQLWARNING\n  BEGIN\n    -- body of handler\n  END;\n\no NOT FOUND: Shorthand for the class of SQLSTATE values that begin with\n  \'02\'. This is relevant within the context of cursors and is used to\n  control what happens when a cursor reaches the end of a data set. If\n  no more rows are available, a No Data condition occurs with SQLSTATE\n  value \'02000\'. To detect this condition, you can set up a handler for\n  it or for a NOT FOUND condition.\n\nDECLARE CONTINUE HANDLER FOR NOT FOUND\n  BEGIN\n    -- body of handler\n  END;\n\n  For another example, see\n  https://dev.mysql.com/doc/refman/5.7/en/cursors.html. The NOT FOUND\n  condition also occurs for SELECT ... INTO var_list statements that\n  retrieve no rows.\n\no SQLEXCEPTION: Shorthand for the class of SQLSTATE values that do not\n  begin with \'00\', \'01\', or \'02\'.\n\nDECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n  BEGIN\n    -- body of handler\n  END;\n\nFor information about how the server chooses handlers when a condition\noccurs, see https://dev.mysql.com/doc/refman/5.7/en/handler-scope.html.\n\nIf a condition occurs for which no handler has been declared, the\naction taken depends on the condition class:\n\no For SQLEXCEPTION conditions, the stored program terminates at the\n  statement that raised the condition, as if there were an EXIT\n  handler. If the program was called by another stored program, the\n  calling program handles the condition using the handler selection\n  rules applied to its own handlers.\n\no For SQLWARNING conditions, the program continues executing, as if\n  there were a CONTINUE handler.\n\no For NOT FOUND conditions, if the condition was raised normally, the\n  action is CONTINUE. If it was raised by SIGNAL or RESIGNAL, the\n  action is EXIT.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/declare-handler.html\n\n','mysql> CREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> delimiter //\n\nmysql> CREATE PROCEDURE handlerdemo ()\n       BEGIN\n         DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n         SET @x = 1;\n         INSERT INTO test.t VALUES (1);\n         SET @x = 2;\n         INSERT INTO test.t VALUES (1);\n         SET @x = 3;\n       END;\n       //\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> CALL handlerdemo()//\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SELECT @x//\n    +------+\n    | @x   |\n    +------+\n    | 3    |\n    +------+\n    1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/5.7/en/declare-handler.html'),(578,'GET DIAGNOSTICS',43,'Syntax:\nGET [CURRENT | STACKED] DIAGNOSTICS {\n    statement_information_item\n    [, statement_information_item] ...\n  | CONDITION condition_number\n    condition_information_item\n    [, condition_information_item] ...\n}\n\nstatement_information_item:\n    target = statement_information_item_name\n\ncondition_information_item:\n    target = condition_information_item_name\n\nstatement_information_item_name: {\n    NUMBER\n  | ROW_COUNT\n}\n\ncondition_information_item_name: {\n    CLASS_ORIGIN\n  | SUBCLASS_ORIGIN\n  | RETURNED_SQLSTATE\n  | MESSAGE_TEXT\n  | MYSQL_ERRNO\n  | CONSTRAINT_CATALOG\n  | CONSTRAINT_SCHEMA\n  | CONSTRAINT_NAME\n  | CATALOG_NAME\n  | SCHEMA_NAME\n  | TABLE_NAME\n  | COLUMN_NAME\n  | CURSOR_NAME\n}\n\ncondition_number, target:\n    (see following discussion)\n\nSQL statements produce diagnostic information that populates the\ndiagnostics area. The GET DIAGNOSTICS statement enables applications to\ninspect this information. (You can also use SHOW WARNINGS or SHOW\nERRORS to see conditions or errors.)\n\nNo special privileges are required to execute GET DIAGNOSTICS.\n\nThe keyword CURRENT means to retrieve information from the current\ndiagnostics area. The keyword STACKED means to retrieve information\nfrom the second diagnostics area, which is available only if the\ncurrent context is a condition handler. If neither keyword is given,\nthe default is to use the current diagnostics area.\n\nThe GET DIAGNOSTICS statement is typically used in a handler within a\nstored program. It is a MySQL extension that GET [CURRENT] DIAGNOSTICS\nis permitted outside handler context to check the execution of any SQL\nstatement. For example, if you invoke the mysql client program, you can\nenter these statements at the prompt:\n\nmysql> DROP TABLE test.no_such_table;\nERROR 1051 (42S02): Unknown table \'test.no_such_table\'\nmysql> GET DIAGNOSTICS CONDITION 1\n         @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;\nmysql> SELECT @p1, @p2;\n+-------+------------------------------------+\n| @p1   | @p2                                |\n+-------+------------------------------------+\n| 42S02 | Unknown table \'test.no_such_table\' |\n+-------+------------------------------------+\n\nThis extension applies only to the current diagnostics area. It does\nnot apply to the second diagnostics area because GET STACKED\nDIAGNOSTICS is permitted only if the current context is a condition\nhandler. If that is not the case, a GET STACKED DIAGNOSTICS when\nhandler not active error occurs.\n\nFor a description of the diagnostics area, see\nhttps://dev.mysql.com/doc/refman/5.7/en/diagnostics-area.html. Briefly,\nit contains two kinds of information:\n\no Statement information, such as the number of conditions that occurred\n  or the affected-rows count.\n\no Condition information, such as the error code and message. If a\n  statement raises multiple conditions, this part of the diagnostics\n  area has a condition area for each one. If a statement raises no\n  conditions, this part of the diagnostics area is empty.\n\nFor a statement that produces three conditions, the diagnostics area\ncontains statement and condition information like this:\n\nStatement information:\n  row count\n  ... other statement information items ...\nCondition area list:\n  Condition area 1:\n    error code for condition 1\n    error message for condition 1\n    ... other condition information items ...\n  Condition area 2:\n    error code for condition 2:\n    error message for condition 2\n    ... other condition information items ...\n  Condition area 3:\n    error code for condition 3\n    error message for condition 3\n    ... other condition information items ...\n\nGET DIAGNOSTICS can obtain either statement or condition information,\nbut not both in the same statement:\n\no To obtain statement information, retrieve the desired statement items\n  into target variables. This instance of GET DIAGNOSTICS assigns the\n  number of available conditions and the rows-affected count to the\n  user variables @p1 and @p2:\n\nGET DIAGNOSTICS @p1 = NUMBER, @p2 = ROW_COUNT;\n\no To obtain condition information, specify the condition number and\n  retrieve the desired condition items into target variables. This\n  instance of GET DIAGNOSTICS assigns the SQLSTATE value and error\n  message to the user variables @p3 and @p4:\n\nGET DIAGNOSTICS CONDITION 1\n  @p3 = RETURNED_SQLSTATE, @p4 = MESSAGE_TEXT;\n\nThe retrieval list specifies one or more target = item_name\nassignments, separated by commas. Each assignment names a target\nvariable and either a statement_information_item_name or\ncondition_information_item_name designator, depending on whether the\nstatement retrieves statement or condition information.\n\nValid target designators for storing item information can be stored\nprocedure or function parameters, stored program local variables\ndeclared with DECLARE, or user-defined variables.\n\nValid condition_number designators can be stored procedure or function\nparameters, stored program local variables declared with DECLARE,\nuser-defined variables, system variables, or literals. A character\nliteral may include a _charset introducer. A warning occurs if the\ncondition number is not in the range from 1 to the number of condition\nareas that have information. In this case, the warning is added to the\ndiagnostics area without clearing it.\n\nWhen a condition occurs, MySQL does not populate all condition items\nrecognized by GET DIAGNOSTICS. For example:\n\nmysql> GET DIAGNOSTICS CONDITION 1\n         @p5 = SCHEMA_NAME, @p6 = TABLE_NAME;\nmysql> SELECT @p5, @p6;\n+------+------+\n| @p5  | @p6  |\n+------+------+\n|      |      |\n+------+------+\n\nIn standard SQL, if there are multiple conditions, the first condition\nrelates to the SQLSTATE value returned for the previous SQL statement.\nIn MySQL, this is not guaranteed. To get the main error, you cannot do\nthis:\n\nGET DIAGNOSTICS CONDITION 1 @errno = MYSQL_ERRNO;\n\nInstead, retrieve the condition count first, then use it to specify\nwhich condition number to inspect:\n\nGET DIAGNOSTICS @cno = NUMBER;\nGET DIAGNOSTICS CONDITION @cno @errno = MYSQL_ERRNO;\n\nFor information about permissible statement and condition information\nitems, and which ones are populated when a condition occurs, see\nhttps://dev.mysql.com/doc/refman/5.7/en/diagnostics-area.html#diagnosti\ncs-area-information-items.\n\nHere is an example that uses GET DIAGNOSTICS and an exception handler\nin stored procedure context to assess the outcome of an insert\noperation. If the insert was successful, the procedure uses GET\nDIAGNOSTICS to get the rows-affected count. This shows that you can use\nGET DIAGNOSTICS multiple times to retrieve information about a\nstatement as long as the current diagnostics area has not been cleared.\n\nCREATE PROCEDURE do_insert(value INT)\nBEGIN\n  -- Declare variables to hold diagnostics area information\n  DECLARE code CHAR(5) DEFAULT \'00000\';\n  DECLARE msg TEXT;\n  DECLARE nrows INT;\n  DECLARE result TEXT;\n  -- Declare exception handler for failed insert\n  DECLARE CONTINUE HANDLER FOR SQLEXCEPTION\n    BEGIN\n      GET DIAGNOSTICS CONDITION 1\n        code = RETURNED_SQLSTATE, msg = MESSAGE_TEXT;\n    END;\n\n  -- Perform the insert\n  INSERT INTO t1 (int_col) VALUES(value);\n  -- Check whether the insert was successful\n  IF code = \'00000\' THEN\n    GET DIAGNOSTICS nrows = ROW_COUNT;\n    SET result = CONCAT(\'insert succeeded, row count = \',nrows);\n  ELSE\n    SET result = CONCAT(\'insert failed, error = \',code,\', message = \',msg);\n  END IF;\n  -- Say what happened\n  SELECT result;\nEND;\n\nSuppose that t1.int_col is an integer column that is declared as NOT\nNULL. The procedure produces these results when invoked to insert\nnon-NULL and NULL values, respectively:\n\nmysql> CALL do_insert(1);\n+---------------------------------+\n| result                          |\n+---------------------------------+\n| insert succeeded, row count = 1 |\n+---------------------------------+\n\nmysql> CALL do_insert(NULL);\n+-------------------------------------------------------------------------+\n| result                                                                  |\n+-------------------------------------------------------------------------+\n| insert failed, error = 23000, message = Column \'int_col\' cannot be null |\n+-------------------------------------------------------------------------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/get-diagnostics.html'),(579,'RESIGNAL',43,'Syntax:\nRESIGNAL [condition_value]\n    [SET signal_information_item\n    [, signal_information_item] ...]\n\ncondition_value: {\n    SQLSTATE [VALUE] sqlstate_value\n  | condition_name\n}\n\nsignal_information_item:\n    condition_information_item_name = simple_value_specification\n\ncondition_information_item_name: {\n    CLASS_ORIGIN\n  | SUBCLASS_ORIGIN\n  | MESSAGE_TEXT\n  | MYSQL_ERRNO\n  | CONSTRAINT_CATALOG\n  | CONSTRAINT_SCHEMA\n  | CONSTRAINT_NAME\n  | CATALOG_NAME\n  | SCHEMA_NAME\n  | TABLE_NAME\n  | COLUMN_NAME\n  | CURSOR_NAME\n}\n\ncondition_name, simple_value_specification:\n    (see following discussion)\n\nRESIGNAL passes on the error condition information that is available\nduring execution of a condition handler within a compound statement\ninside a stored procedure or function, trigger, or event. RESIGNAL may\nchange some or all information before passing it on. RESIGNAL is\nrelated to SIGNAL, but instead of originating a condition as SIGNAL\ndoes, RESIGNAL relays existing condition information, possibly after\nmodifying it.\n\nRESIGNAL makes it possible to both handle an error and return the error\ninformation. Otherwise, by executing an SQL statement within the\nhandler, information that caused the handler\'s activation is destroyed.\nRESIGNAL also can make some procedures shorter if a given handler can\nhandle part of a situation, then pass the condition \"up the line\" to\nanother handler.\n\nNo privileges are required to execute the RESIGNAL statement.\n\nAll forms of RESIGNAL require that the current context be a condition\nhandler. Otherwise, RESIGNAL is illegal and a RESIGNAL when handler not\nactive error occurs.\n\nTo retrieve information from the diagnostics area, use the GET\nDIAGNOSTICS statement (see [HELP GET DIAGNOSTICS]). For information\nabout the diagnostics area, see\nhttps://dev.mysql.com/doc/refman/5.7/en/diagnostics-area.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/resignal.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/resignal.html'),(580,'SIGNAL',43,'Syntax:\nSIGNAL condition_value\n    [SET signal_information_item\n    [, signal_information_item] ...]\n\ncondition_value: {\n    SQLSTATE [VALUE] sqlstate_value\n  | condition_name\n}\n\nsignal_information_item:\n    condition_information_item_name = simple_value_specification\n\ncondition_information_item_name: {\n    CLASS_ORIGIN\n  | SUBCLASS_ORIGIN\n  | MESSAGE_TEXT\n  | MYSQL_ERRNO\n  | CONSTRAINT_CATALOG\n  | CONSTRAINT_SCHEMA\n  | CONSTRAINT_NAME\n  | CATALOG_NAME\n  | SCHEMA_NAME\n  | TABLE_NAME\n  | COLUMN_NAME\n  | CURSOR_NAME\n}\n\ncondition_name, simple_value_specification:\n    (see following discussion)\n\nSIGNAL is the way to \"return\" an error. SIGNAL provides error\ninformation to a handler, to an outer portion of the application, or to\nthe client. Also, it provides control over the error\'s characteristics\n(error number, SQLSTATE value, message). Without SIGNAL, it is\nnecessary to resort to workarounds such as deliberately referring to a\nnonexistent table to cause a routine to return an error.\n\nNo privileges are required to execute the SIGNAL statement.\n\nTo retrieve information from the diagnostics area, use the GET\nDIAGNOSTICS statement (see [HELP GET DIAGNOSTICS]). For information\nabout the diagnostics area, see\nhttps://dev.mysql.com/doc/refman/5.7/en/diagnostics-area.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/signal.html\n\n','CREATE PROCEDURE p (pval INT)\nBEGIN\n  DECLARE specialty CONDITION FOR SQLSTATE \'45000\';\n  IF pval = 0 THEN\n    SIGNAL SQLSTATE \'01000\';\n  ELSEIF pval = 1 THEN\n    SIGNAL SQLSTATE \'45000\'\n      SET MESSAGE_TEXT = \'An error occurred\';\n  ELSEIF pval = 2 THEN\n    SIGNAL specialty\n      SET MESSAGE_TEXT = \'An error occurred\';\n  ELSE\n    SIGNAL SQLSTATE \'01000\'\n      SET MESSAGE_TEXT = \'A warning occurred\', MYSQL_ERRNO = 1000;\n    SIGNAL SQLSTATE \'45000\'\n      SET MESSAGE_TEXT = \'An error occurred\', MYSQL_ERRNO = 1001;\n  END IF;\nEND;\n','https://dev.mysql.com/doc/refman/5.7/en/signal.html'),(581,'ALTER USER',44,'Syntax:\nALTER USER [IF EXISTS]\n    user [auth_option] [, user [auth_option]] ...\n    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n    [WITH resource_option [resource_option] ...]\n    [password_option | lock_option] ...\n\nALTER USER [IF EXISTS]\n    USER() IDENTIFIED BY \'auth_string\'\n\nuser:\n    (see )\n\nauth_option: {\n    IDENTIFIED BY \'auth_string\'\n  | IDENTIFIED WITH auth_plugin\n  | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n  | IDENTIFIED WITH auth_plugin AS \'auth_string\'\n}\n\ntls_option: {\n   SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n    MAX_QUERIES_PER_HOUR count\n  | MAX_UPDATES_PER_HOUR count\n  | MAX_CONNECTIONS_PER_HOUR count\n  | MAX_USER_CONNECTIONS count\n}\n\npassword_option: {\n    PASSWORD EXPIRE\n  | PASSWORD EXPIRE DEFAULT\n  | PASSWORD EXPIRE NEVER\n  | PASSWORD EXPIRE INTERVAL N DAY\n}\n\nlock_option: {\n    ACCOUNT LOCK\n  | ACCOUNT UNLOCK\n}\n\nThe ALTER USER statement modifies MySQL accounts. It enables\nauthentication, SSL/TLS, resource-limit, and password-management\nproperties to be modified for existing accounts. It can also be used to\nlock and unlock accounts.\n\nTo use ALTER USER, you must have the global CREATE USER privilege or\nthe UPDATE privilege for the mysql system database. When the read_only\nsystem variable is enabled, ALTER USER additionally requires the SUPER\nprivilege.\n\nBy default, an error occurs if you try to modify a user that does not\nexist. If the IF EXISTS clause is given, the statement produces a\nwarning for each named user that does not exist, rather than an error.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/alter-user.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/alter-user.html'),(582,'CREATE USER',44,'Syntax:\nCREATE USER [IF NOT EXISTS]\n    user [auth_option] [, user [auth_option]] ...\n    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n    [WITH resource_option [resource_option] ...]\n    [password_option | lock_option] ...\n\nuser:\n    (see )\n\nauth_option: {\n    IDENTIFIED BY \'auth_string\'\n  | IDENTIFIED WITH auth_plugin\n  | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n  | IDENTIFIED WITH auth_plugin AS \'auth_string\'\n  | IDENTIFIED BY PASSWORD \'auth_string\'\n}\n\ntls_option: {\n   SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n}\n\nresource_option: {\n    MAX_QUERIES_PER_HOUR count\n  | MAX_UPDATES_PER_HOUR count\n  | MAX_CONNECTIONS_PER_HOUR count\n  | MAX_USER_CONNECTIONS count\n}\n\npassword_option: {\n    PASSWORD EXPIRE\n  | PASSWORD EXPIRE DEFAULT\n  | PASSWORD EXPIRE NEVER\n  | PASSWORD EXPIRE INTERVAL N DAY\n}\n\nlock_option: {\n    ACCOUNT LOCK\n  | ACCOUNT UNLOCK\n}\n\nThe CREATE USER statement creates new MySQL accounts. It enables\nauthentication, SSL/TLS, resource-limit, and password-management\nproperties to be established for new accounts, and controls whether\naccounts are initially locked or unlocked.\n\nTo use CREATE USER, you must have the global CREATE USER privilege, or\nthe INSERT privilege for the mysql system database. When the read_only\nsystem variable is enabled, CREATE USER additionally requires the SUPER\nprivilege.\n\nAn error occurs if you try to create an account that already exists. If\nthe IF NOT EXISTS clause is given, the statement produces a warning for\neach named account that already exists, rather than an error.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-user.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-user.html'),(583,'DROP USER',44,'Syntax:\nDROP USER [IF EXISTS] user [, user] ...\n\nThe DROP USER statement removes one or more MySQL accounts and their\nprivileges. It removes privilege rows for the account from all grant\ntables.\n\nTo use DROP USER, you must have the global CREATE USER privilege, or\nthe DELETE privilege for the mysql system database. When the read_only\nsystem variable is enabled, DROP USER additionally requires the SUPER\nprivilege.\n\nAn error occurs if you try to drop an account that does not exist. If\nthe IF EXISTS clause is given, the statement produces a warning for\neach named user that does not exist, rather than an error.\n\nEach account name uses the format described in\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html. For\nexample:\n\nDROP USER \'jeffrey\'@\'localhost\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-user.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-user.html'),(584,'GRANT',44,'Syntax:\nGRANT\n    priv_type [(column_list)]\n      [, priv_type [(column_list)]] ...\n    ON [object_type] priv_level\n    TO user [auth_option] [, user [auth_option]] ...\n    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n    [WITH {GRANT OPTION | resource_option} ...]\n\nGRANT PROXY ON user\n    TO user [, user] ...\n    [WITH GRANT OPTION]\n\nobject_type: {\n    TABLE\n  | FUNCTION\n  | PROCEDURE\n}\n\npriv_level: {\n    *\n  | *.*\n  | db_name.*\n  | db_name.tbl_name\n  | tbl_name\n  | db_name.routine_name\n}\n\nuser:\n    (see https://dev.mysql.com/doc/refman/5.7/en/account-names.html)\n\nauth_option: {\n    IDENTIFIED BY \'auth_string\'\n  | IDENTIFIED WITH auth_plugin\n  | IDENTIFIED WITH auth_plugin BY \'auth_string\'\n  | IDENTIFIED WITH auth_plugin AS \'auth_string\'\n  | IDENTIFIED BY PASSWORD \'auth_string\'\n}\n\ntls_option: {\n    SSL\n  | X509\n  | CIPHER \'cipher\'\n  | ISSUER \'issuer\'\n  | SUBJECT \'subject\'\n}\n\nresource_option: {\n  | MAX_QUERIES_PER_HOUR count\n  | MAX_UPDATES_PER_HOUR count\n  | MAX_CONNECTIONS_PER_HOUR count\n  | MAX_USER_CONNECTIONS count\n}\n\nThe GRANT statement grants privileges to MySQL user accounts.\n\nTo grant a privilege with GRANT, you must have the GRANT OPTION\nprivilege, and you must have the privileges that you are granting.\n(Alternatively, if you have the UPDATE privilege for the grant tables\nin the mysql system database, you can grant any account any privilege.)\nWhen the read_only system variable is enabled, GRANT additionally\nrequires the SUPER privilege.\n\nThe REVOKE statement is related to GRANT and enables administrators to\nremove account privileges. See [HELP REVOKE].\n\nEach account name uses the format described in\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html. For\nexample:\n\nGRANT ALL ON db1.* TO \'jeffrey\'@\'localhost\';\n\nThe host name part of the account, if omitted, defaults to \'%\'.\n\nNormally, a database administrator first uses CREATE USER to create an\naccount and define its nonprivilege characteristics such as its\npassword, whether it uses secure connections, and limits on access to\nserver resources, then uses GRANT to define its privileges. ALTER USER\nmay be used to change the nonprivilege characteristics of existing\naccounts. For example:\n\nCREATE USER \'jeffrey\'@\'localhost\' IDENTIFIED BY \'password\';\nGRANT ALL ON db1.* TO \'jeffrey\'@\'localhost\';\nGRANT SELECT ON db2.invoice TO \'jeffrey\'@\'localhost\';\nALTER USER \'jeffrey\'@\'localhost\' WITH MAX_QUERIES_PER_HOUR 90;\n\n*Note*:\n\nExamples shown here include no IDENTIFIED clause. It is assumed that\nyou establish passwords with CREATE USER at account-creation time to\navoid creating insecure accounts.\n\n*Note*:\n\nIf an account named in a GRANT statement does not already exist, GRANT\nmay create it under the conditions described later in the discussion of\nthe NO_AUTO_CREATE_USER SQL mode. It is also possible to use GRANT to\nspecify nonprivilege account characteristics such as whether it uses\nsecure connections and limits on access to server resources.\n\nHowever, use of GRANT to create accounts or define nonprivilege\ncharacteristics is deprecated in MySQL 5.7. Instead, perform these\ntasks using CREATE USER or ALTER USER.\n\nFrom the mysql program, GRANT responds with Query OK, 0 rows affected\nwhen executed successfully. To determine what privileges result from\nthe operation, use SHOW GRANTS. See [HELP SHOW GRANTS].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/grant.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/grant.html'),(585,'RENAME USER',44,'Syntax:\nRENAME USER old_user TO new_user\n    [, old_user TO new_user] ...\n\nThe RENAME USER statement renames existing MySQL accounts. An error\noccurs for old accounts that do not exist or new accounts that already\nexist.\n\nTo use RENAME USER, you must have the global CREATE USER privilege, or\nthe UPDATE privilege for the mysql system database. When the read_only\nsystem variable is enabled, RENAME USER additionally requires the SUPER\nprivilege.\n\nEach account name uses the format described in\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html. For\nexample:\n\nRENAME USER \'jeffrey\'@\'localhost\' TO \'jeff\'@\'127.0.0.1\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nRENAME USER causes the privileges held by the old user to be those held\nby the new user. However, RENAME USER does not automatically drop or\ninvalidate databases or objects within them that the old user created.\nThis includes stored programs or views for which the DEFINER attribute\nnames the old user. Attempts to access such objects may produce an\nerror if they execute in definer security context. (For information\nabout security context, see\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html.)\n\nThe privilege changes take effect as indicated in\nhttps://dev.mysql.com/doc/refman/5.7/en/privilege-changes.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/rename-user.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/rename-user.html'),(586,'REVOKE',44,'Syntax:\nREVOKE\n    priv_type [(column_list)]\n      [, priv_type [(column_list)]] ...\n    ON [object_type] priv_level\n    FROM user [, user] ...\n\nREVOKE ALL [PRIVILEGES], GRANT OPTION\n    FROM user [, user] ...\n\nREVOKE PROXY ON user\n    FROM user [, user] ...\n\nThe REVOKE statement enables system administrators to revoke privileges\nfrom MySQL accounts.\n\nFor details on the levels at which privileges exist, the permissible\npriv_type, priv_level, and object_type values, and the syntax for\nspecifying users and passwords, see [HELP GRANT].\n\nWhen the read_only system variable is enabled, REVOKE requires the\nSUPER privilege in addition to any other required privileges described\nin the following discussion.\n\nEach account name uses the format described in\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html. For\nexample:\n\nREVOKE INSERT ON *.* FROM \'jeffrey\'@\'localhost\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nTo use the first REVOKE syntax, you must have the GRANT OPTION\nprivilege, and you must have the privileges that you are revoking.\n\nTo revoke all privileges, use the second syntax, which drops all\nglobal, database, table, column, and routine privileges for the named\nuser or users:\n\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...\n\nTo use this REVOKE syntax, you must have the global CREATE USER\nprivilege, or the UPDATE privilege for the mysql system database.\n\nUser accounts from which privileges are to be revoked must exist, but\nthe privileges to be revoked need not be currently granted to them.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/revoke.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/revoke.html'),(587,'SET PASSWORD',44,'Syntax:\nSET PASSWORD [FOR user] = password_option\n\npassword_option: {\n    \'auth_string\'\n  | PASSWORD(\'auth_string\')\n}\n\nThe SET PASSWORD statement assigns a password to a MySQL user account.\n\'auth_string\' represents a cleartext (unencrypted) password.\n\n*Note*:\n\no SET PASSWORD ... = PASSWORD(\'auth_string\') syntax is deprecated in\n  MySQL 5.7 and is removed in MySQL 8.0.\n\no SET PASSWORD ... = \'auth_string\' syntax is not deprecated, but ALTER\n  USER is the preferred statement for account alterations, including\n  assigning passwords. For example:\n\nALTER USER user IDENTIFIED BY \'auth_string\';\n\n*Important*:\n\nUnder some circumstances, SET PASSWORD may be recorded in server logs\nor on the client side in a history file such as ~/.mysql_history, which\nmeans that cleartext passwords may be read by anyone having read access\nto that information. For information about the conditions under which\nthis occurs for the server logs and how to control it, see\nhttps://dev.mysql.com/doc/refman/5.7/en/password-logging.html. For\nsimilar information about client-side logging, see\nhttps://dev.mysql.com/doc/refman/5.7/en/mysql-logging.html.\n\nSET PASSWORD can be used with or without a FOR clause that explicitly\nnames a user account:\n\no With a FOR user clause, the statement sets the password for the named\n  account, which must exist:\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = \'auth_string\';\n\no With no FOR user clause, the statement sets the password for the\n  current user:\n\nSET PASSWORD = \'auth_string\';\n\n  Any client who connects to the server using a nonanonymous account\n  can change the password for that account. (In particular, you can\n  change your own password.) To see which account the server\n  authenticated you as, invoke the CURRENT_USER() function:\n\nSELECT CURRENT_USER();\n\nIf a FOR user clause is given, the account name uses the format\ndescribed in\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html. For\nexample:\n\nSET PASSWORD FOR \'bob\'@\'%.example.org\' = \'auth_string\';\n\nThe host name part of the account name, if omitted, defaults to \'%\'.\n\nSetting the password for a named account (with a FOR clause) requires\nthe UPDATE privilege for the mysql system database. Setting the\npassword for yourself (for a nonanonymous account with no FOR clause)\nrequires no special privileges. When the read_only system variable is\nenabled, SET PASSWORD requires the SUPER privilege in addition to any\nother required privileges.\n\nThe password can be specified in these ways:\n\no Use a string without PASSWORD()\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = \'password\';\n\n  SET PASSWORD interprets the string as a cleartext string, passes it\n  to the authentication plugin associated with the account, and stores\n  the result returned by the plugin in the account row in the\n  mysql.user system table. (The plugin is given the opportunity to hash\n  the value into the encryption format it expects. The plugin may use\n  the value as specified, in which case no hashing occurs.)\n\no Use the PASSWORD() function (deprecated in MySQL 5.7)\n\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'password\');\n\n  The PASSWORD() argument is the cleartext (unencrypted) password.\n  PASSWORD() hashes the password and returns the encrypted password\n  string for storage in the account row in the mysql.user system table.\n\n  The PASSWORD() function hashes the password using the hashing method\n  determined by the value of the old_passwords system variable value.\n  Be sure that old_passwords has the value corresponding to the hashing\n  method expected by the authentication plugin associated with the\n  account. For example, if the account uses the mysql_native_password\n  plugin, the old_passwords value must be 0:\n\nSET old_passwords = 0;\nSET PASSWORD FOR \'jeffrey\'@\'localhost\' = PASSWORD(\'password\');\n\n  If the old_passwords value differs from that required by the\n  authentication plugin, the hashed password value returned by\n  PASSWORD() cannot be used by the plugin and correct authentication of\n  client connections cannot occur.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-password.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-password.html'),(588,'ANALYZE TABLE',45,'Syntax:\nANALYZE [NO_WRITE_TO_BINLOG | LOCAL]\n    TABLE tbl_name [, tbl_name] ...\n\nANALYZE TABLE performs a key distribution analysis and stores the\ndistribution for the named table or tables. For MyISAM tables, this\nstatement is equivalent to using myisamchk --analyze.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nANALYZE TABLE works with InnoDB, NDB, and MyISAM tables. It does not\nwork with views.\n\nANALYZE TABLE is supported for partitioned tables, and you can use\nALTER TABLE ... ANALYZE PARTITION to analyze one or more partitions;\nfor more information, see [HELP ALTER TABLE], and\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-maintenance.html.\n\nDuring the analysis, the table is locked with a read lock for InnoDB\nand MyISAM.\n\nANALYZE TABLE removes the table from the table definition cache, which\nrequires a flush lock. If there are long running statements or\ntransactions still using the table, subsequent statements and\ntransactions must wait for those operations to finish before the flush\nlock is released. Because ANALYZE TABLE itself typically finishes\nquickly, it may not be apparent that delayed transactions or statements\ninvolving the same table are due to the remaining flush lock.\n\nBy default, the server writes ANALYZE TABLE statements to the binary\nlog so that they replicate to replicas. To suppress logging, specify\nthe optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/analyze-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/analyze-table.html'),(589,'CHECK TABLE',45,'Syntax:\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption: {\n    FOR UPGRADE\n  | QUICK\n  | FAST\n  | MEDIUM\n  | EXTENDED\n  | CHANGED\n}\n\nCHECK TABLE checks a table or tables for errors. For MyISAM tables, the\nkey statistics are updated as well. CHECK TABLE can also check views\nfor problems, such as tables that are referenced in the view definition\nthat no longer exist.\n\nTo check a table, you must have some privilege for it.\n\nCHECK TABLE works for InnoDB, MyISAM, ARCHIVE, and CSV tables.\n\nBefore running CHECK TABLE on InnoDB tables, see\nhttps://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-in\nnodb.\n\nCHECK TABLE is supported for partitioned tables, and you can use ALTER\nTABLE ... CHECK PARTITION to check one or more partitions; for more\ninformation, see [HELP ALTER TABLE], and\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-maintenance.html.\n\nCHECK TABLE ignores virtual generated columns that are not indexed.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/check-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/check-table.html'),(590,'CHECKSUM TABLE',45,'Syntax:\nCHECKSUM TABLE tbl_name [, tbl_name] ... [QUICK | EXTENDED]\n\nCHECKSUM TABLE reports a checksum for the contents of a table. You can\nuse this statement to verify that the contents are the same before and\nafter a backup, rollback, or other operation that is intended to put\nthe data back to a known state.\n\nThis statement requires the SELECT privilege for the table.\n\nThis statement is not supported for views. If you run CHECKSUM TABLE\nagainst a view, the Checksum value is always NULL, and a warning is\nreturned.\n\nFor a nonexistent table, CHECKSUM TABLE returns NULL and generates a\nwarning.\n\nDuring the checksum operation, the table is locked with a read lock for\nInnoDB and MyISAM.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/checksum-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/checksum-table.html'),(591,'OPTIMIZE TABLE',45,'Syntax:\nOPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL]\n    TABLE tbl_name [, tbl_name] ...\n\nOPTIMIZE TABLE reorganizes the physical storage of table data and\nassociated index data, to reduce storage space and improve I/O\nefficiency when accessing the table. The exact changes made to each\ntable depend on the storage engine used by that table.\n\nUse OPTIMIZE TABLE in these cases, depending on the type of table:\n\no After doing substantial insert, update, or delete operations on an\n  InnoDB table that has its own .ibd file because it was created with\n  the innodb_file_per_table option enabled. The table and indexes are\n  reorganized, and disk space can be reclaimed for use by the operating\n  system.\n\no After doing substantial insert, update, or delete operations on\n  columns that are part of a FULLTEXT index in an InnoDB table. Set the\n  configuration option innodb_optimize_fulltext_only=1 first. To keep\n  the index maintenance period to a reasonable time, set the\n  innodb_ft_num_word_optimize option to specify how many words to\n  update in the search index, and run a sequence of OPTIMIZE TABLE\n  statements until the search index is fully updated.\n\no After deleting a large part of a MyISAM or ARCHIVE table, or making\n  many changes to a MyISAM or ARCHIVE table with variable-length rows\n  (tables that have VARCHAR, VARBINARY, BLOB, or TEXT columns). Deleted\n  rows are maintained in a linked list and subsequent INSERT operations\n  reuse old row positions. You can use OPTIMIZE TABLE to reclaim the\n  unused space and to defragment the data file. After extensive changes\n  to a table, this statement may also improve performance of statements\n  that use the table, sometimes significantly.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nOPTIMIZE TABLE works for InnoDB, MyISAM, and ARCHIVE tables. OPTIMIZE\nTABLE is also supported for dynamic columns of in-memory NDB tables. It\ndoes not work for fixed-width columns of in-memory tables, nor does it\nwork for Disk Data tables. The performance of OPTIMIZE on NDB Cluster\ntables can be tuned using --ndb-optimization-delay, which controls the\nlength of time to wait between processing batches of rows by OPTIMIZE\nTABLE. For more information, see Previous NDB Cluster Issues Resolved\nin NDB Cluster 8.0\n(https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster-limitations-reso\nlved.html).\n\nFor NDB Cluster tables, OPTIMIZE TABLE can be interrupted by (for\nexample) killing the SQL thread performing the OPTIMIZE operation.\n\nBy default, OPTIMIZE TABLE does not work for tables created using any\nother storage engine and returns a result indicating this lack of\nsupport. You can make OPTIMIZE TABLE work for other storage engines by\nstarting mysqld with the --skip-new option. In this case, OPTIMIZE\nTABLE is just mapped to ALTER TABLE.\n\nThis statement does not work with views.\n\nOPTIMIZE TABLE is supported for partitioned tables. For information\nabout using this statement with partitioned tables and table\npartitions, see\nhttps://dev.mysql.com/doc/refman/5.7/en/partitioning-maintenance.html.\n\nBy default, the server writes OPTIMIZE TABLE statements to the binary\nlog so that they replicate to replicas. To suppress logging, specify\nthe optional NO_WRITE_TO_BINLOG keyword or its alias LOCAL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/optimize-table.html'),(592,'REPAIR TABLE',45,'Syntax:\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL]\n    TABLE tbl_name [, tbl_name] ...\n    [QUICK] [EXTENDED] [USE_FRM]\n\nREPAIR TABLE repairs a possibly corrupted table, for certain storage\nengines only.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nAlthough normally you should never have to run REPAIR TABLE, if\ndisaster strikes, this statement is very likely to get back all your\ndata from a MyISAM table. If your tables become corrupted often, try to\nfind the reason for it, to eliminate the need to use REPAIR TABLE. See\nhttps://dev.mysql.com/doc/refman/5.7/en/crashing.html, and\nhttps://dev.mysql.com/doc/refman/5.7/en/myisam-table-problems.html.\n\nREPAIR TABLE checks the table to see whether an upgrade is required. If\nso, it performs the upgrade, following the same rules as CHECK TABLE\n... FOR UPGRADE. See [HELP CHECK TABLE], for more information.\n\n*Important*:\n\no Make a backup of a table before performing a table repair operation;\n  under some circumstances the operation might cause data loss.\n  Possible causes include but are not limited to file system errors.\n  See https://dev.mysql.com/doc/refman/5.7/en/backup-and-recovery.html.\n\no If the server exits during a REPAIR TABLE operation, it is essential\n  after restarting it that you immediately execute another REPAIR TABLE\n  statement for the table before performing any other operations on it.\n  In the worst case, you might have a new clean index file without\n  information about the data file, and then the next operation you\n  perform could overwrite the data file. This is an unlikely but\n  possible scenario that underscores the value of making a backup\n  first.\n\no In the event that a table on the source becomes corrupted and you run\n  REPAIR TABLE on it, any resulting changes to the original table are\n  not propagated to replicas.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/repair-table.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/repair-table.html'),(593,'CREATE FUNCTION LOADABLE FUNCTION',46,'Syntax:\nCREATE [AGGREGATE] FUNCTION function_name\n    RETURNS {STRING|INTEGER|REAL|DECIMAL}\n    SONAME shared_library_name\n\nThis statement loads the loadable function named function_name. (CREATE\nFUNCTION is also used to created stored functions; see [HELP CREATE\nPROCEDURE].)\n\nA loadable function is a way to extend MySQL with a new function that\nworks like a native (built-in) MySQL function such as ABS() or\nCONCAT(). See Adding a Loadable Function\n(https://dev.mysql.com/doc/extending-mysql/5.7/en/adding-loadable-funct\nion.html).\n\nfunction_name is the name that should be used in SQL statements to\ninvoke the function. The RETURNS clause indicates the type of the\nfunction\'s return value. DECIMAL is a legal value after RETURNS, but\ncurrently DECIMAL functions return string values and should be written\nlike STRING functions.\n\nThe AGGREGATE keyword, if given, signifies that the function is an\naggregate (group) function. An aggregate function works exactly like a\nnative MySQL aggregate function such as SUM() or COUNT().\n\nshared_library_name is the base name of the shared library file\ncontaining the code that implements the function. The file must be\nlocated in the plugin directory. This directory is given by the value\nof the plugin_dir system variable. For more information, see\nhttps://dev.mysql.com/doc/refman/5.7/en/function-loading.html.\n\nCREATE FUNCTION requires the INSERT privilege for the mysql system\ndatabase because it adds a row to the mysql.func system table to\nregister the function.\n\nDuring the normal startup sequence, the server loads functions\nregistered in the mysql.func table. If the server is started with the\n--skip-grant-tables option, functions registered in the table are not\nloaded and are unavailable.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/create-function-loadable.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/create-function-loadable.html'),(594,'DROP FUNCTION LOADABLE FUNCTION',46,'Syntax:\nDROP FUNCTION [IF EXISTS] function_name\n\nThis statement drops the loadable function named function_name. (DROP\nFUNCTION is also used to drop stored functions; see [HELP DROP\nPROCEDURE].)\n\nDROP FUNCTION is the complement of CREATE FUNCTION. It requires the\nDELETE privilege for the mysql system database because it removes the\nrow from the mysql.func system table that registers the function.\n\nDuring the normal startup sequence, the server loads functions\nregistered in the mysql.func table. Because DROP FUNCTION removes the\nmysql.func row for the dropped function, the server does not load the\nfunction during subsequent restarts.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/drop-function-loadable.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/drop-function-loadable.html'),(595,'INSTALL PLUGIN',47,'Syntax:\nINSTALL PLUGIN plugin_name SONAME \'shared_library_name\'\n\nThis statement installs a server plugin. It requires the INSERT\nprivilege for the mysql.plugin system table because it adds a row to\nthat table to register the plugin.\n\nplugin_name is the name of the plugin as defined in the plugin\ndescriptor structure contained in the library file (see Plugin Data\nStructures\n(https://dev.mysql.com/doc/extending-mysql/5.7/en/plugin-data-structure\ns.html)). Plugin names are not case-sensitive. For maximal\ncompatibility, plugin names should be limited to ASCII letters, digits,\nand underscore because they are used in C source files, shell command\nlines, M4 and Bourne shell scripts, and SQL environments.\n\nshared_library_name is the name of the shared library that contains the\nplugin code. The name includes the file name extension (for example,\nlibmyplugin.so, libmyplugin.dll, or libmyplugin.dylib).\n\nThe shared library must be located in the plugin directory (the\ndirectory named by the plugin_dir system variable). The library must be\nin the plugin directory itself, not in a subdirectory. By default,\nplugin_dir is the plugin directory under the directory named by the\npkglibdir configuration variable, but it can be changed by setting the\nvalue of plugin_dir at server startup. For example, set its value in a\nmy.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\n\nIf the value of plugin_dir is a relative path name, it is taken to be\nrelative to the MySQL base directory (the value of the basedir system\nvariable).\n\nINSTALL PLUGIN loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its\ninitialization function, which handles any setup that the plugin must\nperform before it can be used. When the server shuts down, it executes\nthe deinitialization function for each plugin that is loaded so that\nthe plugin has a chance to perform any final cleanup.\n\nINSTALL PLUGIN also registers the plugin by adding a line that\nindicates the plugin name and library file name to the mysql.plugin\nsystem table. During the normal startup sequence, the server loads and\ninitializes plugins registered in mysql.plugin. This means that a\nplugin is installed with INSTALL PLUGIN only once, not every time the\nserver starts. If the server is started with the --skip-grant-tables\noption, plugins registered in the mysql.plugin table are not loaded and\nare unavailable.\n\nA plugin library can contain multiple plugins. For each of them to be\ninstalled, use a separate INSTALL PLUGIN statement. Each statement\nnames a different plugin, but all of them specify the same library\nname.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/install-plugin.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/install-plugin.html'),(596,'UNINSTALL PLUGIN',47,'Syntax:\nUNINSTALL PLUGIN plugin_name\n\nThis statement removes an installed server plugin. UNINSTALL PLUGIN is\nthe complement of INSTALL PLUGIN. It requires the DELETE privilege for\nthe mysql.plugin system table because it removes the row from that\ntable that registers the plugin.\n\nplugin_name must be the name of some plugin that is listed in the\nmysql.plugin table. The server executes the plugin\'s deinitialization\nfunction and removes the row for the plugin from the mysql.plugin\nsystem table, so that subsequent server restarts do not load and\ninitialize the plugin. UNINSTALL PLUGIN does not remove the plugin\'s\nshared library file.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/uninstall-plugin.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/uninstall-plugin.html'),(597,'SET',3,'Syntax:\nSET variable = expr [, variable = expr] ...\n\nvariable: {\n    user_var_name\n  | param_name\n  | local_var_name\n  | {GLOBAL | @@GLOBAL.} system_var_name\n  | [SESSION | @@SESSION. | @@] system_var_name\n}\n\nSET syntax for variable assignment enables you to assign values to\ndifferent types of variables that affect the operation of the server or\nclients:\n\no User-defined variables. See\n  https://dev.mysql.com/doc/refman/5.7/en/user-variables.html.\n\no Stored procedure and function parameters, and stored program local\n  variables. See\n  https://dev.mysql.com/doc/refman/5.7/en/stored-program-variables.html\n  .\n\no System variables. See\n  https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n  System variables also can be set at server startup, as described in\n  https://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-variable.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-variable.html'),(598,'SET CHARACTER SET',3,'Syntax:\nSET {CHARACTER SET | CHARSET}\n    {\'charset_name\' | DEFAULT}\n\nThis statement maps all strings sent between the server and the current\nclient with the given mapping. SET CHARACTER SET sets three session\nsystem variables: character_set_client and character_set_results are\nset to the given character set, and character_set_connection to the\nvalue of character_set_database. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\ncharset_name may be quoted or unquoted.\n\nThe default character set mapping can be restored by using the value\nDEFAULT. The default depends on the server configuration.\n\nSome character sets cannot be used as the client character set.\nAttempting to use them with SET CHARACTER SET produces an error. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset\n-connection-impermissible-client-charset.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-character-set.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-character-set.html'),(599,'SET CHARSET',3,'Syntax:\nSET {CHARACTER SET | CHARSET}\n    {\'charset_name\' | DEFAULT}\n\nThis statement maps all strings sent between the server and the current\nclient with the given mapping. SET CHARACTER SET sets three session\nsystem variables: character_set_client and character_set_results are\nset to the given character set, and character_set_connection to the\nvalue of character_set_database. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\ncharset_name may be quoted or unquoted.\n\nThe default character set mapping can be restored by using the value\nDEFAULT. The default depends on the server configuration.\n\nSome character sets cannot be used as the client character set.\nAttempting to use them with SET CHARACTER SET produces an error. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset\n-connection-impermissible-client-charset.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-character-set.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-character-set.html'),(600,'SET NAMES',3,'Syntax:\nSET NAMES {\'charset_name\'\n    [COLLATE \'collation_name\'] | DEFAULT}\n\nThis statement sets the three session system variables\ncharacter_set_client, character_set_connection, and\ncharacter_set_results to the given character set. Setting\ncharacter_set_connection to charset_name also sets collation_connection\nto the default collation for charset_name. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-connection.html.\n\nThe optional COLLATE clause may be used to specify a collation\nexplicitly. If given, the collation must one of the permitted\ncollations for charset_name.\n\ncharset_name and collation_name may be quoted or unquoted.\n\nThe default mapping can be restored by using a value of DEFAULT. The\ndefault depends on the server configuration.\n\nSome character sets cannot be used as the client character set.\nAttempting to use them with SET NAMES produces an error. See\nhttps://dev.mysql.com/doc/refman/5.7/en/charset-connection.html#charset\n-connection-impermissible-client-charset.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/set-names.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/set-names.html'),(601,'SHOW',3,'SHOW has many forms that provide information about databases, tables,\ncolumns, or status information about the server. This section describes\nthose following:\n\nSHOW {BINARY | MASTER} LOGS\nSHOW BINLOG EVENTS [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\nSHOW CHARACTER SET [like_or_where]\nSHOW COLLATION [like_or_where]\nSHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]\nSHOW CREATE DATABASE db_name\nSHOW CREATE EVENT event_name\nSHOW CREATE FUNCTION func_name\nSHOW CREATE PROCEDURE proc_name\nSHOW CREATE TABLE tbl_name\nSHOW CREATE TRIGGER trigger_name\nSHOW CREATE VIEW view_name\nSHOW DATABASES [like_or_where]\nSHOW ENGINE engine_name {STATUS | MUTEX}\nSHOW [STORAGE] ENGINES\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW EVENTS\nSHOW FUNCTION CODE func_name\nSHOW FUNCTION STATUS [like_or_where]\nSHOW GRANTS FOR user\nSHOW INDEX FROM tbl_name [FROM db_name]\nSHOW MASTER STATUS\nSHOW OPEN TABLES [FROM db_name] [like_or_where]\nSHOW PLUGINS\nSHOW PROCEDURE CODE proc_name\nSHOW PROCEDURE STATUS [like_or_where]\nSHOW PRIVILEGES\nSHOW [FULL] PROCESSLIST\nSHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]\nSHOW PROFILES\nSHOW RELAYLOG EVENTS [IN \'log_name\'] [FROM pos] [LIMIT [offset,] row_count]\nSHOW SLAVE HOSTS\nSHOW SLAVE STATUS [FOR CHANNEL channel]\nSHOW [GLOBAL | SESSION] STATUS [like_or_where]\nSHOW TABLE STATUS [FROM db_name] [like_or_where]\nSHOW [FULL] TABLES [FROM db_name] [like_or_where]\nSHOW TRIGGERS [FROM db_name] [like_or_where]\nSHOW [GLOBAL | SESSION] VARIABLES [like_or_where]\nSHOW WARNINGS [LIMIT [offset,] row_count]\n\nlike_or_where: {\n    LIKE \'pattern\'\n  | WHERE expr\n}\n\nIf the syntax for a given SHOW statement includes a LIKE \'pattern\'\npart, \'pattern\' is a string that can contain the SQL % and _ wildcard\ncharacters. The pattern is useful for restricting statement output to\nmatching values.\n\nSeveral SHOW statements also accept a WHERE clause that provides more\nflexibility in specifying which rows to display. See\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show.html'),(602,'SHOW BINARY LOGS',3,'Syntax:\nSHOW BINARY LOGS\nSHOW MASTER LOGS\n\nLists the binary log files on the server. This statement is used as\npart of the procedure described in [HELP PURGE BINARY LOGS], that shows\nhow to determine which logs can be purged. A user with the SUPER or\nREPLICATION CLIENT privilege may execute this statement.\n\nmysql> SHOW BINARY LOGS;\n+---------------+-----------+\n| Log_name      | File_size |\n+---------------+-----------+\n| binlog.000015 |    724935 |\n| binlog.000016 |    733481 |\n+---------------+-----------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html'),(603,'SHOW MASTER LOGS',3,'Syntax:\nSHOW BINARY LOGS\nSHOW MASTER LOGS\n\nLists the binary log files on the server. This statement is used as\npart of the procedure described in [HELP PURGE BINARY LOGS], that shows\nhow to determine which logs can be purged. A user with the SUPER or\nREPLICATION CLIENT privilege may execute this statement.\n\nmysql> SHOW BINARY LOGS;\n+---------------+-----------+\n| Log_name      | File_size |\n+---------------+-----------+\n| binlog.000015 |    724935 |\n| binlog.000016 |    733481 |\n+---------------+-----------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-binary-logs.html'),(604,'SHOW BINLOG EVENTS',3,'Syntax:\nSHOW BINLOG EVENTS\n   [IN \'log_name\']\n   [FROM pos]\n   [LIMIT [offset,] row_count]\n\nShows the events in the binary log. If you do not specify \'log_name\',\nthe first binary log is displayed. SHOW BINLOG EVENTS requires the\nREPLICATION SLAVE privilege.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-binlog-events.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-binlog-events.html'),(605,'SHOW CHARACTER SET',3,'Syntax:\nSHOW CHARACTER SET\n    [LIKE \'pattern\' | WHERE expr]\n\nThe SHOW CHARACTER SET statement shows all available character sets.\nThe LIKE clause, if present, indicates which character set names to\nmatch. The WHERE clause can be given to select rows using more general\nconditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html. For\nexample:\n\nmysql> SHOW CHARACTER SET LIKE \'latin%\';\n+---------+-----------------------------+-------------------+--------+\n| Charset | Description                 | Default collation | Maxlen |\n+---------+-----------------------------+-------------------+--------+\n| latin1  | cp1252 West European        | latin1_swedish_ci |      1 |\n| latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |\n| latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |\n| latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |\n+---------+-----------------------------+-------------------+--------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-character-set.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-character-set.html'),(606,'SHOW COLLATION',3,'Syntax:\nSHOW COLLATION\n    [LIKE \'pattern\' | WHERE expr]\n\nThis statement lists collations supported by the server. By default,\nthe output from SHOW COLLATION includes all available collations. The\nLIKE clause, if present, indicates which collation names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html. For\nexample:\n\nmysql> SHOW COLLATION WHERE Charset = \'latin1\';\n+-------------------+---------+----+---------+----------+---------+\n| Collation         | Charset | Id | Default | Compiled | Sortlen |\n+-------------------+---------+----+---------+----------+---------+\n| latin1_german1_ci | latin1  |  5 |         | Yes      |       1 |\n| latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       1 |\n| latin1_danish_ci  | latin1  | 15 |         | Yes      |       1 |\n| latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |\n| latin1_bin        | latin1  | 47 |         | Yes      |       1 |\n| latin1_general_ci | latin1  | 48 |         | Yes      |       1 |\n| latin1_general_cs | latin1  | 49 |         | Yes      |       1 |\n| latin1_spanish_ci | latin1  | 94 |         | Yes      |       1 |\n+-------------------+---------+----+---------+----------+---------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-collation.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-collation.html'),(607,'SHOW COLUMNS',3,'Syntax:\nSHOW [FULL] {COLUMNS | FIELDS}\n    {FROM | IN} tbl_name\n    [{FROM | IN} db_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW COLUMNS displays information about the columns in a given table.\nIt also works for views. SHOW COLUMNS displays information only for\nthose columns for which you have some privilege.\n\nmysql> SHOW COLUMNS FROM City;\n+-------------+----------+------+-----+---------+----------------+\n| Field       | Type     | Null | Key | Default | Extra          |\n+-------------+----------+------+-----+---------+----------------+\n| ID          | int(11)  | NO   | PRI | NULL    | auto_increment |\n| Name        | char(35) | NO   |     |         |                |\n| CountryCode | char(3)  | NO   | MUL |         |                |\n| District    | char(20) | NO   |     |         |                |\n| Population  | int(11)  | NO   |     | 0       |                |\n+-------------+----------+------+-----+---------+----------------+\n\nAn alternative to tbl_name FROM db_name syntax is db_name.tbl_name.\nThese two statements are equivalent:\n\nSHOW COLUMNS FROM mytable FROM mydb;\nSHOW COLUMNS FROM mydb.mytable;\n\nThe optional FULL keyword causes the output to include the column\ncollation and comments, as well as the privileges you have for each\ncolumn.\n\nThe LIKE clause, if present, indicates which column names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nThe data types may differ from what you expect them to be based on a\nCREATE TABLE statement because MySQL sometimes changes data types when\nyou create or alter a table. The conditions under which this occurs are\ndescribed in\nhttps://dev.mysql.com/doc/refman/5.7/en/silent-column-changes.html.\n\nSHOW COLUMNS displays the following values for each table column:\n\no Field\n\n  The column name.\n\no Type\n\n  The column data type.\n\no Collation\n\n  The collation for nonbinary string columns, or NULL for other\n  columns. This value is displayed only if you use the FULL keyword.\n\no Null\n\n  The column nullability. The value is YES if NULL values can be stored\n  in the column, NO if not.\n\no Key\n\n  Whether the column is indexed:\n\n  o If Key is empty, the column either is not indexed or is indexed\n    only as a secondary column in a multiple-column, nonunique index.\n\n  o If Key is PRI, the column is a PRIMARY KEY or is one of the columns\n    in a multiple-column PRIMARY KEY.\n\n  o If Key is UNI, the column is the first column of a UNIQUE index. (A\n    UNIQUE index permits multiple NULL values, but you can tell whether\n    the column permits NULL by checking the Null field.)\n\n  o If Key is MUL, the column is the first column of a nonunique index\n    in which multiple occurrences of a given value are permitted within\n    the column.\n\n  If more than one of the Key values applies to a given column of a\n  table, Key displays the one with the highest priority, in the order\n  PRI, UNI, MUL.\n\n  A UNIQUE index may be displayed as PRI if it cannot contain NULL\n  values and there is no PRIMARY KEY in the table. A UNIQUE index may\n  display as MUL if several columns form a composite UNIQUE index;\n  although the combination of the columns is unique, each column can\n  still hold multiple occurrences of a given value.\n\no Default\n\n  The default value for the column. This is NULL if the column has an\n  explicit default of NULL, or if the column definition includes no\n  DEFAULT clause.\n\no Extra\n\n  Any additional information that is available about a given column.\n  The value is nonempty in these cases:\n\n  o auto_increment for columns that have the AUTO_INCREMENT attribute.\n\n  o on update CURRENT_TIMESTAMP for TIMESTAMP or DATETIME columns that\n    have the ON UPDATE CURRENT_TIMESTAMP attribute.\n\n  o VIRTUAL GENERATED or STORED GENERATED for generated columns.\n\no Privileges\n\n  The privileges you have for the column. This value is displayed only\n  if you use the FULL keyword.\n\no Comment\n\n  Any comment included in the column definition. This value is\n  displayed only if you use the FULL keyword.\n\nTable column information is also available from the INFORMATION_SCHEMA\nCOLUMNS table. See\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-columns-tabl\ne.html.\n\nYou can list a table\'s columns with the mysqlshow db_name tbl_name\ncommand.\n\nThe DESCRIBE statement provides information similar to SHOW COLUMNS.\nSee https://dev.mysql.com/doc/refman/5.7/en/describe.html.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements\nalso provide information about tables. See [HELP SHOW].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-columns.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-columns.html'),(608,'SHOW FIELDS',3,'Syntax:\nSHOW [FULL] {COLUMNS | FIELDS}\n    {FROM | IN} tbl_name\n    [{FROM | IN} db_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW COLUMNS displays information about the columns in a given table.\nIt also works for views. SHOW COLUMNS displays information only for\nthose columns for which you have some privilege.\n\nmysql> SHOW COLUMNS FROM City;\n+-------------+----------+------+-----+---------+----------------+\n| Field       | Type     | Null | Key | Default | Extra          |\n+-------------+----------+------+-----+---------+----------------+\n| ID          | int(11)  | NO   | PRI | NULL    | auto_increment |\n| Name        | char(35) | NO   |     |         |                |\n| CountryCode | char(3)  | NO   | MUL |         |                |\n| District    | char(20) | NO   |     |         |                |\n| Population  | int(11)  | NO   |     | 0       |                |\n+-------------+----------+------+-----+---------+----------------+\n\nAn alternative to tbl_name FROM db_name syntax is db_name.tbl_name.\nThese two statements are equivalent:\n\nSHOW COLUMNS FROM mytable FROM mydb;\nSHOW COLUMNS FROM mydb.mytable;\n\nThe optional FULL keyword causes the output to include the column\ncollation and comments, as well as the privileges you have for each\ncolumn.\n\nThe LIKE clause, if present, indicates which column names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nThe data types may differ from what you expect them to be based on a\nCREATE TABLE statement because MySQL sometimes changes data types when\nyou create or alter a table. The conditions under which this occurs are\ndescribed in\nhttps://dev.mysql.com/doc/refman/5.7/en/silent-column-changes.html.\n\nSHOW COLUMNS displays the following values for each table column:\n\no Field\n\n  The column name.\n\no Type\n\n  The column data type.\n\no Collation\n\n  The collation for nonbinary string columns, or NULL for other\n  columns. This value is displayed only if you use the FULL keyword.\n\no Null\n\n  The column nullability. The value is YES if NULL values can be stored\n  in the column, NO if not.\n\no Key\n\n  Whether the column is indexed:\n\n  o If Key is empty, the column either is not indexed or is indexed\n    only as a secondary column in a multiple-column, nonunique index.\n\n  o If Key is PRI, the column is a PRIMARY KEY or is one of the columns\n    in a multiple-column PRIMARY KEY.\n\n  o If Key is UNI, the column is the first column of a UNIQUE index. (A\n    UNIQUE index permits multiple NULL values, but you can tell whether\n    the column permits NULL by checking the Null field.)\n\n  o If Key is MUL, the column is the first column of a nonunique index\n    in which multiple occurrences of a given value are permitted within\n    the column.\n\n  If more than one of the Key values applies to a given column of a\n  table, Key displays the one with the highest priority, in the order\n  PRI, UNI, MUL.\n\n  A UNIQUE index may be displayed as PRI if it cannot contain NULL\n  values and there is no PRIMARY KEY in the table. A UNIQUE index may\n  display as MUL if several columns form a composite UNIQUE index;\n  although the combination of the columns is unique, each column can\n  still hold multiple occurrences of a given value.\n\no Default\n\n  The default value for the column. This is NULL if the column has an\n  explicit default of NULL, or if the column definition includes no\n  DEFAULT clause.\n\no Extra\n\n  Any additional information that is available about a given column.\n  The value is nonempty in these cases:\n\n  o auto_increment for columns that have the AUTO_INCREMENT attribute.\n\n  o on update CURRENT_TIMESTAMP for TIMESTAMP or DATETIME columns that\n    have the ON UPDATE CURRENT_TIMESTAMP attribute.\n\n  o VIRTUAL GENERATED or STORED GENERATED for generated columns.\n\no Privileges\n\n  The privileges you have for the column. This value is displayed only\n  if you use the FULL keyword.\n\no Comment\n\n  Any comment included in the column definition. This value is\n  displayed only if you use the FULL keyword.\n\nTable column information is also available from the INFORMATION_SCHEMA\nCOLUMNS table. See\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-columns-tabl\ne.html.\n\nYou can list a table\'s columns with the mysqlshow db_name tbl_name\ncommand.\n\nThe DESCRIBE statement provides information similar to SHOW COLUMNS.\nSee https://dev.mysql.com/doc/refman/5.7/en/describe.html.\n\nThe SHOW CREATE TABLE, SHOW TABLE STATUS, and SHOW INDEX statements\nalso provide information about tables. See [HELP SHOW].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-columns.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-columns.html'),(609,'SHOW CREATE DATABASE',3,'Syntax:\nSHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n\nShows the CREATE DATABASE statement that creates the named database. If\nthe SHOW statement includes an IF NOT EXISTS clause, the output too\nincludes such a clause. SHOW CREATE SCHEMA is a synonym for SHOW CREATE\nDATABASE.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-database.html\n\n','mysql> SHOW CREATE DATABASE test\\G\n*************************** 1. row ***************************\n       Database: test\nCreate Database: CREATE DATABASE `test`\n                 /*!40100 DEFAULT CHARACTER SET latin1 */\n\nmysql> SHOW CREATE SCHEMA test\\G\n*************************** 1. row ***************************\n       Database: test\nCreate Database: CREATE DATABASE `test`\n                 /*!40100 DEFAULT CHARACTER SET latin1 */\n','https://dev.mysql.com/doc/refman/5.7/en/show-create-database.html'),(610,'SHOW CREATE SCHEMA',3,'Syntax:\nSHOW CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name\n\nShows the CREATE DATABASE statement that creates the named database. If\nthe SHOW statement includes an IF NOT EXISTS clause, the output too\nincludes such a clause. SHOW CREATE SCHEMA is a synonym for SHOW CREATE\nDATABASE.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-database.html\n\n','mysql> SHOW CREATE DATABASE test\\G\n*************************** 1. row ***************************\n       Database: test\nCreate Database: CREATE DATABASE `test`\n                 /*!40100 DEFAULT CHARACTER SET latin1 */\n\nmysql> SHOW CREATE SCHEMA test\\G\n*************************** 1. row ***************************\n       Database: test\nCreate Database: CREATE DATABASE `test`\n                 /*!40100 DEFAULT CHARACTER SET latin1 */\n','https://dev.mysql.com/doc/refman/5.7/en/show-create-database.html'),(611,'SHOW CREATE EVENT',3,'Syntax:\nSHOW CREATE EVENT event_name\n\nThis statement displays the CREATE EVENT statement needed to re-create\na given event. It requires the EVENT privilege for the database from\nwhich the event is to be shown. For example (using the same event\ne_daily defined and then altered in [HELP SHOW EVENTS]):\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-event.html\n\n','mysql> SHOW CREATE EVENT myschema.e_daily\\G\n*************************** 1. row ***************************\n               Event: e_daily\n            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n                      NO_ZERO_IN_DATE,NO_ZERO_DATE,\n                      ERROR_FOR_DIVISION_BY_ZERO,\n                      NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n           time_zone: SYSTEM\n        Create Event: CREATE DEFINER=`jon`@`ghidora` EVENT `e_daily`\n                        ON SCHEDULE EVERY 1 DAY\n                        STARTS CURRENT_TIMESTAMP + INTERVAL 6 HOUR\n                        ON COMPLETION NOT PRESERVE\n                        ENABLE\n                        COMMENT \'Saves total number of sessions then\n                                clears the table each day\'\n                        DO BEGIN\n                          INSERT INTO site_activity.totals (time, total)\n                            SELECT CURRENT_TIMESTAMP, COUNT(*)\n                              FROM site_activity.sessions;\n                          DELETE FROM site_activity.sessions;\n                        END\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n','https://dev.mysql.com/doc/refman/5.7/en/show-create-event.html'),(612,'SHOW CREATE FUNCTION',3,'Syntax:\nSHOW CREATE FUNCTION func_name\n\nThis statement is similar to SHOW CREATE PROCEDURE but for stored\nfunctions. See [HELP SHOW CREATE PROCEDURE].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-function.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-create-function.html'),(613,'SHOW CREATE PROCEDURE',3,'Syntax:\nSHOW CREATE PROCEDURE proc_name\n\nThis statement is a MySQL extension. It returns the exact string that\ncan be used to re-create the named stored procedure. A similar\nstatement, SHOW CREATE FUNCTION, displays information about stored\nfunctions (see [HELP SHOW CREATE FUNCTION]).\n\nTo use either statement, you must be the user named in the routine\nDEFINER clause or have SELECT access to the mysql.proc table. If you do\nnot have privileges for the routine itself, the value displayed for the\nCreate Procedure or Create Function column is NULL.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html\n\n','mysql> SHOW CREATE PROCEDURE test.citycount\\G\n*************************** 1. row ***************************\n           Procedure: citycount\n            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n                      NO_ZERO_IN_DATE,NO_ZERO_DATE,\n                      ERROR_FOR_DIVISION_BY_ZERO,\n                      NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n    Create Procedure: CREATE DEFINER=`me`@`localhost`\n                      PROCEDURE `citycount`(IN country CHAR(3), OUT cities INT)\n                      BEGIN\n                        SELECT COUNT(*) INTO cities FROM world.city\n                        WHERE CountryCode = country;\n                      END\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n\nmysql> SHOW CREATE FUNCTION test.hello\\G\n*************************** 1. row ***************************\n            Function: hello\n            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n                      NO_ZERO_IN_DATE,NO_ZERO_DATE,\n                      ERROR_FOR_DIVISION_BY_ZERO,\n                      NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n     Create Function: CREATE DEFINER=`me`@`localhost`\n                      FUNCTION `hello`(s CHAR(20))\n                      RETURNS char(50) CHARSET latin1\n                      DETERMINISTIC\n                      RETURN CONCAT(\'Hello, \',s,\'!\')\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n','https://dev.mysql.com/doc/refman/5.7/en/show-create-procedure.html'),(614,'SHOW CREATE TABLE',3,'Syntax:\nSHOW CREATE TABLE tbl_name\n\nShows the CREATE TABLE statement that creates the named table. To use\nthis statement, you must have some privilege for the table. This\nstatement also works with views.\n\nSHOW CREATE TABLE quotes table and column names according to the value\nof the sql_quote_show_create option. See\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nWhen altering the storage engine of a table, table options that are not\napplicable to the new storage engine are retained in the table\ndefinition to enable reverting the table with its previously defined\noptions to the original storage engine, if necessary. For example, when\nchanging the storage engine from InnoDB to MyISAM, InnoDB-specific\noptions such as ROW_FORMAT=COMPACT are retained.\n\nWhen creating a table with strict mode disabled, the storage engine\'s\ndefault row format is used if the specified row format is not\nsupported. The actual row format of the table is reported in the\nRow_format column in response to SHOW TABLE STATUS. SHOW CREATE TABLE\nshows the row format that was specified in the CREATE TABLE statement.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html\n\n','mysql> SHOW CREATE TABLE t\\G\n*************************** 1. row ***************************\n       Table: t\nCreate Table: CREATE TABLE `t` (\n  `id` int(11) NOT NULL AUTO_INCREMENT,\n  `s` char(60) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=latin1\n\nmysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) ROW_FORMAT=COMPACT ENGINE=InnoDB;\nmysql> ALTER TABLE t1 ENGINE=MyISAM;\nmysql> SHOW CREATE TABLE t1\\G\n*************************** 1. row ***************************\n       Table: t1\nCreate Table: CREATE TABLE `t1` (\n  `c1` int(11) NOT NULL,\n  PRIMARY KEY (`c1`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT\n','https://dev.mysql.com/doc/refman/5.7/en/show-create-table.html'),(615,'SHOW CREATE TRIGGER',3,'Syntax:\nSHOW CREATE TRIGGER trigger_name\n\nThis statement shows the CREATE TRIGGER statement that creates the\nnamed trigger. This statement requires the TRIGGER privilege for the\ntable associated with the trigger.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-trigger.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-create-trigger.html'),(616,'SHOW CREATE USER',3,'Syntax:\nSHOW CREATE USER user\n\nThis statement shows the CREATE USER statement that creates the named\nuser. An error occurs if the user does not exist. The statement\nrequires the SELECT privilege for the mysql system database, except to\ndisplay information for the current user.\n\nTo name the account, use the format described in\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html. The host\nname part of the account name, if omitted, defaults to \'%\'. It is also\npossible to specify CURRENT_USER or CURRENT_USER() to refer to the\naccount associated with the current session.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-user.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-create-user.html'),(617,'SHOW CREATE VIEW',3,'Syntax:\nSHOW CREATE VIEW view_name\n\nThis statement shows the CREATE VIEW statement that creates the named\nview.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-create-view.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-create-view.html'),(618,'SHOW DATABASES',3,'Syntax:\nSHOW {DATABASES | SCHEMAS}\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW DATABASES lists the databases on the MySQL server host. SHOW\nSCHEMAS is a synonym for SHOW DATABASES. The LIKE clause, if present,\nindicates which database names to match. The WHERE clause can be given\nto select rows using more general conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nYou see only those databases for which you have some kind of privilege,\nunless you have the global SHOW DATABASES privilege. You can also get\nthis list using the mysqlshow command.\n\nIf the server was started with the --skip-show-database option, you\ncannot use this statement at all unless you have the SHOW DATABASES\nprivilege.\n\nMySQL implements databases as directories in the data directory, so\nthis statement simply lists directories in that location. However, the\noutput may include names of directories that do not correspond to\nactual databases.\n\nDatabase information is also available from the INFORMATION_SCHEMA\nSCHEMATA table. See\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-schemata-tab\nle.html.\n\n*Caution*:\n\nBecause a global privilege is considered a privilege for all databases,\nany global privilege enables a user to see all database names with SHOW\nDATABASES or by examining the INFORMATION_SCHEMA SCHEMATA table.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-databases.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-databases.html'),(619,'SHOW SCHEMAS',3,'Syntax:\nSHOW {DATABASES | SCHEMAS}\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW DATABASES lists the databases on the MySQL server host. SHOW\nSCHEMAS is a synonym for SHOW DATABASES. The LIKE clause, if present,\nindicates which database names to match. The WHERE clause can be given\nto select rows using more general conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nYou see only those databases for which you have some kind of privilege,\nunless you have the global SHOW DATABASES privilege. You can also get\nthis list using the mysqlshow command.\n\nIf the server was started with the --skip-show-database option, you\ncannot use this statement at all unless you have the SHOW DATABASES\nprivilege.\n\nMySQL implements databases as directories in the data directory, so\nthis statement simply lists directories in that location. However, the\noutput may include names of directories that do not correspond to\nactual databases.\n\nDatabase information is also available from the INFORMATION_SCHEMA\nSCHEMATA table. See\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-schemata-tab\nle.html.\n\n*Caution*:\n\nBecause a global privilege is considered a privilege for all databases,\nany global privilege enables a user to see all database names with SHOW\nDATABASES or by examining the INFORMATION_SCHEMA SCHEMATA table.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-databases.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-databases.html'),(620,'SHOW ENGINE',3,'Syntax:\nSHOW ENGINE engine_name {STATUS | MUTEX}\n\nSHOW ENGINE displays operational information about a storage engine. It\nrequires the PROCESS privilege. The statement has these variants:\n\nSHOW ENGINE INNODB STATUS\nSHOW ENGINE INNODB MUTEX\nSHOW ENGINE PERFORMANCE_SCHEMA STATUS\n\nSHOW ENGINE INNODB STATUS displays extensive information from the\nstandard InnoDB Monitor about the state of the InnoDB storage engine.\nFor information about the standard monitor and other InnoDB Monitors\nthat provide information about InnoDB processing, see\nhttps://dev.mysql.com/doc/refman/5.7/en/innodb-monitors.html.\n\nSHOW ENGINE INNODB MUTEX displays InnoDB mutex and rw-lock statistics.\n\n*Note*:\n\nInnoDB mutexes and rwlocks can also be monitored using Performance\nSchema tables. See\nhttps://dev.mysql.com/doc/refman/5.7/en/monitor-innodb-mutex-waits-perf\normance-schema.html.\n\nSHOW ENGINE INNODB MUTEX output was removed in MySQL 5.7.2. It was\nrevised and reintroduced in MySQL 5.7.8.\n\nIn MySQL 5.7.8, mutex statistics collection is configured dynamically\nusing the following options:\n\no To enable the collection of mutex statistics, run:\n\nSET GLOBAL innodb_monitor_enable=\'latch\';\n\no To reset mutex statistics, run:\n\nSET GLOBAL innodb_monitor_reset=\'latch\';\n\no To disable the collection of mutex statistics, run:\n\nSET GLOBAL innodb_monitor_disable=\'latch\';\n\nCollection of mutex statistics for SHOW ENGINE INNODB MUTEX can also be\nenabled by setting innodb_monitor_enable=\'all\', or disabled by setting\ninnodb_monitor_disable=\'all\'.\n\nSHOW ENGINE INNODB MUTEX output has these columns:\n\no Type\n\n  Always InnoDB.\n\no Name\n\n  Prior to MySQL 5.7.8, the Name field reports the source file where\n  the mutex is implemented, and the line number in the file where the\n  mutex is created. The line number is specific to your version of\n  MySQL. As of MySQL 5.7.8, only the mutex name is reported. File name\n  and line number are still reported for rwlocks.\n\no Status\n\n  The mutex status.\n\n  Prior to MySQL 5.7.8, the Status field displays several values if\n  WITH_DEBUG was defined at MySQL compilation time. If WITH_DEBUG was\n  not defined, the statement displays only the os_waits value. In the\n  latter case (without WITH_DEBUG), the information on which the output\n  is based is insufficient to distinguish regular mutexes and mutexes\n  that protect rwlocks (which permit multiple readers or a single\n  writer). Consequently, the output may appear to contain multiple rows\n  for the same mutex. Pre-MySQL 5.7.8 Status field values include:\n\n  o count indicates how many times the mutex was requested.\n\n  o spin_waits indicates how many times the spinlock had to run.\n\n  o spin_rounds indicates the number of spinlock rounds. (spin_rounds\n    divided by spin_waits provides the average round count.)\n\n  o os_waits indicates the number of operating system waits. This\n    occurs when the spinlock did not work (the mutex was not locked\n    during the spinlock and it was necessary to yield to the operating\n    system and wait).\n\n  o os_yields indicates the number of times a thread trying to lock a\n    mutex gave up its timeslice and yielded to the operating system (on\n    the presumption that permitting other threads to run frees the\n    mutex so that it can be locked).\n\n  o os_wait_times indicates the amount of time (in ms) spent in\n    operating system waits. In MySQL 5.7 timing is disabled and this\n    value is always 0.\n\n  As of MySQL 5.7.8, the Status field reports the number of spins,\n  waits, and calls. Statistics for low-level operating system mutexes,\n  which are implemented outside of InnoDB, are not reported.\n\n  o spins indicates the number of spins.\n\n  o waits indicates the number of mutex waits.\n\n  o calls indicates how many times the mutex was requested.\n\nSHOW ENGINE INNODB MUTEX does not list mutexes and rw-locks for each\nbuffer pool block, as the amount of output would be overwhelming on\nsystems with a large buffer pool. SHOW ENGINE INNODB MUTEX does,\nhowever, print aggregate BUF_BLOCK_MUTEX spin, wait, and call values\nfor buffer pool block mutexes and rw-locks. SHOW ENGINE INNODB MUTEX\nalso does not list any mutexes or rw-locks that have never been waited\non (os_waits=0). Thus, SHOW ENGINE INNODB MUTEX only displays\ninformation about mutexes and rw-locks outside of the buffer pool that\nhave caused at least one OS-level wait.\n\nUse SHOW ENGINE PERFORMANCE_SCHEMA STATUS to inspect the internal\noperation of the Performance Schema code:\n\nmysql> SHOW ENGINE PERFORMANCE_SCHEMA STATUS\\G\n...\n*************************** 3. row ***************************\n  Type: performance_schema\n  Name: events_waits_history.size\nStatus: 76\n*************************** 4. row ***************************\n  Type: performance_schema\n  Name: events_waits_history.count\nStatus: 10000\n*************************** 5. row ***************************\n  Type: performance_schema\n  Name: events_waits_history.memory\nStatus: 760000\n...\n*************************** 57. row ***************************\n  Type: performance_schema\n  Name: performance_schema.memory\nStatus: 26459600\n...\n\nThis statement is intended to help the DBA understand the effects that\ndifferent Performance Schema options have on memory requirements.\n\nName values consist of two parts, which name an internal buffer and a\nbuffer attribute, respectively. Interpret buffer names as follows:\n\no An internal buffer that is not exposed as a table is named within\n  parentheses. Examples: (pfs_cond_class).size,\n  (pfs_mutex_class).memory.\n\no An internal buffer that is exposed as a table in the\n  performance_schema database is named after the table, without\n  parentheses. Examples: events_waits_history.size,\n  mutex_instances.count.\n\no A value that applies to the Performance Schema as a whole begins with\n  performance_schema. Example: performance_schema.memory.\n\nBuffer attributes have these meanings:\n\no size is the size of the internal record used by the implementation,\n  such as the size of a row in a table. size values cannot be changed.\n\no count is the number of internal records, such as the number of rows\n  in a table. count values can be changed using Performance Schema\n  configuration options.\n\no For a table, tbl_name.memory is the product of size and count. For\n  the Performance Schema as a whole, performance_schema.memory is the\n  sum of all the memory used (the sum of all other memory values).\n\nIn some cases, there is a direct relationship between a Performance\nSchema configuration parameter and a SHOW ENGINE value. For example,\nevents_waits_history_long.count corresponds to\nperformance_schema_events_waits_history_long_size. In other cases, the\nrelationship is more complex. For example, events_waits_history.count\ncorresponds to performance_schema_events_waits_history_size (the number\nof rows per thread) multiplied by\nperformance_schema_max_thread_instances ( the number of threads).\n\nSHOW ENGINE NDB STATUS If the server has the NDB storage engine\nenabled, SHOW ENGINE NDB STATUS displays cluster status information\nsuch as the number of connected data nodes, the cluster connectstring,\nand cluster binary log epochs, as well as counts of various Cluster API\nobjects created by the MySQL Server when connected to the cluster.\nSample output from this statement is shown here:\n\nmysql> SHOW ENGINE NDB STATUS;\n+------------+-----------------------+--------------------------------------------------+\n| Type       | Name                  | Status                                           |\n+------------+-----------------------+--------------------------------------------------+\n| ndbcluster | connection            | cluster_node_id=7,\n  connected_host=198.51.100.103, connected_port=1186, number_of_data_nodes=4,\n  number_of_ready_data_nodes=3, connect_count=0                                         |\n| ndbcluster | NdbTransaction        | created=6, free=0, sizeof=212                    |\n| ndbcluster | NdbOperation          | created=8, free=8, sizeof=660                    |\n| ndbcluster | NdbIndexScanOperation | created=1, free=1, sizeof=744                    |\n| ndbcluster | NdbIndexOperation     | created=0, free=0, sizeof=664                    |\n| ndbcluster | NdbRecAttr            | created=1285, free=1285, sizeof=60               |\n| ndbcluster | NdbApiSignal          | created=16, free=16, sizeof=136                  |\n| ndbcluster | NdbLabel              | created=0, free=0, sizeof=196                    |\n| ndbcluster | NdbBranch             | created=0, free=0, sizeof=24                     |\n| ndbcluster | NdbSubroutine         | created=0, free=0, sizeof=68                     |\n| ndbcluster | NdbCall               | created=0, free=0, sizeof=16                     |\n| ndbcluster | NdbBlob               | created=1, free=1, sizeof=264                    |\n| ndbcluster | NdbReceiver           | created=4, free=0, sizeof=68                     |\n| ndbcluster | binlog                | latest_epoch=155467, latest_trans_epoch=148126,\n  latest_received_binlog_epoch=0, latest_handled_binlog_epoch=0,\n  latest_applied_binlog_epoch=0                                                         |\n+------------+-----------------------+--------------------------------------------------+\n\nThe Status column in each of these rows provides information about the\nMySQL server\'s connection to the cluster and about the cluster binary\nlog\'s status, respectively. The Status information is in the form of\ncomma-delimited set of name/value pairs.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-engine.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-engine.html'),(621,'SHOW ENGINES',3,'Syntax:\nSHOW [STORAGE] ENGINES\n\nSHOW ENGINES displays status information about the server\'s storage\nengines. This is particularly useful for checking whether a storage\nengine is supported, or to see what the default engine is.\n\nFor information about MySQL storage engines, see\nhttps://dev.mysql.com/doc/refman/5.7/en/innodb-storage-engine.html, and\nhttps://dev.mysql.com/doc/refman/5.7/en/storage-engines.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-engines.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-engines.html'),(622,'SHOW ERRORS',3,'Syntax:\nSHOW ERRORS [LIMIT [offset,] row_count]\nSHOW COUNT(*) ERRORS\n\nSHOW ERRORS is a diagnostic statement that is similar to SHOW WARNINGS,\nexcept that it displays information only for errors, rather than for\nerrors, warnings, and notes.\n\nThe LIMIT clause has the same syntax as for the SELECT statement. See\nhttps://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nThe SHOW COUNT(*) ERRORS statement displays the number of errors. You\ncan also retrieve this number from the error_count variable:\n\nSHOW COUNT(*) ERRORS;\nSELECT @@error_count;\n\nSHOW ERRORS and error_count apply only to errors, not warnings or\nnotes. In other respects, they are similar to SHOW WARNINGS and\nwarning_count. In particular, SHOW ERRORS cannot display information\nfor more than max_error_count messages, and error_count can exceed the\nvalue of max_error_count if the number of errors exceeds\nmax_error_count.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-errors.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-errors.html'),(623,'SHOW EVENTS',3,'Syntax:\nSHOW EVENTS\n    [{FROM | IN} schema_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nThis statement displays information about Event Manager events, which\nare discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/event-scheduler.html. It\nrequires the EVENT privilege for the database from which the events are\nto be shown.\n\nIn its simplest form, SHOW EVENTS lists all of the events in the\ncurrent schema:\n\nmysql> SELECT CURRENT_USER(), SCHEMA();\n+----------------+----------+\n| CURRENT_USER() | SCHEMA() |\n+----------------+----------+\n| jon@ghidora    | myschema |\n+----------------+----------+\n1 row in set (0.00 sec)\n\nmysql> SHOW EVENTS\\G\n*************************** 1. row ***************************\n                  Db: myschema\n                Name: e_daily\n             Definer: jon@ghidora\n           Time zone: SYSTEM\n                Type: RECURRING\n          Execute at: NULL\n      Interval value: 1\n      Interval field: DAY\n              Starts: 2018-08-08 11:06:34\n                Ends: NULL\n              Status: ENABLED\n          Originator: 1\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n\nTo see events for a specific schema, use the FROM clause. For example,\nto see events for the test schema, use the following statement:\n\nSHOW EVENTS FROM test;\n\nThe LIKE clause, if present, indicates which event names to match. The\nWHERE clause can be given to select rows using more general conditions,\nas discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-events.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-events.html'),(624,'SHOW FUNCTION CODE',3,'Syntax:\nSHOW FUNCTION CODE func_name\n\nThis statement is similar to SHOW PROCEDURE CODE but for stored\nfunctions. See [HELP SHOW PROCEDURE CODE].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-function-code.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-function-code.html'),(625,'SHOW FUNCTION STATUS',3,'Syntax:\nSHOW FUNCTION STATUS\n    [LIKE \'pattern\' | WHERE expr]\n\nThis statement is similar to SHOW PROCEDURE STATUS but for stored\nfunctions. See [HELP SHOW PROCEDURE STATUS].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-function-status.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-function-status.html'),(626,'SHOW GRANTS',3,'Syntax:\nSHOW GRANTS [FOR user]\n\nThis statement displays the privileges that are assigned to a MySQL\nuser account, in the form of GRANT statements that must be executed to\nduplicate the privilege assignments.\n\n*Note*:\n\nTo display nonprivilege information for MySQL accounts, use the SHOW\nCREATE USER statement. See [HELP SHOW CREATE USER].\n\nSHOW GRANTS requires the SELECT privilege for the mysql system\ndatabase, except to display privileges for the current user.\n\nTo name the account for SHOW GRANTS, use the same format as for the\nGRANT statement (for example, \'jeffrey\'@\'localhost\'):\n\nmysql> SHOW GRANTS FOR \'jeffrey\'@\'localhost\';\n+------------------------------------------------------------------+\n| Grants for jeffrey@localhost                                     |\n+------------------------------------------------------------------+\n| GRANT USAGE ON *.* TO `jeffrey`@`localhost`                      |\n| GRANT SELECT, INSERT, UPDATE ON `db1`.* TO `jeffrey`@`localhost` |\n+------------------------------------------------------------------+\n\nThe host part, if omitted, defaults to \'%\'. For additional information\nabout specifying account names, see\nhttps://dev.mysql.com/doc/refman/5.7/en/account-names.html.\n\nTo display the privileges granted to the current user (the account you\nare using to connect to the server), you can use any of the following\nstatements:\n\nSHOW GRANTS;\nSHOW GRANTS FOR CURRENT_USER;\nSHOW GRANTS FOR CURRENT_USER();\n\nIf SHOW GRANTS FOR CURRENT_USER (or any equivalent syntax) is used in\ndefiner context, such as within a stored procedure that executes with\ndefiner rather than invoker privileges, the grants displayed are those\nof the definer and not the invoker.\n\nSHOW GRANTS does not display privileges that are available to the named\naccount but are granted to a different account. For example, if an\nanonymous account exists, the named account might be able to use its\nprivileges, but SHOW GRANTS does not display them.\n\nSHOW GRANTS output does not include IDENTIFIED BY PASSWORD clauses. Use\nthe SHOW CREATE USER statement instead. See [HELP SHOW CREATE USER].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-grants.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-grants.html'),(627,'SHOW INDEX',3,'Syntax:\nSHOW {INDEX | INDEXES | KEYS}\n    {FROM | IN} tbl_name\n    [{FROM | IN} db_name]\n    [WHERE expr]\n\nSHOW INDEX returns table index information. The format resembles that\nof the SQLStatistics call in ODBC. This statement requires some\nprivilege for any column in the table.\n\nmysql> SHOW INDEX FROM City\\G\n*************************** 1. row ***************************\n        Table: city\n   Non_unique: 0\n     Key_name: PRIMARY\n Seq_in_index: 1\n  Column_name: ID\n    Collation: A\n  Cardinality: 4188\n     Sub_part: NULL\n       Packed: NULL\n         Null:\n   Index_type: BTREE\n      Comment:\nIndex_comment:\n*************************** 2. row ***************************\n        Table: city\n   Non_unique: 1\n     Key_name: CountryCode\n Seq_in_index: 1\n  Column_name: CountryCode\n    Collation: A\n  Cardinality: 232\n     Sub_part: NULL\n       Packed: NULL\n         Null:\n   Index_type: BTREE\n      Comment:\nIndex_comment:\n\nAn alternative to tbl_name FROM db_name syntax is db_name.tbl_name.\nThese two statements are equivalent:\n\nSHOW INDEX FROM mytable FROM mydb;\nSHOW INDEX FROM mydb.mytable;\n\nThe WHERE clause can be given to select rows using more general\nconditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nSHOW INDEX returns the following fields:\n\no Table\n\n  The name of the table.\n\no Non_unique\n\n  0 if the index cannot contain duplicates, 1 if it can.\n\no Key_name\n\n  The name of the index. If the index is the primary key, the name is\n  always PRIMARY.\n\no Seq_in_index\n\n  The column sequence number in the index, starting with 1.\n\no Column_name\n\n  The name of the column.\n\no Collation\n\n  How the column is sorted in the index. This can have values A\n  (ascending) or NULL (not sorted).\n\no Cardinality\n\n  An estimate of the number of unique values in the index. To update\n  this number, run ANALYZE TABLE or (for MyISAM tables) myisamchk -a.\n\n  Cardinality is counted based on statistics stored as integers, so the\n  value is not necessarily exact even for small tables. The higher the\n  cardinality, the greater the chance that MySQL uses the index when\n  doing joins.\n\no Sub_part\n\n  The index prefix. That is, the number of indexed characters if the\n  column is only partly indexed, NULL if the entire column is indexed.\n\n  *Note*:\n\n  Prefix limits are measured in bytes. However, prefix lengths for\n  index specifications in CREATE TABLE, ALTER TABLE, and CREATE INDEX\n  statements are interpreted as number of characters for nonbinary\n  string types (CHAR, VARCHAR, TEXT) and number of bytes for binary\n  string types (BINARY, VARBINARY, BLOB). Take this into account when\n  specifying a prefix length for a nonbinary string column that uses a\n  multibyte character set.\n\n  For additional information about index prefixes, see\n  https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html, and\n  [HELP CREATE INDEX].\n\no Packed\n\n  Indicates how the key is packed. NULL if it is not.\n\no Null\n\n  Contains YES if the column may contain NULL values and \'\' if not.\n\no Index_type\n\n  The index method used (BTREE, FULLTEXT, HASH, RTREE).\n\no Comment\n\n  Information about the index not described in its own column, such as\n  disabled if the index is disabled.\n\no Index_comment\n\n  Any comment provided for the index with a COMMENT attribute when the\n  index was created.\n\nInformation about table indexes is also available from the\nINFORMATION_SCHEMA STATISTICS table. See\nhttps://dev.mysql.com/doc/refman/5.7/en/information-schema-statistics-t\nable.html.\n\nYou can list a table\'s indexes with the mysqlshow -k db_name tbl_name\ncommand.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-index.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-index.html'),(628,'SHOW MASTER STATUS',3,'Syntax:\nSHOW MASTER STATUS\n\nThis statement provides status information about the binary log files\nof the source. It requires either the SUPER or REPLICATION CLIENT\nprivilege.\n\nExample:\n\nmysql> SHOW MASTER STATUS\\G\n*************************** 1. row ***************************\n             File: source-bin.000002\n         Position: 1307\n     Binlog_Do_DB: test\n Binlog_Ignore_DB: manual, mysql\nExecuted_Gtid_Set: 3E11FA47-71CA-11E1-9E33-C80AA9429562:1-5\n1 row in set (0.00 sec)\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-master-status.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-master-status.html'),(629,'SHOW OPEN TABLES',3,'Syntax:\nSHOW OPEN TABLES\n    [{FROM | IN} db_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW OPEN TABLES lists the non-TEMPORARY tables that are currently open\nin the table cache. See\nhttps://dev.mysql.com/doc/refman/5.7/en/table-cache.html. The FROM\nclause, if present, restricts the tables shown to those present in the\ndb_name database. The LIKE clause, if present, indicates which table\nnames to match. The WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-open-tables.html'),(630,'SHOW PLUGINS',3,'Syntax:\nSHOW PLUGINS\n\nSHOW PLUGINS displays information about server plugins.\n\nExample of SHOW PLUGINS output:\n\nmysql> SHOW PLUGINS\\G\n*************************** 1. row ***************************\n   Name: binlog\n Status: ACTIVE\n   Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 2. row ***************************\n   Name: CSV\n Status: ACTIVE\n   Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 3. row ***************************\n   Name: MEMORY\n Status: ACTIVE\n   Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n*************************** 4. row ***************************\n   Name: MyISAM\n Status: ACTIVE\n   Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n...\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-plugins.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-plugins.html'),(631,'SHOW PRIVILEGES',3,'Syntax:\nSHOW PRIVILEGES\n\nSHOW PRIVILEGES shows the list of system privileges that the MySQL\nserver supports. The exact list of privileges depends on the version of\nyour server.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-privileges.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-privileges.html'),(632,'SHOW PROCEDURE CODE',3,'Syntax:\nSHOW PROCEDURE CODE proc_name\n\nThis statement is a MySQL extension that is available only for servers\nthat have been built with debugging support. It displays a\nrepresentation of the internal implementation of the named stored\nprocedure. A similar statement, SHOW FUNCTION CODE, displays\ninformation about stored functions (see [HELP SHOW FUNCTION CODE]).\n\nTo use either statement, you must be the owner of the routine or have\nSELECT access to the mysql.proc table.\n\nIf the named routine is available, each statement produces a result\nset. Each row in the result set corresponds to one \"instruction\" in the\nroutine. The first column is Pos, which is an ordinal number beginning\nwith 0. The second column is Instruction, which contains an SQL\nstatement (usually changed from the original source), or a directive\nwhich has meaning only to the stored-routine handler.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-procedure-code.html\n\n','mysql> DELIMITER //\nmysql> CREATE PROCEDURE p1 ()\n       BEGIN\n         DECLARE fanta INT DEFAULT 55;\n         DROP TABLE t2;\n         LOOP\n           INSERT INTO t3 VALUES (fanta);\n           END LOOP;\n         END//\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SHOW PROCEDURE CODE p1//\n+-----+----------------------------------------+\n| Pos | Instruction                            |\n+-----+----------------------------------------+\n|   0 | set fanta@0 55                         |\n|   1 | stmt 9 \"DROP TABLE t2\"                 |\n|   2 | stmt 5 \"INSERT INTO t3 VALUES (fanta)\" |\n|   3 | jump 2                                 |\n+-----+----------------------------------------+\n4 rows in set (0.00 sec)\n\nmysql> CREATE FUNCTION test.hello (s CHAR(20))\n       RETURNS CHAR(50) DETERMINISTIC\n       RETURN CONCAT(\'Hello, \',s,\'!\');\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> SHOW FUNCTION CODE test.hello;\n+-----+---------------------------------------+\n| Pos | Instruction                           |\n+-----+---------------------------------------+\n|   0 | freturn 254 concat(\'Hello, \',s@0,\'!\') |\n+-----+---------------------------------------+\n1 row in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/5.7/en/show-procedure-code.html'),(633,'SHOW PROCEDURE STATUS',3,'Syntax:\nSHOW PROCEDURE STATUS\n    [LIKE \'pattern\' | WHERE expr]\n\nThis statement is a MySQL extension. It returns characteristics of a\nstored procedure, such as the database, name, type, creator, creation\nand modification dates, and character set information. A similar\nstatement, SHOW FUNCTION STATUS, displays information about stored\nfunctions (see [HELP SHOW FUNCTION STATUS]).\n\nTo use either statement, you must be the owner of the routine or have\nSELECT access to the mysql.proc table.\n\nThe LIKE clause, if present, indicates which procedure or function\nnames to match. The WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-procedure-status.html\n\n','mysql> SHOW PROCEDURE STATUS LIKE \'sp1\'\\G\n*************************** 1. row ***************************\n                  Db: test\n                Name: sp1\n                Type: PROCEDURE\n             Definer: testuser@localhost\n            Modified: 2018-08-08 13:54:11\n             Created: 2018-08-08 13:54:11\n       Security_type: DEFINER\n             Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n\nmysql> SHOW FUNCTION STATUS LIKE \'hello\'\\G\n*************************** 1. row ***************************\n                  Db: test\n                Name: hello\n                Type: FUNCTION\n             Definer: testuser@localhost\n            Modified: 2020-03-10 11:09:33\n             Created: 2020-03-10 11:09:33\n       Security_type: DEFINER\n             Comment:\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n','https://dev.mysql.com/doc/refman/5.7/en/show-procedure-status.html'),(634,'SHOW PROCESSLIST',3,'Syntax:\nSHOW [FULL] PROCESSLIST\n\nThe MySQL process list indicates the operations currently being\nperformed by the set of threads executing within the server. The SHOW\nPROCESSLIST statement is one source of process information. For a\ncomparison of this statement with other sources, see\nhttps://dev.mysql.com/doc/refman/5.7/en/processlist-access.html#process\nlist-sources.\n\nIf you have the PROCESS privilege, you can see all threads, even those\nbelonging to other users. Otherwise (without the PROCESS privilege),\nnonanonymous users have access to information about their own threads\nbut not threads for other users, and anonymous users have no access to\nthread information.\n\nWithout the FULL keyword, SHOW PROCESSLIST displays only the first 100\ncharacters of each statement in the Info field.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-processlist.html'),(635,'SHOW PROFILE',3,'Syntax:\nSHOW PROFILE [type [, type] ... ]\n    [FOR QUERY n]\n    [LIMIT row_count [OFFSET offset]]\n\ntype: {\n    ALL\n  | BLOCK IO\n  | CONTEXT SWITCHES\n  | CPU\n  | IPC\n  | MEMORY\n  | PAGE FAULTS\n  | SOURCE\n  | SWAPS\n}\n\nThe SHOW PROFILE and SHOW PROFILES statements display profiling\ninformation that indicates resource usage for statements executed\nduring the course of the current session.\n\n*Note*:\n\nThe SHOW PROFILE and SHOW PROFILES statements are deprecated; expect\nthem to be removed in a future MySQL release. Use the Performance\nSchema instead; see\nhttps://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profil\ning.html.\n\nTo control profiling, use the profiling session variable, which has a\ndefault value of 0 (OFF). Enable profiling by setting profiling to 1 or\nON:\n\nmysql> SET profiling = 1;\n\nSHOW PROFILES displays a list of the most recent statements sent to the\nserver. The size of the list is controlled by the\nprofiling_history_size session variable, which has a default value of\n15. The maximum value is 100. Setting the value to 0 has the practical\neffect of disabling profiling.\n\nAll statements are profiled except SHOW PROFILE and SHOW PROFILES, so\nneither of those statements appears in the profile list. Malformed\nstatements are profiled. For example, SHOW PROFILING is an illegal\nstatement, and a syntax error occurs if you try to execute it, but it\nshows up in the profiling list.\n\nSHOW PROFILE displays detailed information about a single statement.\nWithout the FOR QUERY n clause, the output pertains to the most\nrecently executed statement. If FOR QUERY n is included, SHOW PROFILE\ndisplays information for statement n. The values of n correspond to the\nQuery_ID values displayed by SHOW PROFILES.\n\nThe LIMIT row_count clause may be given to limit the output to\nrow_count rows. If LIMIT is given, OFFSET offset may be added to begin\nthe output offset rows into the full set of rows.\n\nBy default, SHOW PROFILE displays Status and Duration columns. The\nStatus values are like the State values displayed by SHOW PROCESSLIST,\nalthough there might be some minor differences in interpretion for the\ntwo statements for some status values (see\nhttps://dev.mysql.com/doc/refman/5.7/en/thread-information.html).\n\nOptional type values may be specified to display specific additional\ntypes of information:\n\no ALL displays all information\n\no BLOCK IO displays counts for block input and output operations\n\no CONTEXT SWITCHES displays counts for voluntary and involuntary\n  context switches\n\no CPU displays user and system CPU usage times\n\no IPC displays counts for messages sent and received\n\no MEMORY is not currently implemented\n\no PAGE FAULTS displays counts for major and minor page faults\n\no SOURCE displays the names of functions from the source code, together\n  with the name and line number of the file in which the function\n  occurs\n\no SWAPS displays swap counts\n\nProfiling is enabled per session. When a session ends, its profiling\ninformation is lost.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-profile.html\n\n','mysql> SELECT @@profiling;\n+-------------+\n| @@profiling |\n+-------------+\n|           0 |\n+-------------+\n1 row in set (0.00 sec)\n\nmysql> SET profiling = 1;\nQuery OK, 0 rows affected (0.00 sec)\n\nmysql> DROP TABLE IF EXISTS t1;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nmysql> CREATE TABLE T1 (id INT);\nQuery OK, 0 rows affected (0.01 sec)\n\nmysql> SHOW PROFILES;\n+----------+----------+--------------------------+\n| Query_ID | Duration | Query                    |\n+----------+----------+--------------------------+\n|        0 | 0.000088 | SET PROFILING = 1        |\n|        1 | 0.000136 | DROP TABLE IF EXISTS t1  |\n|        2 | 0.011947 | CREATE TABLE t1 (id INT) |\n+----------+----------+--------------------------+\n3 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE;\n+----------------------+----------+\n| Status               | Duration |\n+----------------------+----------+\n| checking permissions | 0.000040 |\n| creating table       | 0.000056 |\n| After create         | 0.011363 |\n| query end            | 0.000375 |\n| freeing items        | 0.000089 |\n| logging slow query   | 0.000019 |\n| cleaning up          | 0.000005 |\n+----------------------+----------+\n7 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE FOR QUERY 1;\n+--------------------+----------+\n| Status             | Duration |\n+--------------------+----------+\n| query end          | 0.000107 |\n| freeing items      | 0.000008 |\n| logging slow query | 0.000015 |\n| cleaning up        | 0.000006 |\n+--------------------+----------+\n4 rows in set (0.00 sec)\n\nmysql> SHOW PROFILE CPU FOR QUERY 2;\n+----------------------+----------+----------+------------+\n| Status               | Duration | CPU_user | CPU_system |\n+----------------------+----------+----------+------------+\n| checking permissions | 0.000040 | 0.000038 |   0.000002 |\n| creating table       | 0.000056 | 0.000028 |   0.000028 |\n| After create         | 0.011363 | 0.000217 |   0.001571 |\n| query end            | 0.000375 | 0.000013 |   0.000028 |\n| freeing items        | 0.000089 | 0.000010 |   0.000014 |\n| logging slow query   | 0.000019 | 0.000009 |   0.000010 |\n| cleaning up          | 0.000005 | 0.000003 |   0.000002 |\n+----------------------+----------+----------+------------+\n7 rows in set (0.00 sec)\n','https://dev.mysql.com/doc/refman/5.7/en/show-profile.html'),(636,'SHOW PROFILES',3,'Syntax:\nSHOW PROFILES\n\nThe SHOW PROFILES statement, together with SHOW PROFILE, displays\nprofiling information that indicates resource usage for statements\nexecuted during the course of the current session. For more\ninformation, see [HELP SHOW PROFILE].\n\n*Note*:\n\nThe SHOW PROFILE and SHOW PROFILES statements are deprecated; expect\nthem to be removed in a future MySQL release. Use the Performance\nSchema instead; see\nhttps://dev.mysql.com/doc/refman/5.7/en/performance-schema-query-profil\ning.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-profiles.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-profiles.html'),(637,'SHOW RELAYLOG EVENTS',3,'Syntax:\nSHOW RELAYLOG EVENTS\n    [IN \'log_name\']\n    [FROM pos]\n    [LIMIT [offset,] row_count]\n    [channel_option]\n\nchannel_option:\n    FOR CHANNEL channel\n\nShows the events in the relay log of a replica. If you do not specify\n\'log_name\', the first relay log is displayed. This statement has no\neffect on the source. SHOW RELAYLOG EVENTS requires the REPLICATION\nSLAVE privilege.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-relaylog-events.html'),(638,'SHOW SLAVE HOSTS',3,'Syntax:\nSHOW SLAVE HOSTS\n\nDisplays a list of replicas currently registered with the source.\n\nSHOW SLAVE HOSTS should be executed on a server that acts as a\nreplication source. SHOW SLAVE HOSTS requires the REPLICATION SLAVE\nprivilege. The statement displays information about servers that are or\nhave been connected as replicas, with each row of the result\ncorresponding to one replica server, as shown here:\n\nmysql> SHOW SLAVE HOSTS;\n+------------+-----------+------+-----------+--------------------------------------+\n| Server_id  | Host      | Port | Master_id | Slave_UUID                           |\n+------------+-----------+------+-----------+--------------------------------------+\n|  192168010 | iconnect2 | 3306 | 192168011 | 14cb6624-7f93-11e0-b2c0-c80aa9429562 |\n| 1921680101 | athena    | 3306 | 192168011 | 07af4990-f41f-11df-a566-7ac56fdaf645 |\n+------------+-----------+------+-----------+--------------------------------------+\n\no Server_id: The unique server ID of the replica server, as configured\n  in the replica server\'s option file, or on the command line with\n  --server-id=value.\n\no Host: The host name of the replica server as specified on the replica\n  with the --report-host option. This can differ from the machine name\n  as configured in the operating system.\n\no User: The replica server user name as, specified on the replica with\n  the --report-user option. Statement output includes this column only\n  if the source server is started with the --show-slave-auth-info\n  option.\n\no Password: The replica server password as, specified on the replica\n  with the --report-password option. Statement output includes this\n  column only if the source server is started with the\n  --show-slave-auth-info option.\n\no Port: The port on the source to which the replica server is\n  listening, as specified on the replica with the --report-port option.\n\n  A zero in this column means that the replica port (--report-port) was\n  not set.\n\no Master_id: The unique server ID of the source server that the replica\n  server is replicating from. This is the server ID of the server on\n  which SHOW SLAVE HOSTS is executed, so this same value is listed for\n  each row in the result.\n\no Slave_UUID: The globally unique ID of this replica, as generated on\n  the replica and found in the replica\'s auto.cnf file.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-slave-hosts.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-slave-hosts.html'),(639,'SHOW SLAVE STATUS',3,'Syntax:\nSHOW SLAVE STATUS [FOR CHANNEL channel]\n\nThis statement provides status information on essential parameters of\nthe replica threads. It requires either the SUPER or REPLICATION CLIENT\nprivilege.\n\nIf you issue this statement using the mysql client, you can use a \\G\nstatement terminator rather than a semicolon to obtain a more readable\nvertical layout:\n\nmysql> SHOW SLAVE STATUS\\G\n*************************** 1. row ***************************\n               Slave_IO_State: Waiting for master to send event\n                  Master_Host: localhost\n                  Master_User: repl\n                  Master_Port: 13000\n                Connect_Retry: 60\n              Master_Log_File: source-bin.000002\n          Read_Master_Log_Pos: 1307\n               Relay_Log_File: replica-relay-bin.000003\n                Relay_Log_Pos: 1508\n        Relay_Master_Log_File: source-bin.000002\n             Slave_IO_Running: Yes\n            Slave_SQL_Running: Yes\n              Replicate_Do_DB:\n          Replicate_Ignore_DB:\n           Replicate_Do_Table:\n       Replicate_Ignore_Table:\n      Replicate_Wild_Do_Table:\n  Replicate_Wild_Ignore_Table:\n                   Last_Errno: 0\n                   Last_Error:\n                 Skip_Counter: 0\n          Exec_Master_Log_Pos: 1307\n              Relay_Log_Space: 1858\n              Until_Condition: None\n               Until_Log_File:\n                Until_Log_Pos: 0\n           Master_SSL_Allowed: No\n           Master_SSL_CA_File:\n           Master_SSL_CA_Path:\n              Master_SSL_Cert:\n            Master_SSL_Cipher:\n               Master_SSL_Key:\n        Seconds_Behind_Master: 0\nMaster_SSL_Verify_Server_Cert: No\n                Last_IO_Errno: 0\n                Last_IO_Error:\n               Last_SQL_Errno: 0\n               Last_SQL_Error:\n  Replicate_Ignore_Server_Ids:\n             Master_Server_Id: 1\n                  Master_UUID: 3e11fa47-71ca-11e1-9e33-c80aa9429562\n             Master_Info_File: /var/mysqld.2/data/master.info\n                    SQL_Delay: 0\n          SQL_Remaining_Delay: NULL\n      Slave_SQL_Running_State: Reading event from the relay log\n           Master_Retry_Count: 10\n                  Master_Bind:\n      Last_IO_Error_Timestamp:\n     Last_SQL_Error_Timestamp:\n               Master_SSL_Crl:\n           Master_SSL_Crlpath:\n           Retrieved_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5\n            Executed_Gtid_Set: 3e11fa47-71ca-11e1-9e33-c80aa9429562:1-5\n                Auto_Position: 1\n         Replicate_Rewrite_DB:\n                 Channel_name:\n           Master_TLS_Version: TLSv1.2\n\nThe Performance Schema provides tables that expose replication\ninformation. This is similar to the information available from the SHOW\nSLAVE STATUS statement, but represented in table form. For details, see\nhttps://dev.mysql.com/doc/refman/5.7/en/performance-schema-replication-\ntables.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-slave-status.html'),(640,'SHOW STATUS',3,'Syntax:\nSHOW [GLOBAL | SESSION] STATUS\n    [LIKE \'pattern\' | WHERE expr]\n\n*Note*:\n\nThe value of the show_compatibility_56 system variable affects the\ninformation available from and privileges required for the statement\ndescribed here. For details, see the description of that variable in\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nSHOW STATUS provides server status information (see\nhttps://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html).\nThis statement does not require any privilege. It requires only the\nability to connect to the server.\n\nStatus variable information is also available from these sources:\n\no Performance Schema tables. See\n  https://dev.mysql.com/doc/refman/5.7/en/performance-schema-status-var\n  iable-tables.html.\n\no The GLOBAL_STATUS and SESSION_STATUS tables. See\n  https://dev.mysql.com/doc/refman/5.7/en/information-schema-status-tab\n  le.html.\n\no The mysqladmin extended-status command. See\n  https://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html.\n\nFor SHOW STATUS, a LIKE clause, if present, indicates which variable\nnames to match. A WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nSHOW STATUS accepts an optional GLOBAL or SESSION variable scope\nmodifier:\n\no With a GLOBAL modifier, the statement displays the global status\n  values. A global status variable may represent status for some aspect\n  of the server itself (for example, Aborted_connects), or the\n  aggregated status over all connections to MySQL (for example,\n  Bytes_received and Bytes_sent). If a variable has no global value,\n  the session value is displayed.\n\no With a SESSION modifier, the statement displays the status variable\n  values for the current connection. If a variable has no session\n  value, the global value is displayed. LOCAL is a synonym for SESSION.\n\no If no modifier is present, the default is SESSION.\n\nThe scope for each status variable is listed at\nhttps://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html.\n\nEach invocation of the SHOW STATUS statement uses an internal temporary\ntable and increments the global Created_tmp_tables value.\n\nWith a LIKE clause, the statement displays only rows for those\nvariables with names that match the pattern:\n\nmysql> SHOW STATUS LIKE \'Key%\';\n+--------------------+----------+\n| Variable_name      | Value    |\n+--------------------+----------+\n| Key_blocks_used    | 14955    |\n| Key_read_requests  | 96854827 |\n| Key_reads          | 162040   |\n| Key_write_requests | 7589728  |\n| Key_writes         | 3813196  |\n+--------------------+----------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-status.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-status.html'),(641,'SHOW TABLE STATUS',3,'Syntax:\nSHOW TABLE STATUS\n    [{FROM | IN} db_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW TABLE STATUS works likes SHOW TABLES, but provides a lot of\ninformation about each non-TEMPORARY table. You can also get this list\nusing the mysqlshow --status db_name command. The LIKE clause, if\npresent, indicates which table names to match. The WHERE clause can be\ngiven to select rows using more general conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-table-status.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-table-status.html'),(642,'SHOW TABLES',3,'Syntax:\nSHOW [FULL] TABLES\n    [{FROM | IN} db_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW TABLES lists the non-TEMPORARY tables in a given database. You can\nalso get this list using the mysqlshow db_name command. The LIKE\nclause, if present, indicates which table names to match. The WHERE\nclause can be given to select rows using more general conditions, as\ndiscussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nMatching performed by the LIKE clause is dependent on the setting of\nthe lower_case_table_names system variable.\n\nThis statement also lists any views in the database. The optional FULL\nmodifier causes SHOW TABLES to display a second output column with\nvalues of BASE TABLE for a table, VIEW for a view, or SYSTEM VIEW for\nan INFORMATION_SCHEMA table.\n\nIf you have no privileges for a base table or view, it does not show up\nin the output from SHOW TABLES or mysqlshow db_name.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-tables.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-tables.html'),(643,'SHOW TRIGGERS',3,'Syntax:\nSHOW TRIGGERS\n    [{FROM | IN} db_name]\n    [LIKE \'pattern\' | WHERE expr]\n\nSHOW TRIGGERS lists the triggers currently defined for tables in a\ndatabase (the default database unless a FROM clause is given). This\nstatement returns results only for databases and tables for which you\nhave the TRIGGER privilege. The LIKE clause, if present, indicates\nwhich table names (not trigger names) to match and causes the statement\nto display triggers for those tables. The WHERE clause can be given to\nselect rows using more general conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nFor the ins_sum trigger defined in\nhttps://dev.mysql.com/doc/refman/5.7/en/triggers.html, the output of\nSHOW TRIGGERS is as shown here:\n\nmysql> SHOW TRIGGERS LIKE \'acc%\'\\G\n*************************** 1. row ***************************\n             Trigger: ins_sum\n               Event: INSERT\n               Table: account\n           Statement: SET @sum = @sum + NEW.amount\n              Timing: BEFORE\n             Created: 2018-08-08 10:10:12.61\n            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,\n                      NO_ZERO_IN_DATE,NO_ZERO_DATE,\n                      ERROR_FOR_DIVISION_BY_ZERO,\n                      NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION\n             Definer: me@localhost\ncharacter_set_client: utf8\ncollation_connection: utf8_general_ci\n  Database Collation: latin1_swedish_ci\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-triggers.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-triggers.html'),(644,'SHOW VARIABLES',3,'Syntax:\nSHOW [GLOBAL | SESSION] VARIABLES\n    [LIKE \'pattern\' | WHERE expr]\n\n*Note*:\n\nThe value of the show_compatibility_56 system variable affects the\ninformation available from and privileges required for the statement\ndescribed here. For details, see the description of that variable in\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nSHOW VARIABLES shows the values of MySQL system variables (see\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html).\nThis statement does not require any privilege. It requires only the\nability to connect to the server.\n\nSystem variable information is also available from these sources:\n\no Performance Schema tables. See\n  https://dev.mysql.com/doc/refman/5.7/en/performance-schema-system-var\n  iable-tables.html.\n\no The GLOBAL_VARIABLES and SESSION_VARIABLES tables. See\n  https://dev.mysql.com/doc/refman/5.7/en/information-schema-variables-\n  table.html.\n\no The mysqladmin variables command. See\n  https://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html.\n\nFor SHOW VARIABLES, a LIKE clause, if present, indicates which variable\nnames to match. A WHERE clause can be given to select rows using more\ngeneral conditions, as discussed in\nhttps://dev.mysql.com/doc/refman/5.7/en/extended-show.html.\n\nSHOW VARIABLES accepts an optional GLOBAL or SESSION variable scope\nmodifier:\n\no With a GLOBAL modifier, the statement displays global system variable\n  values. These are the values used to initialize the corresponding\n  session variables for new connections to MySQL. If a variable has no\n  global value, no value is displayed.\n\no With a SESSION modifier, the statement displays the system variable\n  values that are in effect for the current connection. If a variable\n  has no session value, the global value is displayed. LOCAL is a\n  synonym for SESSION.\n\no If no modifier is present, the default is SESSION.\n\nThe scope for each system variable is listed at\nhttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.\n\nSHOW VARIABLES is subject to a version-dependent display-width limit.\nFor variables with very long values that are not completely displayed,\nuse SELECT as a workaround. For example:\n\nSELECT @@GLOBAL.innodb_data_file_path;\n\nMost system variables can be set at server startup (read-only variables\nsuch as version_comment are exceptions). Many can be changed at runtime\nwith the SET statement. See\nhttps://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html,\nand [HELP SET].\n\nWith a LIKE clause, the statement displays only rows for those\nvariables with names that match the pattern. To obtain the row for a\nspecific variable, use a LIKE clause as shown:\n\nSHOW VARIABLES LIKE \'max_join_size\';\nSHOW SESSION VARIABLES LIKE \'max_join_size\';\n\nTo get a list of variables whose name match a pattern, use the %\nwildcard character in a LIKE clause:\n\nSHOW VARIABLES LIKE \'%size%\';\nSHOW GLOBAL VARIABLES LIKE \'%size%\';\n\nWildcard characters can be used in any position within the pattern to\nbe matched. Strictly speaking, because _ is a wildcard that matches any\nsingle character, you should escape it as \\_ to match it literally. In\npractice, this is rarely necessary.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-variables.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-variables.html'),(645,'SHOW WARNINGS',3,'Syntax:\nSHOW WARNINGS [LIMIT [offset,] row_count]\nSHOW COUNT(*) WARNINGS\n\nSHOW WARNINGS is a diagnostic statement that displays information about\nthe conditions (errors, warnings, and notes) resulting from executing a\nstatement in the current session. Warnings are generated for DML\nstatements such as INSERT, UPDATE, and LOAD DATA as well as DDL\nstatements such as CREATE TABLE and ALTER TABLE.\n\nThe LIMIT clause has the same syntax as for the SELECT statement. See\nhttps://dev.mysql.com/doc/refman/5.7/en/select.html.\n\nSHOW WARNINGS is also used following EXPLAIN, to display the extended\ninformation generated by EXPLAIN. See\nhttps://dev.mysql.com/doc/refman/5.7/en/explain-extended.html.\n\nSHOW WARNINGS displays information about the conditions resulting from\nexecution of the most recent nondiagnostic statement in the current\nsession. If the most recent statement resulted in an error during\nparsing, SHOW WARNINGS shows the resulting conditions, regardless of\nstatement type (diagnostic or nondiagnostic).\n\nThe SHOW COUNT(*) WARNINGS diagnostic statement displays the total\nnumber of errors, warnings, and notes. You can also retrieve this\nnumber from the warning_count system variable:\n\nSHOW COUNT(*) WARNINGS;\nSELECT @@warning_count;\n\nA difference in these statements is that the first is a diagnostic\nstatement that does not clear the message list. The second, because it\nis a SELECT statement is considered nondiagnostic and does clear the\nmessage list.\n\nA related diagnostic statement, SHOW ERRORS, shows only error\nconditions (it excludes warnings and notes), and SHOW COUNT(*) ERRORS\nstatement displays the total number of errors. See [HELP SHOW ERRORS].\nGET DIAGNOSTICS can be used to examine information for individual\nconditions. See [HELP GET DIAGNOSTICS].\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/show-warnings.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/show-warnings.html'),(646,'BINLOG',3,'Syntax:\nBINLOG \'str\'\n\nBINLOG is an internal-use statement. It is generated by the mysqlbinlog\nprogram as the printable representation of certain events in binary log\nfiles. (See https://dev.mysql.com/doc/refman/5.7/en/mysqlbinlog.html.)\nThe \'str\' value is a base 64-encoded string the that server decodes to\ndetermine the data change indicated by the corresponding event. This\nstatement requires the SUPER privilege.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/binlog.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/binlog.html'),(647,'CACHE INDEX',3,'Syntax:\nCACHE INDEX {\n      tbl_index_list [, tbl_index_list] ...\n    | tbl_name PARTITION (partition_list)\n  }\n  IN key_cache_name\n\ntbl_index_list:\n  tbl_name [{INDEX|KEY} (index_name[, index_name] ...)]\n\npartition_list: {\n    partition_name[, partition_name] ...\n  | ALL\n}\n\nThe CACHE INDEX statement assigns table indexes to a specific key\ncache. It applies only to MyISAM tables, including partitioned MyISAM\ntables. After the indexes have been assigned, they can be preloaded\ninto the cache if desired with LOAD INDEX INTO CACHE.\n\nThe following statement assigns indexes from the tables t1, t2, and t3\nto the key cache named hot_cache:\n\nmysql> CACHE INDEX t1, t2, t3 IN hot_cache;\n+---------+--------------------+----------+----------+\n| Table   | Op                 | Msg_type | Msg_text |\n+---------+--------------------+----------+----------+\n| test.t1 | assign_to_keycache | status   | OK       |\n| test.t2 | assign_to_keycache | status   | OK       |\n| test.t3 | assign_to_keycache | status   | OK       |\n+---------+--------------------+----------+----------+\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/cache-index.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/cache-index.html'),(648,'FLUSH',3,'Syntax:\nFLUSH [NO_WRITE_TO_BINLOG | LOCAL] {\n    flush_option [, flush_option] ...\n  | tables_option\n}\n\nflush_option: {\n    BINARY LOGS\n  | DES_KEY_FILE\n  | ENGINE LOGS\n  | ERROR LOGS\n  | GENERAL LOGS\n  | HOSTS\n  | LOGS\n  | PRIVILEGES\n  | OPTIMIZER_COSTS\n  | QUERY CACHE\n  | RELAY LOGS [FOR CHANNEL channel]\n  | SLOW LOGS\n  | STATUS\n  | USER_RESOURCES\n}\n\ntables_option: {\n    TABLES\n  | TABLES tbl_name [, tbl_name] ...\n  | TABLES WITH READ LOCK\n  | TABLES tbl_name [, tbl_name] ... WITH READ LOCK\n  | TABLES tbl_name [, tbl_name] ... FOR EXPORT\n}\n\nThe FLUSH statement has several variant forms that clear or reload\nvarious internal caches, flush tables, or acquire locks. To execute\nFLUSH, you must have the RELOAD privilege. Specific flush options might\nrequire additional privileges, as indicated in the option descriptions.\n\n*Note*:\n\nIt is not possible to issue FLUSH statements within stored functions or\ntriggers. However, you may use FLUSH in stored procedures, so long as\nthese are not called from stored functions or triggers. See\nhttps://dev.mysql.com/doc/refman/5.7/en/stored-program-restrictions.htm\nl.\n\nBy default, the server writes FLUSH statements to the binary log so\nthat they replicate to replicas. To suppress logging, specify the\noptional NO_WRITE_TO_BINLOG keyword or its alias LOCAL.\n\n*Note*:\n\nFLUSH LOGS, FLUSH BINARY LOGS, FLUSH TABLES WITH READ LOCK (with or\nwithout a table list), and FLUSH TABLES tbl_name ... FOR EXPORT are not\nwritten to the binary log in any case because they would cause problems\nif replicated to a replica.\n\nThe FLUSH statement causes an implicit commit. See\nhttps://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nThe mysqladmin utility provides a command-line interface to some flush\noperations, using commands such as flush-hosts, flush-logs,\nflush-privileges, flush-status, and flush-tables. See\nhttps://dev.mysql.com/doc/refman/5.7/en/mysqladmin.html.\n\nSending a SIGHUP signal to the server causes several flush operations\nto occur that are similar to various forms of the FLUSH statement.\nSignals can be sent by the root system account or the system account\nthat owns the server process. This enables the flush operations to be\nperformed without having to connect to the server, which requires a\nMySQL account that has privileges sufficient for those operations. See\nhttps://dev.mysql.com/doc/refman/5.7/en/unix-signal-response.html.\n\nThe RESET statement is similar to FLUSH. See [HELP RESET], for\ninformation about using RESET with replication.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/flush.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/flush.html'),(649,'KILL',3,'Syntax:\nKILL [CONNECTION | QUERY] processlist_id\n\nEach connection to mysqld runs in a separate thread. You can kill a\nthread with the KILL processlist_id statement.\n\nThread processlist identifiers can be determined from the ID column of\nthe INFORMATION_SCHEMA PROCESSLIST table, the Id column of SHOW\nPROCESSLIST output, and the PROCESSLIST_ID column of the Performance\nSchema threads table. The value for the current thread is returned by\nthe CONNECTION_ID() function.\n\nKILL permits an optional CONNECTION or QUERY modifier:\n\no KILL CONNECTION is the same as KILL with no modifier: It terminates\n  the connection associated with the given processlist_id, after\n  terminating any statement the connection is executing.\n\no KILL QUERY terminates the statement the connection is currently\n  executing, but leaves the connection itself intact.\n\nThe ability to see which threads are available to be killed depends on\nthe PROCESS privilege:\n\no Without PROCESS, you can see only your own threads.\n\no With PROCESS, you can see all threads.\n\nThe ability to kill threads and statements depends on the SUPER\nprivilege:\n\no Without SUPER, you can kill only your own threads and statements.\n\no With SUPER, you can kill all threads and statements.\n\nYou can also use the mysqladmin processlist and mysqladmin kill\ncommands to examine and kill threads.\n\n*Note*:\n\nYou cannot use KILL with the Embedded MySQL Server library because the\nembedded server merely runs inside the threads of the host application.\nIt does not create any connection threads of its own.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/kill.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/kill.html'),(650,'LOAD INDEX',3,'Syntax:\nLOAD INDEX INTO CACHE\n  tbl_index_list [, tbl_index_list] ...\n\ntbl_index_list:\n  tbl_name\n    [PARTITION (partition_list)]\n    [{INDEX|KEY} (index_name[, index_name] ...)]\n    [IGNORE LEAVES]\n\npartition_list: {\n    partition_name[, partition_name] ...\n  | ALL\n}\n\nThe LOAD INDEX INTO CACHE statement preloads a table index into the key\ncache to which it has been assigned by an explicit CACHE INDEX\nstatement, or into the default key cache otherwise.\n\nLOAD INDEX INTO CACHE applies only to MyISAM tables, including\npartitioned MyISAM tables. In addition, indexes on partitioned tables\ncan be preloaded for one, several, or all partitions.\n\nThe IGNORE LEAVES modifier causes only blocks for the nonleaf nodes of\nthe index to be preloaded.\n\nIGNORE LEAVES is also supported for partitioned MyISAM tables.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/load-index.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/load-index.html'),(651,'RESET',3,'Syntax:\nRESET reset_option [, reset_option] ...\n\nreset_option: {\n    MASTER\n  | QUERY CACHE\n  | SLAVE\n}\n\nThe RESET statement is used to clear the state of various server\noperations. You must have the RELOAD privilege to execute RESET.\n\nRESET acts as a stronger version of the FLUSH statement. See [HELP\nFLUSH].\n\nThe RESET statement causes an implicit commit. See\nhttps://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html.\n\nThe following list describes the permitted RESET statement reset_option\nvalues:\n\no RESET MASTER\n\n  Deletes all binary logs listed in the index file, resets the binary\n  log index file to be empty, and creates a new binary log file.\n\no RESET QUERY CACHE\n\n  Removes all query results from the query cache.\n\n  *Note*:\n\n  The query cache is deprecated as of MySQL 5.7.20, and is removed in\n  MySQL 8.0. Deprecation includes RESET QUERY CACHE.\n\no RESET SLAVE\n\n  Makes the replica forget its replication position in the source\n  binary logs. Also resets the relay log by deleting any existing relay\n  log files and beginning a new one.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/reset.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/reset.html'),(652,'SHUTDOWN',3,'Syntax:\nSHUTDOWN\n\nThis statement stops the MySQL server. It requires the SHUTDOWN\nprivilege.\n\nSHUTDOWN provides an SQL-level interface to the same functionality\navailable using the mysqladmin shutdown command or the mysql_shutdown()\n(https://dev.mysql.com/doc/c-api/5.7/en/mysql-shutdown.html) C API\nfunction. A successful SHUTDOWN sequence consists of checking the\nprivileges, validating the arguments, and sending an OK packet to the\nclient. Then the server is shut down.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/shutdown.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/shutdown.html'),(653,'EXPLAIN',48,'Syntax:\n{EXPLAIN | DESCRIBE | DESC}\n    tbl_name [col_name | wild]\n\n{EXPLAIN | DESCRIBE | DESC}\n    [explain_type]\n    {explainable_stmt | FOR CONNECTION connection_id}\n\nexplain_type: {\n    EXTENDED\n  | PARTITIONS\n  | FORMAT = format_name\n}\n\nformat_name: {\n    TRADITIONAL\n  | JSON\n}\n\nexplainable_stmt: {\n    SELECT statement\n  | DELETE statement\n  | INSERT statement\n  | REPLACE statement\n  | UPDATE statement\n}\n\nThe DESCRIBE and EXPLAIN statements are synonyms. In practice, the\nDESCRIBE keyword is more often used to obtain information about table\nstructure, whereas EXPLAIN is used to obtain a query execution plan\n(that is, an explanation of how MySQL would execute a query).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/explain.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/explain.html'),(654,'DESCRIBE',48,'Syntax:\n{EXPLAIN | DESCRIBE | DESC}\n    tbl_name [col_name | wild]\n\n{EXPLAIN | DESCRIBE | DESC}\n    [explain_type]\n    {explainable_stmt | FOR CONNECTION connection_id}\n\nexplain_type: {\n    EXTENDED\n  | PARTITIONS\n  | FORMAT = format_name\n}\n\nformat_name: {\n    TRADITIONAL\n  | JSON\n}\n\nexplainable_stmt: {\n    SELECT statement\n  | DELETE statement\n  | INSERT statement\n  | REPLACE statement\n  | UPDATE statement\n}\n\nThe DESCRIBE and EXPLAIN statements are synonyms. In practice, the\nDESCRIBE keyword is more often used to obtain information about table\nstructure, whereas EXPLAIN is used to obtain a query execution plan\n(that is, an explanation of how MySQL would execute a query).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/explain.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/explain.html'),(655,'DESC',48,'Syntax:\n{EXPLAIN | DESCRIBE | DESC}\n    tbl_name [col_name | wild]\n\n{EXPLAIN | DESCRIBE | DESC}\n    [explain_type]\n    {explainable_stmt | FOR CONNECTION connection_id}\n\nexplain_type: {\n    EXTENDED\n  | PARTITIONS\n  | FORMAT = format_name\n}\n\nformat_name: {\n    TRADITIONAL\n  | JSON\n}\n\nexplainable_stmt: {\n    SELECT statement\n  | DELETE statement\n  | INSERT statement\n  | REPLACE statement\n  | UPDATE statement\n}\n\nThe DESCRIBE and EXPLAIN statements are synonyms. In practice, the\nDESCRIBE keyword is more often used to obtain information about table\nstructure, whereas EXPLAIN is used to obtain a query execution plan\n(that is, an explanation of how MySQL would execute a query).\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/explain.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/explain.html'),(656,'HELP STATEMENT',48,'Syntax:\nHELP \'search_string\'\n\nThe HELP statement returns online information from the MySQL Reference\nManual. Its proper operation requires that the help tables in the mysql\ndatabase be initialized with help topic information (see\nhttps://dev.mysql.com/doc/refman/5.7/en/server-side-help-support.html).\n\nThe HELP statement searches the help tables for the given search string\nand displays the result of the search. The search string is not\ncase-sensitive.\n\nThe search string can contain the wildcard characters % and _. These\nhave the same meaning as for pattern-matching operations performed with\nthe LIKE operator. For example, HELP \'rep%\' returns a list of topics\nthat begin with rep.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/help.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/help.html'),(657,'USE',48,'Syntax:\nUSE db_name\n\nThe USE statement tells MySQL to use the named database as the default\n(current) database for subsequent statements. This statement requires\nsome privilege for the database or some object within it.\n\nThe named database remains the default until the end of the session or\nanother USE statement is issued:\n\nUSE db1;\nSELECT COUNT(*) FROM mytable;   # selects from db1.mytable\nUSE db2;\nSELECT COUNT(*) FROM mytable;   # selects from db2.mytable\n\nThe database name must be specified on a single line. Newlines in\ndatabase names are not supported.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/use.html\n\n','','https://dev.mysql.com/doc/refman/5.7/en/use.html'),(658,'MERGE',49,'The MERGE storage engine, also known as the MRG_MyISAM engine, is a\ncollection of identical MyISAM tables that can be used as one.\n\"Identical\" means that all tables have identical column data types and\nindex information. You cannot merge MyISAM tables in which the columns\nare listed in a different order, do not have exactly the same data\ntypes in corresponding columns, or have the indexes in different order.\nHowever, any or all of the MyISAM tables can be compressed with\nmyisampack. See\nhttps://dev.mysql.com/doc/refman/5.7/en/myisampack.html. Differences\nbetween tables such as these do not matter:\n\no Names of corresponding columns and indexes can differ.\n\no Comments for tables, columns, and indexes can differ.\n\no Table options such as AVG_ROW_LENGTH, MAX_ROWS, or PACK_KEYS can\n  differ.\n\nURL: https://dev.mysql.com/doc/refman/5.7/en/merge-storage-engine.html\n\n','mysql> CREATE TABLE t1 (\n    ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n    ->    message CHAR(20)) ENGINE=MyISAM;\nmysql> CREATE TABLE t2 (\n    ->    a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\n    ->    message CHAR(20)) ENGINE=MyISAM;\nmysql> INSERT INTO t1 (message) VALUES (\'Testing\'),(\'table\'),(\'t1\');\nmysql> INSERT INTO t2 (message) VALUES (\'Testing\'),(\'table\'),(\'t2\');\nmysql> CREATE TABLE total (\n    ->    a INT NOT NULL AUTO_INCREMENT,\n    ->    message CHAR(20), INDEX(a))\n    ->    ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;\n','https://dev.mysql.com/doc/refman/5.7/en/merge-storage-engine.html');

--
