menu 学习笔记
search self_improvement
目录

MySQL 常用命令

huty
huty 2022年11月15日  ·  阅读 1,230

服务相关

启动 MySQL 服务

service mysqld start

关闭 MySQL 服务

service mysqld stop

重启 MySQL 服务

service mysqld restart

查看 MySQL 状态

service mysqld status

实例相关

查看实例信息

查看版本

mysql -V
mysql --version
select version();

查看帮助信息

mysql -?
mysql --help
mysql -I

大小写相关

查看大小写配置

show variables like '%lower%';

当输出信息中的 lower_case_table_names1 时表示忽略大小写

修改大小写配置

编辑 MySQL 配置文件,在 [mysqld] 中加入 lower_case_table_names = 1 配置项。

字符集相关

查看字符集配置

show variables like '%char%';

修改字符集配置

  1. 编辑 MySQL 配置文件
  2. [client] 中加入 default-character-set = utf8mb4
  3. [mysqld] 中加入 character-set-server = utf8mb4collation-server = utf8mb4_general_ci

示例如下:

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci

刷新权限

flush privileges;

mysqladmin flush-privileges

mysqladmin reload

配置免密登录

方式一:

  1. 编辑 MySQL 的配置文件
  2. [mysqld] 中加入 skip-grant-tables
  3. 重启 MySQL 服务

方式二:

  1. 停止 mysqld 服务
net stop mysqld
  1. 执行以下命令
mysqld --skip-grant-tables
  1. 使用新 Shell 连接 MySQL

设置 SQL_MODE

SQL_MODE 说明

  • ONLY_FULL_GROUP_BY
    对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
  • NO_AUTO_VALUE_ON_ZERO
    该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。
  • STRICT_TRANS_TABLES
    在该模式下,如果一个值不能插入到一个事务中,则中断当前的操作,对非事务表不做限制
  • NO_ZERO_IN_DATE
    在严格模式下,不允许日期和月份为零
  • NO_ZERO_DATE
    设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告
  • ERROR_FOR_DIVISION_BY_ZERO
    在insert或update过程中,如果数据被零除,则产生错误而非警告。如果未给出该模式,那么数据被零除时Mysql返回NULL
  • NO_AUTO_CREATE_USER
    禁止GRANT创建密码为空的用户
  • NO_ENGINE_SUBSTITUTION
    如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
  • PIPES_AS_CONCAT
    将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样是,也和字符串的拼接函数Concat想类似
  • ANSI_QUOTES
    启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

查询 SQL_MODE

select @@GLOBAL.sql_mode;

select @@SESSION.sql_mode;

设置 SQL_MODE

  • 通过命令设置
set global sql_mode = 'modes...';

set session sql_mode = 'modes...';
  • 通过配置文件设置
    编辑 MySQL 的配置文件,在 [mysqld] 中加入以下内容 sql_mode=
    示例如下:
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

用户相关

查看用户

仅查看用户名

select user from mysql.user;

查看用户名、host

select user,host from mysql.user;

查看用户权限

查看用户全局权限

查询 mysql.user 表数据即可

查看用户数据库权限

查询 mysql.dbmysql.host 表数据即可

查看用户表权限

查询 mysql.tables_priv 表数据即可

查看用户列权限

查询 mysql.columns_priv 表数据即可

修改用户

根据用户名修改 host

update mysql.user set host = '' where user = '';
update mysql.db set host = '' where user = '';

根据 host 修改 host

update mysql.user set host = '' where host = '';
update mysql.db set host = '' where host = '';

修改密码

alter user '用户名'@'host' identified by '密码';

mysqladmin -u 用户名 -h host -p password "密码"

注意:password 是关键字;密码必须用 "" 括起来

数据库相关

查看全部数据库

show databases;

创建数据库

create database 数据库名称;

删除数据库

drop database 数据库名称;

切换数据库

use 数据库名称;

数据相关

导出数据

导出 MySQL 数据到 db 文件

mysqldump -u用户名 -p密码 数据库名称 > 导出文件

示例:

mysqldump -uroot -p123456 mysql > /opt/mysql/backup/mysql.db

导入数据

导入 db 文件数据到 MySQL

mysql -u用户名 -p密码
use 数据库名称;
source 导入文件;

示例:

mysql -uroot -p123456
use mysql;
source /opt/mysql/backup/mysql.db;

触发器

查看触发器

  1. 选择数据库
use 数据库名称;
  1. 查看触发器
show triggers;

删除触发器

drop 触发器名称;

创建触发器

  • 单条语句
create trigger 触发器名称 触发时机 触发事件 on 表名称 for each row 触发语句;
  • 多条语句
delimiter ||
create trigger 触发器名称 触发时机 触发事件 
on 表名称 for each row 
begin 
	触发语句1;
    触发语句2;
    ......
end
||
delimiter ;

说明:

触发时机:
- BEFORE :之前
- AFTER :之后

触发事件:
- INSERT :插入
- DELETE :删除
- UPDATE :更新

示例如下:

create trigger trigger_test_del_1 AFTER DELETE on tablea FOR EACH ROW delete from tableb where id=OLD.id;

参考博客

分类: MySQL
标签: MySQL

评论已关闭