zoukankan      html  css  js  c++  java
  • Mysql的进阶小记

    作者:邓聪聪

    授权账号:
    grant all on Syslog.* to loguser@'10.0.0.%' identified by '123456';

    mysql的相关添加项,增加安全性
    /etc/my.cnf #服务端的操作
    1;innodb_file_per_table #每张表的数据由单独文件保存 --show variables like '%per_table%' #查询开关状态
    2;character-set-server=utf8mb4 #设置服务实例的字符集统一 --status
    3;slow_query_log #慢查询日志开关
    4;long_query_time=3 #设置慢查询的定义时间
    5;log_queries_not_using_indexes #启用未使用索引的的慢语句记录

    /etc/my.cnf.d/mysql-clients.cnf #mysql客户端的操作
    1;default-character-set=utf8mb4 #设置字符集统一
    2;safe-updates #设置删除、更新都为安全模式,防止误操作的严重后果 --mysql -U #安全模式

    通用日志记录:--一般用于分析或者优化时去使用
    1;show variables like 'general_log'; --文件的形式存在 #查询开关 --set GLOBAL general_log=on; #设置开启
    2;show variables like 'log_output'; #默认是文件形式存在,修改存储进表 --set global log_output='table'; #设置存入mysql数据库的表中

    慢查询开关;
    1;show variables like 'slow_query_log';
    2;select @@long_query_time; #查询默认的慢查询时间,默认是10s
    3;set profiling=ON; #慢查询分析工具 --show profiles; #查编号 --show profile for query 2; #分析某个语句的慢动作原因

    二进制日志的存储
    1;show variables like 'binlog_format'; #分为3中模式,1基于语句--不推荐,2基于行记录,3有系统判定自动选择方式


    查看是否启用索引
    1;select @@log_queries_not_using_indexes;
    2;show indexes from t1; #查看表内的索引信息

    创建索引,优化语句的查询速度
    1;create index idx_age on t1(age);

    建表结构:
    1;create table t1 (id int, name varchar(10), address varchar(20));
    2;insert t1 values (3,'张三','天津');


    语句去重
    select distinct 字段 from 表;

    查询某表的重复字段

    select date,COUNT(*) as count FROM TABLE where date>='2020-11-1' and date <'2020-11-21' and port_id=104 GROUP BY date HAVING COUNT >1

    select * from core_trafficlog where port_id=183 and date >='2020/4/1' and date <'2020-4-2' and date in (select date from core_trafficlog where port_id=183 and date >='2020/4/1' and date <'2020-4-2' group by date having Count(*)>1)

    select date,count(*) as count from core_trafficlog where date >='2020/11/21' and date <'2020-11-22' and port_id=179 group by date having COUNT(date) >1

    查询语句 #DQL
    例:
    MariaDB [students]> select * from t1;
    +----+---------+--------+------+-----------+
    | id | name | gender | age | address |
    +----+---------+--------+------+-----------+
    | 3 | 张s三 | 男 | 18 | 北京 |
    | 4 | 李四 | 男 | 20 | 天津 |
    | 5 | 陆琴 | 女 | 22 | 河北 |
    | 6 | 刘六 | 男 | 21 | 黑龙江 |
    +----+---------+--------+------+-----------+
    1;select gender as '性别',avg(age) as '平均年龄' from t1 group by gender; #查询以男、女为分别的平均年龄并分组,其中as为别名
    2;select classid,gender,count(*) from t1 group by classid,gender; #查询以班级为分组的男生和女生的总数
    3;select * from t1 order by age asc/desc; #排序 --默认从小打到,desc #从大到小
    4;select classid,gender,avg(age) from t1 group by classid,gender having avg(age) > 21; #以班级分组,显示平均年龄,且平均年龄大于avg(age)的
    5;select * from t1 where age between 21 and 25; #介于两者之间
    同 select * from t1 where age >21 and age< 25; #介于两者之间
    不同 select * from t1 where age in (21,25); #只显示匹配的信息

    联表查询:
    例:
    MariaDB [students]> select * from t2;
    +----+--------+-----+---------+
    | id | name | age | address |
    +----+--------+-----+---------+
    | 1 | 手打 | 29 | 河北 |
    | 2 | 特 | 33 | 法国 |
    | 3 | 华通 | 33 | 天津 |
    | 4 | 打算 | 32 | 武汉 |
    +----+--------+-----+---------+
    一,纵向合并查询,条件是记录一样,如(字段数相同)或字段一样 union #*具有去重的效果
    1;select id,name,age,address from t1 union select * from t2;两张表纵向合并显示,字段需要对应上,否则无法合并
    二,横向合并,两张表的字段横向展开,内容对内容进行横向排列cross join,交叉连接
    1;select * from t1 cross join t2;
    挑出条件的显示
    //1;select * from t1,t2 where techerid=t2.id; #把两表的交集作为条件查询 --老式查询//
    2;select * from t1 inner join t2 on techerid=t2.id; #把两表的交集作为条件查询

     查询指定数据库的大小及数据条目

    select  table_schema as '数据库', sum(table_rows) as '记录数', sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)', sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)' from information_schema.tables where table_schema='traffic2';

     查看mysql库各表容量大小

    select table_schema as '数据库',table_name as '表名',table_rows as '记录数',truncate(data_length/1024/1024, 2) as '数据容量(MB)',truncate(index_length/1024/1024, 2) as '索引容量(MB)'from information_schema.tableswhere table_schema='traffic2'order by data_length desc, index_length desc;

    删除指定时间(字段)的数据

     delete from core_trafficlog where date < '2020-9-1';

    备份数据库中表的前100条

    mysqldump -uroot -pxxx database --where="true limit 100"> backup100.sql

    数据库备份携带条件

    mysqldump -uroot -padmin traffic core_trafficlog -w "port_id=241 and date >='2020/12/1' and date <'2020/12/2'" >test.sql

    只导出数据库表结构,不导出数据

    mysqldump  -uroot -p123456 --no-data -d traffic >test.sql

  • 相关阅读:
    100万并发连接服务器笔记之1M并发连接目标达成
    100万并发连接服务器笔记之测试端就绪
    配置JBoss环境变量
    100万并发连接服务器笔记之Java Netty处理1M连接会怎么样
    JBoss启动项目报错
    eclipse在线安装JBoss Tool过程
    安装JBoss Tool 出错
    eclipse怎么恢复原状
    Java使用foreach遍历集合元素
    Java之Iterator
  • 原文地址:https://www.cnblogs.com/dengcongcong/p/10803809.html
Copyright © 2011-2022 走看看