MySQL命令

一、MySQL命令:

针对mysql5.7版本

1. 常用命令:

1.1 权限管理相关操作:

SELECT Host,User,Password FROM mysql.user; 
# 更改用户名密码:
update mysql.user set authentication_string=password("新密码") where User="test" and Host="localhost";
#刷新权限命令:
flush privileges;

#注意plugin字段,如果发现手动设置了密码后,依然可以无密码进入,需要执行如下命令,设置plugin字段为mysql_native_password"
update mysql.user set plugin="mysql_native_password" where User="root" and Host="localhost";


#mysql  数据源配置加密密码实现:调用ConfigTools.encrypt方法获取加密后的密码


#新增一行记录 限制ip 用户 访问密码
INSERT INTO mysql.user(Host,User,Password) VALUES("10.10.0.1","root",PASSWORD("root"));

#刷新权限命令:
flush privileges;

#赋权限命令:   
GRANT ALL ON *.* TO root@'10.10.0.1' IDENTIFIED BY 'root';

#查看权限:     
show Grants for 'root'@'10.10.0.1';

1.2 权限分配:

GRANT语法:     
   GRANT 权限 ON 数据库.* TO 用户名@'登录主机' IDENTIFIED BY '密码'  
权限:  
   ALL,ALTER,CREATE,DROP,SELECT,UPDATE,DELETE  
   新增用户:权限为USAGE,即为:"无权限",想要创建一个没有权限的用户时,可以指定USAGE  
数据库:  
     *.*              表示所有库的所有表  
     mylove.*         表示mylove库的所有表  
     mylove.loves     表示mylove库的loves表   
用户名:  
     MySQL的账户名  
登陆主机:  
     允许登陆到MySQL Server的客户端ip  
     '%'表示所有ip  
     'localhost' 表示本机  
     '10.155.123.55' 特定IP  
密码:  
      MySQL的账户名对应的登陆密码  

1.3数据导入导出:

导出数据库:  mysqldump -u 用户名 -p  数据库名 > 数据库名.sql

导入数据库:

    1、首先建空数据库
    mysql>create database abc;
    
    2、导入数据库
    方法一:
    (1)选择数据库
    mysql>use abc;
    (2)设置数据库编码
    mysql>set names utf8;
    (3)导入数据(注意sql文件的路径)
    mysql>source /home/abc/abc.sql;
    方法二:
    mysql -u用户名 -p密码 数据库名 < 数据库名.sql
    #mysql -uabc_f -p abc < abc.sql

指定表数据导出:
    
    mysqldump -u user -p dbname tablename > db.sql

1.4 表结构修改:

mysql 已有表新增字段操作

#如果想在一个已经建好的表中添加一列,可以用诸如:
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20);

#这条语句会向已有的表中加入新的一列,这一列在表的最后一列位置。如果我们希望添加在指定的一列,可以用:
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null after COLUMN_NAME;

#注意,上面这个命令的意思是说添加新列到某一列后面。如果想添加到第一列的话,可以用:
alter table TABLE_NAME add column NEW_COLUMN_NAME varchar(20) not null first;

查看表字段信息:

show  full columns from table_name1;

1.5 编码:

查看编码: show variables like 'char%';

windows修改编码为utf8: my-default.ini文件    复制一份ini文件命名为my.ini

添加如下内容:
    [client]
    default-character-set=utf8
    [mysqld]下增加:
    character-set-server=utf8
    
重启mysql:

5. 调优:

5.1 使用profiling性能分析工具:

# 首先查看profiling 是否是on状态; //show variables;
show variables like 'profiling';
# 如果是OFF状态,设置值为1
set profiling=1;
# 执行你的sql语句,然后通过下面的命令查看sql执行耗时
show profiles;

5.2 开启慢查询:

  • 临时设置,重启失效:

    # 将slow_query_log 全局变量设置为“ON”状态
    set global slow_query_log='ON';
    # 关闭
    set global slow_query_log='OFF';
    #置慢查询日志存放的位置(默认在 mysql data 目录下)
    set global slow_query_log_file='slow.log';
    
    # 超时1秒的sql语句
    set global long_query_time=1;
    
    
    #查看变量值
    show variables like '%query_log';
    #注意: 无需重启即可生效,但重启会失效。set global 改的参数是暂时的,想重启不变请配合修改mysql配置文件
  • 修改配置文件:

    # 修改配置文件my.cnf(Windows 下是my.ini),在[mysqld]下的下方加入
    
    slow_query_log = ON
    slow_query_log_file = slow.log
    long_query_time = 1

    慢查询日志文件记录在my.cnf中配置的data目录下。

5.3 Explain 分析sql语句:

explain 字段解析:

1. id //select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序
2. select_type //查询类型
3. table //正在访问哪个表
4. partitions //匹配的分区
5. type //访问的类型
6. possible_keys //显示可能应用在这张表中的索引,一个或多个,但不一定实际使用到
7. key //实际使用到的索引,如果为NULL,则没有使用索引
8. key_len //表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度
9. ref //显示索引的哪一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查找索引列上的值
10. rows //根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数
11. filtered //查询的表行占表的百分比
12. Extra //包含不适合在其它列中显示但十分重要的额外信息

5.4 添加查看删除索引:

#----------------添加删除索引-------------------

ALTER TABLE `user_class` ADD INDEX user_id_index (`user_id`) 

CREATE INDEX index_name ON table_name (column_list)

drop index index_name on user_class

#-------------查看索引----------
show index from user_class

6. 问题集:

  • 使用group by 遇到: sql_mode=only_full_group_by 错误提示:

    # 查看sql_mode值
    SELECT @@sql_mode;
    # 查询结果:
    ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    
    # 去掉ONLY_FULL_GROUP_BY 重新赋值
    #(1)修改全局值,只对修改后新建的数据库生效
    set @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
    #(2) 修改当前数据库:
    set sql_model = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信