MYSQL 常用技巧指南

185 阅读2分钟

摘要:本文主要介绍了mysql的一些常见使用方式,避免大家浪费时间去寻找,下文集中给出了会遇到的一些情况,后续慢慢新增。

部署相关

临时修改最大连接数

-- 查询最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 设置最大连接数
SET max_connections = 500;

查询出来的数据自定义序列号

比如我想从1001开始序列号,那么起始值就定义为1000

select (@i:=@i+1) AS id,code,name from address,(SELECT @i := 1000) AS imy

更新表的字符集

-- 查询所有表字符集更新语句
SELECT
    CONCAT(
        'ALTER TABLE ',
        TABLE_NAME,
        ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'
    )
FROM
    information_schema.`TABLES`
WHERE
    TABLE_SCHEMA = 'my_table';
-- 更新字符集
ALTER TABLE TABLE_NAME CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

group by不能取出来的数据用自定义顺序取

SELECT id, a, b
FROM (SELECT *,
             @row_num := IF(@prev_group = a, @row_num + 1, 1) AS row_num,
             @prev_group := a
      FROM user, (select @prev_group := null) as null_data
      ORDER BY a, b DESC) AS tt
WHERE row_num = 1;

表名称大小写敏感问题

lower_case_table_names:这个系统变量决定了MySQL如何存储表名。在Linux上,默认值是0,表示表名是大小写敏感的。在Windows上,默认值是1,表示表名不区分大小写。

show VARIABLES like "%lower_case_table_names%"
-- 
-- lower_case_table_names	0

表数据大小写铭感问题

collation:字符集排序规则也会影响大小写敏感性。例如,utf8_general_ci是不区分大小写的,而utf8_general_cs是区分大小写的,或者使用 utf8mb4_bin

  • 创建数据库时指定字符集:在创建数据库时,你可以指定一个大小写敏感的字符集和排序规则。
  • mysql5.7使用utf8mb4_bin来配置大小写敏感。

liquibase中使用存储过程

--changeset nisec:001 endDelimiter://
--comment 测试
drop procedure if exists test_procedure;//
CREATE PROCEDURE test_procedure()
BEGIN
    SET @max_id = (SELECT MAX(id) FROM xx_table);
    SET @new_auto_increment = IFNULL(@max_id, 0) + 1;
    set @sql = concat('ALTER TABLE xx_table AUTO_INCREMENT = ',@new_auto_increment);
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END;//
call test_procedure();//
drop procedure if exists test_procedure;//