MySQL

Mr.Jia 2023-5-3 305 5/3

使用sql设置时区

show variables like '%time_zone%';

set global time_zone = '+8:00';

set time_zone = '+8:00';

flush privileges;
select curtime();

设置不区分大小写

show VARIABLES like '%lower_case_table_names%'; -- 查询当前数据库是否区分大小写 1是不区分大小写0是区分大小写

set GLOBAL lower_case_table_names=1; -- 设置大小写状态 

也直接修改my.cnf配置文件中的lower_case_table_names

docker 中修改

1、挂载容器的文件到宿主机(不挂载的话直接去/etc/mysql/conf.d/mysql.cnf 修改但是需要安装vi工具)

volumes:
- /usr/local/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf

然后mysql.cnf内容

[mysqld]
lower_case_table_names=1

 

2、在docker-compose启动是添加设置

command: --lower_case_table_names=1

version: '3'
services:
  mysql:
    container_name: mysql
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: possword
    command: --lower_case_table_names=1
    ports:
      - 3306:3306
    volumes:
      - /home/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf             #前面是宿主机地址:后面是容器地址

 

设置MySQL的远程访问

select user,host from user;  -- 查询user的用户和可以访问的主机
update user set host='%' where user='root';  -- 把root用户设置为所有主机都可以访问,若不想设置root用户也可以自己创建一个用户,但是要注意权限
flush privileges; -- 刷新 MySQL 的权限表,使更改后的权限立即生效

检测端口是否被占用

netstat -ano|findstr 8080  检测端口是否被占用

taskkill /pid 2520 /F 强制关闭pid为2520的线程

EXPLAIN关键字

  1. id: 执行计划中每个操作的唯一标识符。如果查询涉及多个表,每个操作都有一个唯一的id
  2. select_type: 操作的类型,表示查询的种类,常见的值包括:
    • SIMPLE: 简单查询,不包含子查询或UNION操作。
    • PRIMARY: 复杂查询的最外层查询。
    • SUBQUERY: 子查询。
    • DERIVED: 从其他表派生的子查询。
    • UNION: UNION操作的第二个或后续查询。
  3. table: 表名,表示查询操作所涉及的表。
  4. type: 访问类型,表示如何访问表。常见的值包括:
    • ALL: 全表扫描,需要遍历整个表。
    • index: 索引全扫描,遍历整个索引树。
    • range: 范围扫描,根据范围条件检索索引。
    • ref: 使用非唯一索引或唯一索引前缀进行查找。
    • eq_ref: 使用唯一索引查找。
    • const: 表只有一行,通过索引快速取得结果。
    • system: 表只有一行(系统表)。
  5. possible_keys: 可能使用的索引。
  6. key: 实际使用的索引。
  7. key_len: 使用索引的长度,表示索引使用的字节数。
  8. ref: 列与索引之间的关系。
  9. rows: 估计需要扫描的行数。
  10. Extra: 额外的信息,常见的值包括:
    • Using index: 使用了覆盖索引,查询结果可以直接从索引中获取,无需回表操作。
    • Using where: 在存储引擎层面应用了WHERE过滤条件。
    • Using temporary: 查询需要使用临时表来处理中间结果。
    • Using filesort: 查询需要进行文件排序操作。
    • Using join buffer: 使用了连接缓冲区。

 

CREATE DATABASE test CHARACTER SET utf8 COLLATE utf8_general_ci; 创建数据库

DROP DATABASE test;删除数据库

CREATE USER 'your_username'@'localhost' IDENTIFIED BY 'your_password'; 创建用户

GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'localhost'; 赋予所有权限

FLUSH PRIVILEGES; 刷新

 

函数:

DATE_SUB(CURDATE(), INTERVAL 7 DAY) 时间减去7天

DATEDIFF(CURDATE(), lately_login_time) 查询时间天数

TRUNCATE(price,0)截断数字

ANY_VALUE()

用途

ANY_VALUE()函数通常用于在包含GROUP BY子句的查询中,它告诉数据库从该列中任意选择一个值(通常是从分组中的第一行获取),从而避免错误。

特点

ANY_VALUE()函数本身的开销很小,因为它只需要从分组中取一个值(通常是第一个遇到的值),它返回的值是不确定的。它不会增加额外的排序或聚合计算负担

GROUP_CONCAT()

用途

GROUP_CONCAT()函数用于将分组内的多个行的某个列的值连接成一个字符串。可以指定分隔符(默认为逗号),也可以对连接的值进行排序,去重

特点

GROUP_CONCAT()函数需要收集分组内所有行的相关值,然后进行连接。如果分组很大,或者需要连接的值很长,那么它会消耗较多的内存和CPU。特别是当使用了DISTINCT或ORDER BY子句时,还需要在分组内进行去重和排序,这可能会进一步增加性能开销

长度限制

GROUP_CONCAT()的结果长度受`group_concat_max_len`系统变量限制(默认1024字节),如果结果被截断,可能需要调整该参数,但要注意可能的内存消耗。

 

 

- THE END -

Mr.Jia

7月31日09:45

最后修改:2025年7月31日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论