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以避免重复记录。我对吗?
考虑一个表
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任务?
我想计算两列,但需要在一行中获取第一列的结果。
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具有预定义的值。
我通过计算另一个表中的 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。
我需要按两列的差异对表格进行排序
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