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 语句了,这个只是入门基础记录下命令,希望对你有帮助。