小编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)

注意:typeENUM具有预定义的值。

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),但问题是,我需要difNULL,如果任一列是NULL

mysql null query order-by select

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