Skip to content

mysql 基础必知必会

前言

如果你想开发后端的 api 接口,那么 mysql 是肯定要学习的。因为在 web 应用方面 mysql 是最常用的数据库,而且 mysql 的学习曲线也是比较平缓的,相对于其他数据库来说,mysql 的学习成本是比较低的。所以,mysql 是后端开发必须要学习的。这里会介绍 mysql 的基础知识,以及 mysql 的常用命令。让大家快速掌握 mysql 基础知识。

mysql 基础知识

什么是数据库

数据库是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。

关系型数据库的一些专业术语

TIP

  • 数据库:数据库是一些关联表的集合。.
    • 数据表:表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
    • 列:一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
    • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
    • 冗余:存储两倍数据,冗余可以使系统速度更快。
    • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
    • 外键:外键用于关联两个表。
    • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
    • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
    • 参照完整性:参照的完整性要求关系中不允许引用不存在的实体。例如,订单表中的订单编号必须在订单表中存在,才能将订单表与订单详表进行关联。
    • 表头:表头是数据表的第一行,每一列的名称。
    • 行:包含了实际的数据值,每一行用来描述一条数据记录。
    • 列:列是具有相同数据类型的数据的集合。
    • 值:行的具体信息, 每个值必须与该列的数据类型相同;。
    • 键:键的值在当前列中具有唯一性。

什么是 mysql

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

mysql 的的常用命令

登录 mysql

bash
mysql -u root -p

查看 mysql 版本

bash
mysql> select version();

查看当前数据库

bash
mysql> select database();

查看当前用户

bash
mysql> select user();

查看当前时间

bash
mysql> select now();

查看当前 mysql 的状态

bash
mysql> status;

查看当前 mysql 的字符集

bash
mysql> show variables like 'character%';

查看当前 mysql 的存储引擎

bash
mysql> show engines;

查看当前 mysql 的所有数据库

bash
mysql> show databases;

查看当前 mysql 的所有表

bash
mysql> show tables;

查看当前 mysql 的所有表的结构

bash
mysql> show create table 表名;

查看当前 mysql 的所有表的详细信息

bash
mysql> show full tables;

创建一个数据库

bash
mysql> create database 数据库名;

删除一个数据库

bash
mysql> drop database 数据库名;

使用一个数据库

bash
mysql> use 数据库名;

创建一个表

bash
mysql> create table 表名(字段名1 字段类型1,字段名2 字段类型2,字段名3 字段类型3);

删除一个表

bash
mysql> drop table 表名;

插入数据

bash
mysql> insert into 表名(字段名1,字段名2,字段名3) values(值1,值2,值3);

查询数据

bash
mysql> select 字段1,字段2 from 表名;

通过 as 给字段起别名

bash
mysql> select 字段1 as 别名1,字段2 as 别名2 from 表名;

按条件查询数据

bash
mysql> select 字段1,字段2 from 表名 where 条件;

使用 and 或者 or 查询数据

bash
mysql> select 字段1,字段2 from 表名 where 条件1 and 条件2;

mysql> select 字段1,字段2 from 表名 where 条件1 or 条件2;

修改更新数据

bash
mysql> update 表名 set 字段1=值1,字段2=值2 where 条件;

删除数据

bash
mysql> delete from 表名 where 条件;

like 模糊查询

bash
mysql> select 字段1,字段2 from 表名 where 字段1 like '%值%';

in 查询

bash
mysql> select 字段1,字段2 from 表名 where 字段1 in (值1,值2,值3);

not in 查询

bash
mysql> select 字段1,字段2 from 表名 where 字段1 not in (值1,值2,值3);

between 查询

bash
mysql> select 字段1,字段2 from 表名 where 字段1 between 值1 and 值2;

not between 查询

bash
mysql> select 字段1,字段2 from 表名 where 字段1 not between 值1 and 值2;

分页查询

bash
mysql> select 字段1,字段2 from 表名 limit 0,10;

UNION 查询

bash
mysql> select 字段1,字段2 from 表名1 UNION select 字段1,字段2 from 表名2;

排序查询

bash
mysql> select 字段1,字段2 from 表名 order by 字段1 desc;

分组查询

bash
mysql> select 字段1,字段2 from 表名 group by 字段1;

having 查询

bash
mysql> select 字段1,字段2 from 表名 group by 字段1 having 条件;

去重查询

bash
mysql> select distinct 字段1,字段2 from 表名;

聚合函数查询

bash
mysql> select count(字段1) from 表名;

mysql> select sum(字段1) from 表名;

mysql> select avg(字段1) from 表名;

mysql> select max(字段1) from 表名;

mysql> select min(字段1) from 表名;

字符串函数查询

bash
mysql> select concat(字段1,字段2) from 表名;

mysql> select length(字段1) from 表名;

mysql> select upper(字段1) from 表名;

mysql> select lower(字段1) from 表名;

mysql> select trim(字段1) from 表名;

mysql> select ltrim(字段1) from 表名;

mysql> select rtrim(字段1) from 表名;

mysql> select substring(字段1,1,2) from 表名;

mysql> select replace(字段1,'a','b') from 表名;

数值函数查询

bash
mysql> select round(字段1,2) from 表名;

mysql> select floor(字段1) from 表名;

mysql> select ceil(字段1) from 表名;

mysql> select rand() from 表名;

日期函数查询

bash
mysql> select now() from 表名;

mysql> select curdate() from 表名;

mysql> select curtime() from 表名;

mysql> select year(字段1) from 表名;

mysql> select month(字段1) from 表名;

mysql> select day(字段1) from 表名;

mysql> select hour(字段1) from 表名;

mysql> select minute(字段1) from 表名;

mysql> select second(字段1) from 表名;

mysql> select date_format(字段1,'%Y-%m-%d') from 表名;

流程控制函数查询

bash
mysql> select if(字段1>0,'正数','负数') from 表名;

mysql> select case 字段1 when 1 then '正数' when 0 then '负数' else '其他' end from 表名;

系统函数查询

bash
mysql> select database() from 表名;

mysql> select version() from 表名;

mysql> select user() from 表名;

其他函数查询 NULLIF、COALESCE、GREATEST、LEAST

bash
mysql> select NULLIF(字段1,字段2) from 表名;

mysql> select COALESCE(字段1,字段2) from 表名;

mysql> select GREATEST(字段1,字段2) from 表名;

mysql> select LEAST(字段1,字段2) from 表名;

类型转换函数查询 CAST、CONVERT、DATE_FORMAT、STR_TO_DATE

bash
mysql> select cast(字段1 as char) from 表名;

mysql> select convert(字段1,char) from 表名;

mysql> select date_format(字段1,'%Y-%m-%d') from 表名;

mysql> select str_to_date(字段1,'%Y-%m-%d') from 表名;

连接查询

bash

// 内连接查询
mysql> select 字段1,字段2 from 表名1 inner join 表名2 on 表名1.字段1=表名2.字段1;

// 左连接查询

bash
mysql> select 字段1,字段2 from 表名1 left join 表名2 on 表名1.字段1=表名2.字段1;

// 右连查询

bash
mysql> select 字段1,字段2 from 表名1 right join 表名2 on 表名1.字段1=表名2.字段1;

子查询

bash

// 子查询

mysql> select 字段1,字段2 from 表名 where 字段1 in (select 字段1 from 表名 where 条件);

// 子查询

mysql> select 字段1,字段2 from 表名 where 字段1 in (值1,值2,值3);

null 查询

// 值是 NULL

bash
mysql> select 字段1,字段2 from 表名 where 字段1 is null;

// 值不是 NULL

bash
mysql> select 字段1,字段2 from 表名 where 字段1 is not null;

// <=> 比较操作符

bash
mysql> select 字段1,字段2 from 表名 where 字段1 <=> null;

正则表达式查询

bash
mysql> select 字段1,字段2 from 表名 where 字段1 regexp '正则表达式';

事务

bash
mysql> start transaction; // 开启事务
mysql> commit; // 提交事务
mysql> rollback; // 回滚事务

alter 的使用场景

修改表名
bash
mysql> alter table 表名 rename to 新表名;
修改表的字符集
bash
mysql> alter table 表名 character set 字符集;
修改表的存储引擎
bash
mysql> alter table 表名 engine=存储引擎;
修改表的注释
bash
mysql> alter table 表名 comment='注释';
修改表的自增长的起始值
bash
mysql> alter table 表名 auto_increment=值;
修改表的列名
bash
mysql> alter table 表名 change 列名 新列名 字段类型;
修改表的列的数据类型
bash
mysql> alter table 表名 modify 列名 字段类型;
修改表的列的注释
bash
mysql> alter table 表名 change 列名 列名 字段类型 comment '注释';
修改表的列的位置
bash
mysql> alter table 表名 modify 列名 字段类型 first; // 放在第一列

mysql> alter table 表名 modify 列名 字段类型 after 列名; // 放在某一列后面
修改表的列的默认值
bash

// 修改表的列的默认值为null

mysql> alter table 表名 alter 列名 set default null;

// 修改表的列的默认值为当前时间

mysql> alter table 表名 alter 列名 set default current_timestamp;

// 修改表的列的默认值为某个值

mysql> alter table 表名 alter 列名 set default;

// 修改表的列的默认值为当前时间

mysql> alter table 表名 alter 列名 set default current_timestamp on update current_timestamp;

// 修改表的列的默认值为某个值

mysql> alter table 表名 alter 列名 set default on update current_timestamp;

创建索引

bash
mysql> create index 索引名 on 表名(字段名);

删除索引

bash
mysql> drop index 索引名 on 表名;

查看索引

bash
mysql> show index from 表名;

创建唯一索引

bash
mysql> create unique index 索引名 on 表名(字段名);

创建全文索引

bash
mysql> create fulltext index 索引名 on 表名(字段名);

创建主键

bash
mysql> alter table 表名 add primary key(字段名);

删除主键

bash
mysql> alter table 表名 drop primary key;

创建外键

bash
mysql> alter table 表名 add constraint 外键名 foreign key(字段名) references 表名(字段名);

删除外键

bash
mysql> alter table 表名 drop foreign key 外键名;

小结

上面就是 mysql 的基本命令操作,只要掌握了这些基础操作,就能够写出复杂的 sql 语句了,这个只是入门基础记录下命令,希望对你有帮助。

上次更新:

如有转载或 CV 的请标注本站原文地址