mysql - 嵌套循环计算

标签 mysql nested

好吧,也许这比我需要的要深入得多,但是我希望能够分析这个嵌套循环,以便我能够理解它。

给定:

mysql> describe t1;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| dt    | datetime | NO   | MUL | NULL    |       |
+-------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)

并且:

mysql> insert t1 values(101),(102),(103),(104),(105),(106),(107),(@c:=now());
Query OK, 8 rows affected (0.03 sec)
Records: 8  Duplicates: 0  Warnings: 0

还有:

mysql> insert t1 select @c:=@c+interval 1 second from t1,t1 b,t1 c,t1 d,t1 e,t1 f;
Query OK, 262144 rows affected (1.94 sec)
Records: 262144  Duplicates: 0  Warnings: 0

到目前为止,我了解到 (#ofrows)^(#oftables)=(添加的行数)

我的问题是为什么会出现这种情况。我无法确切地了解 MySQL 如何处理行和其他系统变量,以便创建我在这里提供的方程。我的等式显然是服务器执行的结果操作的简化版本,因为使用 2 行数据和 6 个表同样给出了 64 的输出。

有谁知道这是如何操纵的吗?我已经为此工作了 2 天,但我无法摆脱它......

另外为什么它插入超过 6 个...也许 36 个?首先将行放入表中?它只是从表中指定一个可能的可选择行,即之前插入的 now() ,然后向该行添加 1 秒并根据最终更改重置 @c,因此逻辑上不应该只插入一个几行?

我想简单地说,我明白语句的 select @c:=@c+interval 1 秒部分中具体发生了什么,但在那之后我不太确定......

我想简单地说:

select @c:=@c+interval 1 second;
+--------------------------+
| @c:=@c+interval 1 second |
+--------------------------+
| 2014-07-20 18:17:50      |
+--------------------------+
1 row in set (0.00 sec)

变成这样:

...
Query OK, 262144 rows affected (1.94 sec) 
Records: 262144 Duplicates: 0 Warnings: 0

最佳答案

在这个问题上令我满意的答案是如此简单,我不敢相信我之前没有意识到这一点。

今天,我需要快速用值填充表格,因此我决定使用另一个必须执行此操作的表格。例如,采用表 i,其列 i 的值为 1-50。我执行了以下命令来填充表 c 列 i。

插入 c 从 i,i b 中选择 i.i;

根据我上面的知识,我知道这将用 2500 个值填充表 c。因为它执行了 50^2。

我实际上发现这样做是检查表 i 中的每一行,并将其乘以第一个缓冲实例 i b 中找到的行数,然后将结果行插入表中。如果您有更多缓冲实例,它将从其中获取结果,然后继续将这些结果进一步乘以实例中找到的原始 50 行(例如 ic)。

我最终在表 c 中得到了 50 行 1-50 的结果。

我之前没有意识到这种基于匹配的乘法是以这种方式执行的,因为我使用的是递增运算符,它会基于此乘法增量创建新行,但是它没有留下任何迹象表明这是什么之所以这样做,是因为它不匹配要复制的行,而是匹配要插入的行数。

关于mysql - 嵌套循环计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24799356/

相关文章:

mysql - 插入自动递增字段

mysql - 更改 mysql 代码以通过逗号分隔符在一行中列出所有图像

java - 如何使用java将Jtable中选中的复选框项保存到mysql?

mysql - 获取mysql中嵌套查询的值

iphone - 如何从 UIScrollView 窃取触摸?

mysql - 创建名为 $email 的数据库表

包裹在事务中时,Mysql DDL 查询卡在等待表元数据锁定

php - 使用 Ajax 和 PHP 加载数据库表

spring - 嵌套验证组,Spring,JSR 303

r - 确定R中的嵌套级别?