小编Goo*_*bot的帖子

UNIQUE(), INDEX() 与 UNIQUE INDEX() 不同吗?

mysql 的处理方式有什么不同吗

UNIQUE (column1, column2),
INDEX (column1)
Run Code Online (Sandbox Code Playgroud)

和

UNIQUE INDEX (column1, column2)
Run Code Online (Sandbox Code Playgroud)

和

UNIQUE (column1, column2)
Run Code Online (Sandbox Code Playgroud)

在后者中,我认为mysql会自动创建索引UNIQUE以避免重复记录。我对吗?

mysql innodb index unique-constraint

3
推荐指数
1
解决办法
274
查看次数

如何使用 ON DUPLICATE KEY 进行更新

考虑一个表

CREATE TABLE test
(
id int(11) unsigned NOT NULL AUTO_INCREMENT,
external_id int(11),
number smallint(5),
value varchar(255),
UNIQUE INDEX (external_id, number),
PRIMARY KEY(id)
) ENGINE=InnoDB
Run Code Online (Sandbox Code Playgroud)

将 number 的值更新为

UPDATE test SET number=number + 1 WHERE external_id='X'
Run Code Online (Sandbox Code Playgroud)

或者

UPDATE test SET number='Y' WHERE external_id='X'
Run Code Online (Sandbox Code Playgroud)

由于 external_id-number 对是唯一的,如果 number 的新值存在,则不会更新。

如何根据 UNIQUE 约束使用类似INSERT ... ON DUPLICATE KEY增加numberby的值number + 1以达到可用值并完成UPDATE任务?

mysql innodb query duplication unique-constraint

3
推荐指数
1
解决办法
1万
查看次数

GROUP BY 两列

我想计算两列,但需要在一行中获取第一列的结果。

SELECT country, COUNT(*)
FROM table1
GROUP BY country, type
Run Code Online (Sandbox Code Playgroud)

这个查询给了我

country    type     COUNT(*)
Canada     first    22
Canada     second   42
Canada     third    15
Australia  second   23
Australia  third    18
Run Code Online (Sandbox Code Playgroud)

但我需要得到

country    type_first   type_second   type_third
Canada     22           42            15
Australia  23           18            0
Run Code Online (Sandbox Code Playgroud)

因为我想用这些值更新另一个表,并且使用这个行结构,我可以根据上述查询逐行更新国家/地区表。

UPDATE country SET first=x, second=x, third=x
Run Code Online (Sandbox Code Playgroud)

注意:type列ENUM具有预定义的值。

mysql select update group-by

3
推荐指数
1
解决办法
1万
查看次数

仅当另一个表中的 COUNT 不为零时才更新

我通过计算另一个表中的 FK 来更新一个表

UPDATE table1 
SET number = number +
(
SELECT COUNT(*) FROM table2 
WHERE  table1.id=table2.id
)
Run Code Online (Sandbox Code Playgroud)

table1是一张大桌子,我想制作UPDATE唯一的如果COUNT找到了一些东西。换句话说,我不想制作UPDATEfor number=0。

mysql count update

2
推荐指数
1
解决办法
2562
查看次数

可能为 NULL 单元格的两列的差异

我需要按两列的差异对表格进行排序

SELECT (first - second) AS dif
    FROM table1
ORDER BY dif DESC
Run Code Online (Sandbox Code Playgroud)

但两列可以NULL。在这种情况下,它返回错误:

BIGINT UNSIGNED value is out of range
Run Code Online (Sandbox Code Playgroud)

这个错误的解决方案是使用IFNULL(col,0),但问题是,我需要dif是NULL,如果任一列是NULL

mysql null query order-by select

0
推荐指数
1
解决办法
669
查看次数