gpt4 book ai didi

MySQl 替换为自动增量主键和 MUL 辅助键

转载 作者:行者123 更新时间:2023-11-29 10:25:03 28 4
gpt4 key购买 nike

我有一个现有的表,我通过一个脚本过夜填充该表,该脚本读取二进制格式文件并将其转换为通过管道传输到 mysql 的一系列 replace 语句。该脚本存在错误,并且对每个二进制文件循环两次,因此每个 replace 语句都会发出两次。

现在表具有自动递增主键,并且替换语句没有指定它。我期望得到两个条目(具有不同的整数主键值)。我实际上不明白重复的内容。

更多细节:

来自描述a.b:

 Field | Type    | Null | Key | Default | Extra
------|---------|------|-----|---------|---------------
id | int(11) | NO | PRI | NULL | auto_increment
name | char(8) | YES | MUL | NULL |
date | date | YES | | NULL |
size | int(11) | YES | | NULL |

示例replace语句是

replace into a.b (name,date,size) values ('Joe',20180105,32100);

脚本运行后,我查看表中的条目,发现给定日期只有一个给定大小的 Joe 条目。 select * from a.b where name='Joe' and date=20180105 的结果是:

id     | name | date       | size
-------|------|------------|------
20423 | Joe | 2018-01-05 | 32100

(而我希望看到另一行具有不同的 id 以及其余列中的相同值。)

我似乎在这里得到了我想要的答案,如果脚本正确运行,每个 replace 语句无论如何都只会出现一次,但我不明白为什么(因此不不完全相信它)。

编辑

为了回应评论,这里是 show index from a.b 的结果(当我把它带来时,我对基数进行了四舍五入):

Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment
------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+--------
b | 0 | PRIMARY | 1 | id | A | 1000000 | Null | Null | YES | BTREE |
b | 0 | n_d | 1 | name | A | 100 | Null | Null | YES | BTREE |
b | 0 | n_d | 2 | date | A | 10000 | Null | Null | YES | BTREE |

所以,我想也许我误解了描述结果中MUL的含义?来自文档:

If Key is MUL, the column is the first column of a nonunique index in which multiple occurrences of a given value are permitted within the column.

正是那里的“非独特”让我认为这不会导致第二次替换时线路被杀死。是否只是标记 name 本身没有唯一索引(尽管总的来说,n_d 索引是唯一的)?

最佳答案

我无法重现您的观察结果(无论如何在 mariadb 中)。

MariaDB [sandbox]> drop table if exists t;
Query OK, 0 rows affected (0.07 sec)

MariaDB [sandbox]> create table t
-> (id int auto_increment primary key,
-> name char(8) null default null,
-> date date null default null,
-> size int null default null
-> );
Query OK, 0 rows affected (0.12 sec)

MariaDB [sandbox]> alter table t
-> add key tk1(name);
Query OK, 0 rows affected (0.04 sec)
Records: 0 Duplicates: 0 Warnings: 0

MariaDB [sandbox]>
MariaDB [sandbox]> describe t;
+-------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | char(8) | YES | MUL | NULL | |
| date | date | YES | | NULL | |
| size | int(11) | YES | | NULL | |
+-------+---------+------+-----+---------+----------------+
4 rows in set (0.02 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> replace t (name,date,size) values ('aaa','2018-01-30',1);
Query OK, 1 row affected (0.00 sec)

MariaDB [sandbox]> replace t (name,date,size) values ('aaa','2018-01-31',2);
Query OK, 1 row affected (0.00 sec)

MariaDB [sandbox]>
MariaDB [sandbox]> select * from t;
+----+------+------------+------+
| id | name | date | size |
+----+------+------------+------+
| 1 | aaa | 2018-01-30 | 1 |
| 2 | aaa | 2018-01-31 | 2 |
+----+------+------------+------+
2 rows in set (0.00 sec)

关于MySQl 替换为自动增量主键和 MUL 辅助键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48464183/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com