几千万数据,更改 MySQL 表结构

数据量大、并发量高场景,如何在流量低峰期,平滑实施表结构变更?

  • 如果是减column,升级程序不使用即可
  • 如果是修改column,程序兼容性容易出问题
Read more   2020/05/11 posted in  编程

sqlyog 如何导出建表语句

真傻了,这个问题弄了半天。

解决

点击表名后,在右侧的信息栏里面有啊:

2019/08/25 posted in  折腾

MySQL double 类型查询不准确的问题

问题

有如下查询:

SELECT * FROM <table-name> WHERE price > 32.99;

结果竟然包含了 32.99 的数据行。

原因

price 的类型是 double,会存在精度丢失问题,作为条件查询或者 sum 等聚合函数时结果会不准确

解决

将 double 类型转化为 decimal 查询:

SELECT * FROM <table-name> WHERE CAST(price AS DECIMAL(7, 2)) > 32.99;

参考

2019/03/13 posted in  折腾

MySQL 批量更新、插入语句

更新单个记录

UPDATE `table_name` SET `field1` = 'value1' WHERE `field2` = 'value2'

更新多个记录的同一个字段为同一个值

UPDATE `table_name` SET `field1` = 'value1' WHERE `field2` IN ('value2', 'value3')

更新多个记录的同一个字段为不同的值

mysql 并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现:

UPDATE `table_name` SET
    `field1` = CASE `id`
        WHEN 1 THEN 'value1'
        WHEN 2 THEN 'value2'
    END
WHERE `id` IN (1,2,3);

更新多个记录的多一个字段为不同的值

如果更新多个字段的话,在上面的基础上修改一下就可以了:

UPDATE `table_name` SET
    `field1` = CASE `id`
        WHEN 1 THEN 'value1'
        WHEN 2 THEN 'value2'
    END,
    `field2` = CASE `id`
        WHEN 1 THEN 'value3'
        WHEN 2 THEN 'value4'
    END,
WHERE `id` IN (1,2,3);

参考:

2019/02/21 posted in  折腾