MySQL是工作中最为常用的关系型数据库管理软件。
用于自学请自行下载安装 MySQL免费社区版。
本文档仅简要介绍日常工作中的常见用法,仅供参考。想要详细了解其用法,推荐阅读列表:
若感觉英文教程难以阅读,推荐阅读菜鸟教程提供的免费中文版 MySQL 教程。
若觉得命令行使用起来不够方便,推荐使用 Navicat Premium,支持多种数据库,不过该软件是收费的。也可使用官方提供的免费的 MySQL Workbench。
命令 | 功能 |
---|---|
help | 查看命令行帮助 |
quit/exit | 断开数据库连接 |
create database | 创建数据库 |
show databases | 查看数据库列表 |
use | 选择数据库 |
drop database | 删除数据库 |
create role | 创建角色 |
drop role | 删除角色 |
create user | 创建用户 |
drop user | 删除用户 |
grant | 为用户或角色授权 |
revoke | 收回用户或角色授权 |
show grants | 查看用户和角色授权 |
create table | 创建表格 |
show tables | 查看表格列表 |
describe | 查看表格定义 |
alter table | 更新表格定义 |
drop table | 删除表格 |
rename table | 重命名 |
show create table | 查看创建表格的SQL语句 |
insert | 向表格中插入数据 |
update | 更新表格中的数据 |
delete | 删除表格中的数据 |
truncate table | 清空表格中的数据 |
select | 查询表格数据 |
begin | 开始事务 |
rollback | 回滚事务 |
commit | 提交事务 |
在本机安装好数据库服务器或者数据库客户端后,可以使用mysql
命令来连接数据库,常用选项有:
-h
指定数据库服务器IP地址,默认为本机地址localhost
-P
指定数据库服务器端口号,默认为3306
-u
指定登录用户名-p
指定登录密码可通过mysql --help
命令了解其他用法
例1,连接本地数据库:
> mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.1.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
例2,连接远端数据库:
> mysql -h 192.168.1.2 -P 3306 -u root -p
Enter password: ***
Welcome to the MySQL monitor. Commands end with ; or \g.
... ...
mysql>
连接数据库成功后会显示数据库版本信息和一些提示信息,提示连接成功之后就可以在mysql>
提示符后执行相关命令了。
例1,使用help
(缩写为?
或\?
)命令来查看帮助:
mysql> help
For information about MySQL products and services, visit:
http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
https://shop.mysql.com/
List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
? (\?) Synonym for `help'.
... ...
For server side help, type 'help contents'
例2,使用help contents
命令来查看服务器端帮助:
mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help - '
, where <item> is one of the following
categories:
Account Management
... ...
例3,查看指定功能类型命令:
mysql> help Data Definition
You asked for help about help category: "Data Definition"
For more information, type 'help - '
, where <item> is one of the following
topics:
ALTER DATABASE
... ...
例4,查看具体命令的帮助:
mysql> help CREATE DATABASE
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
[create_option] ...
... ...
URL: https://dev.mysql.com/doc/refman/8.1/en/create-database.html
可以通过帮助信息中的URL查看官方在线帮助文档
使用quit
或exit
或\q
命令来端口数据库连接:
mysql> quit
Bye
输入help create database
查看命令帮助。
创建数据库:
create database if not exists mydatabase
character set utf8mb4
collate utf8mb4_general_ci;
其中,mydatabase
为数据库名,if not exists
表示数据库不存在时才创建,character set
指定默认字符集,collate
指定默认排序规则。
输入help show
查看命令帮助。
查看数据库列表:
show databases;
输入help use
查看命令帮助。
选择指定数据库:
use mydatabase;
输入help select
查看命令帮助。
查看当前数据库:
select database();
输入help drop database
查看命令帮助。
删除数据库:
drop database if exists mydatabase;
角色和用户用于权限管理,可以为用户直接授权,也可以为角色授权后再为用户授权对应的角色。
输入help create role
查看命令帮助。
创建角色:
create role if not exists developer, tester;
输入help grant
查看命令帮助。
为角色授权:
grant all on mysql.* to developer;
flush privileges;
输入help revoke
查看命令帮助。
收回角色权限:
revoke all on mysql.* from developer;
flush privileges;
输入help drop role
查看命令帮助。
删除角色:
drop role if exists developer;
flush privileges;
输入help create user
查看命令帮助。
创建名为jack
的用户,允许从任意地址登录,将密码设置为123456
:
create user if not exists jack@'%' identified by '123456';
输入help grant
查看命令帮助。
例1,通过为用户分配角色来授权(with admin option 表示用户可将权限分配给其他人):
grant developer to jack with admin option;
flush privileges;
例2,直接为用户授权:
grant all on mysql.* to jack;
flush privileges;
SELECT User, Host FROM mysql.user;
其中Host
列表示对应用户允许登录的地址,%
表示允许从任意地址登录,localhost
表示只允许从本机登录。
输入help show grants
查看命令帮助。
例1,查看当前用户授权信息:
show grants;
例2,查看指定角色或用户授权信息:
show grants for developer;
show grants for jack;
输入help revoke
查看命令帮助。
例1,收回用户角色权限:
revoke if exists developer from jack;
flush privileges;
例2,收回用户指定权限:
revoke if exists all on mysql.* from jack;
flush privileges;
输入help drop user
查看命令帮助。
删除指定用户:
drop user if exists jack;
flush privileges;
由于本章节命令未在表格名前添加数据库名的前缀,因此执行示例命令之前需要使用use
命令选择数据库
输入help create table
查看命令帮助。
访问MySQL 8.2 数据类型了解表格列支持的数据类型。
创建表格常用选项:
auto_increment
声明自增字段(整型)comment
为列或者表添加备注not null
声明列为非空default
为列指定默认值unique key
声明唯一索引key
声明普通索引using
指定索引类型engine
指定存储引擎charset
指定字符集collate
指定排序方式例1,创建雇员表:
create table if not exists `employee` (
`id` bigint unsigned auto_increment primary key comment '雇员ID',
`name` varchar(40) not null comment '姓名',
`sex` char(4) not null comment '性别',
`birthday` date not null comment '生日',
`telephone` char(12) not null comment '手机号码',
`is_chinese` bool default true comment '是否为中国人',
unique key i_telephone(telephone) using btree,
key i_birthday(birthday) using btree
) engine=innodb default charset=utf8mb4 collate=utf8mb4_general_ci comment '雇员基本信息';
show tables;
例1,通过describe
命令查看表格结构:
describe employee;
例2,通过show
命令查看表格结构:
show columns from employee;
例3,通过show
命令查看表格索引:
show index from employee;
创建表格之后,可能需要根据业务需求更新表格结构。
输入help alter table
查看命令帮助。
例1,添加列:
alter table employee add column `addr` varchar(100) not null comment '家庭住址';
例2,修改列:
alter table employee modify column `addr` varchar(200) not null comment '家庭住址';
alter table employee alter column `addr` set default 'China';
alter table employee change column `addr` `address` varchar(100) not null default 'China' comment '家庭住址' after `telephone`;
例3,删除列:
alter table employee drop column `address`;
例4,添加索引:
alter table employee add key i_name(`name`) using btree;
例4,删除索引:
alter table employee drop key i_name;
输入help drop table
查看命令帮助。
drop table if exists employee;
输入help rename table
查看命令帮助。
例1,使用rename table
命令重命名表格:
rename table employee to worker;
例2,使用alter table
命令重命名表格:
alter table employee rename worker;
输入help create table
查看命令帮助。使用like
关键字指定使用已有表格作为模板创建新表。
create table worker like employee;
输入help create table
查看命令帮助。创建新表时可使用*
指定所有列,也可以指定部分列,或者添加筛选条件只选取部分数据。
create table worker select * from employee;
创建的新表与已有表格结构不完全一致,丢失了列auto_increment
属性和索引信息。
输入help show create table
查看命令帮助。
show create table employee;
输入help insert
查看命令帮助。
例1,在命令行中输入待插入的数据:
insert into employee (`name`, `sex`, `birthday`, `telephone`, `is_chinese`)
values
('XiaoMing', '男', '1970-01-01', '13666666666', true),
('Lucky', '女', '1980-01-01', '13777777777', false);
例2,插入其他表格中的数据:
insert into worker select * from employee;
输入help update
查看命令帮助。
update employee set `name` = 'LiXiaoming', `birthday` = '1970-02-02' where `name` = 'XiaoMing';
输入help delete
查看命令帮助。
例1,删除指定数据:
delete from employee where `name` = 'LiXiaoming';
例2,删除所有数据(记录较多时使用truncate table
命令更高效):
delete from employee;
输入help truncate table
查看命令帮助。truncate table
可简写为truncate
。
truncate employee;
输入help select
查看命令帮助。
select
命令功能强大用法很多,此处仅介绍其常见用法。
若需多表联查,输入help join
查看命令帮助。
select
命令常用子句:
where
指定筛选条件distinct
用于去除重复结果group by
用于查询分组后的结果order by
用于对查询结果进行排序limit
限制查询结果记录数量offset
指定查询记录开始位置例1,按姓名查询员工信息
select * from employee where `name` = 'Jack';
例2,去除重复的员工姓名:
select distinct `name` from employee;
例3,按性别查询员工数量:
select sex, count(*) as cnt from employee group by sex;
例4,查询最年轻的员工:
select * from employee order by birthday desc limit 1 offset 0;
推荐阅读MySQL事务和锁定语句了解事务。
输入help transaction
查看事务相关命令列表。
输入help begin
查看命令帮助。
begin
输入help rollback
查看命令帮助。
rollback
输入help commit
查看命令帮助。
commit
MySQL还有很多其他本文档未涉及到的功能,包括:
请自行阅读MySQL 用户手册深入学习。