我创建了一个程序来循环遍历大型 InnoDB 表并删除一大块行,然后暂停并重复直到达到允许的最大字段值。
启用了二进制日志记录,但我将其保留为默认NONDETERMINISTIC设置,所以我认为这并不重要。
CALL 命令包括每行要删除的行数 ( num_rows),以及要删除的最后一个字段值 ( maxId)。(我正在使用主键 ID)。
第一部分工作正常,它循环遍历并每次通过删除一大块行。
有一个If语句来检查@z当前块的最后一个 id ( ) ,maxId如果最后一个 id 为空或大于 ,它应该退出循环maxId。但它永远不会触发并离开循环。
我无法确定我做错了什么,想法?
更新:
我已经确定了问题的根源,但我不确定如何解决它。
@z要删除的块的最后一个 id使用@sql_text2查询中的限制语句设置。
但最后,该查询中的限制选项导致它返回一个空结果集,因为偏移量大于结果集并且要返回的行数为 1。
例如,我运行了将在最后运行的查询,它返回一个空的结果集(为了清晰起见,更改了数字)。使用id为keyfield:
SELECT id FROM table_name WHERE id >= 7000 ORDER BY id LIMIT 1000,1;
Run Code Online (Sandbox Code Playgroud)
@sql_text2程序将运行的查询(使用INTO @z):
SELECT id INTO @z FROM table_name WHERE id >= 7000 ORDER BY id LIMIT 1000,1; …Run Code Online (Sandbox Code Playgroud) 我想澄清一下--flush-privilegesmysqldump的选项。
以下是MySQL 文档中该选项的描述:
--flush-privileges
Send a FLUSH PRIVILEGES statement to the server after dumping the mysql database.
This option should be used any time the dump contains the mysql database and any other
database that depends on the data in the mysql database for proper restoration.
Run Code Online (Sandbox Code Playgroud)
当它说它在转储数据库后发送刷新语句时,我读到这意味着数据、模式等被转储到备份文件中,然后刷新语句被发送到刚刚转储的数据库(在它之后被抛弃)。
我想知道什么转储数据等需要刷新特权,所以我开始寻找解释以确定何时以及为什么使用它。
当我阅读各种答案时,我想到如果将flush 语句包含在转储文件中是有意义的。然后在将文件内容加载到数据库中后,运行刷新权限语句以在导入新信息后更新设置。
那么它是怎样工作的?
A)将数据转储到文件后刷新源数据库?如果是这样,为什么这是必要的?
B) 在导入转储文件的内容后刷新目标数据库?
C) 除了我所描述的可能性之外的其他东西?
你能在一个 MySQLCREATE TABLE查询中列出多个表名吗?
CREATE TABLE table1, table2, table3 LIKE table_template;
Run Code Online (Sandbox Code Playgroud)
如果是这样,你能用IF NOT EXISTS子句来做吗?
CREATE TABLE IF NOT EXISTS table1, table2, table3 LIKE table_template;
Run Code Online (Sandbox Code Playgroud)
我知道你可以这样做DROP TABLE:
DROP TABLE IF EXISTS table1, table2, table3;
Run Code Online (Sandbox Code Playgroud)
该文档为DROP TABLE明确表明您输入名称的字符串:
DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]
Run Code Online (Sandbox Code Playgroud)
该文档为CREATE TABLE不显示表名字符串:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
More Syntax Variations ...
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出我明确指出可以或不能使用一个查询创建多个表的参考吗?