MySQL
准备工作
安装
# 安装
sudo apt install mysql-server
# 显示安装包信息
apt-cache show mysql-server
# 查看MySQL服务效果图(ps查看所有进程,-a显示所有用户,-u不显示用户名,-x不显示所有的执行程序)
ps -aux | grep mysql
MySQL 服务
# 查看MySQL的服务状态
sudo service mysql status
# 停止MySQL服务
sudo service mysql stop
# 启动MySQL服务
sudo service mysql start
# 重启MySQL服务
sudo service mysql restart
配置文件
port表示端口号,默认为 3306;bind-address表示服务器绑定的 IP,默认为 127.0.0.1;datadir表示服务器的保存路径,默认为/var/lib/mysqllog_error表示错误日志,默认为/var/log/mysql/error.log
数据类型和约束
数据类型
在创建表的时候为表中字段指定数据类型,只有数据符合类型要求才能存储起来,使用数据类型的原则是——够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间。
- 整数:int, bit
- 小数:decimal,例如
decimal(5,2)表示存 5 位数,小数占 2 位 - 字符串:varchar, char,
char表示固定长度的字符串char(3)存储'ab'时会补一个空格存为'ab ';varchar时可变长度的字符串varchar(3)存储'ab'时会存为'ab' - 大文本:text
- 日期时间:data, time, datetime
- 枚举类型:enum
对于图片、音频、视频等文件,不存在数据库中,而是上传到某个服务器,然后表中存储这个文件的保存路径
数据约束
- 主键
primary key:物理上存储的顺序,MySQL 建议所有表的主键字段都叫 id,类型为 int unsigned - 非空
not null:此字段不允许填写空格 - 唯一
unique:此字段不允许重复 - 默认
default:此字段不填写时使用默认值 - 外键
foreign key:约束关系字段,当关系字段填写值时,会关联到表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常
附表
- 整数类型
| 类型 | 字节大小 | 有符号范围(signed) | 无符号范围(unsigned) |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
| SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
| INT/INTEGER | 4 | -2147483648 ~2147483647 | 0 ~ 4294967295 |
| BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
- 字符串
| 类型 | 说明 | 使用场景 |
|---|---|---|
| CHAR | 固定长度,小型数据 | 身份证号、手机号、电话、密码 |
| VARCHAR | 可变长度,小型数据 | 姓名、地址、品牌、型号 |
| TEXT | 可变长度,字符个数大于 4000 | 存储小型文章或者新闻 |
| LONGTEXT | 可变长度, 极大型文本数据 | 存储极大型文本数据 |
- 时间类型
| 类型 | 字节大小 | 示例 |
|---|---|---|
| DATE | 4 | '2020-01-01' |
| TIME | 3 | '12:29:59' |
| DATETIME | 8 | '2020-01-01 12:29:59' |
| YEAR | 1 | '2017' |
| TIMESTAMP | 4 | '1970-01-01 00:00:01' UTC ~ '2038-01-01 00:00:01' UTC |
使用
数据库操作
# 查看所有数据库
show databases;
# 创建数据库
create database 数据库名 charset=utf8;
# 使用数据库
use 数据库名;
# 查看当前使用的数据库
select database()
# 删除数据库
drop database 数据库名;
表结构操作
# 查看所有表
show tables;
# 创建表
create table 表名(
字段名称 数据类型 可选的约束条件,
...
);
# 查看表结构
desc 表名;
# 修改表—添加字段
alter table 表名 add 列名 类型 约束;
# 修改表—修改字段类型
alter table 表名 modify 列名 类型 约束; # 只能修改字段类型和约束
# 修改表—修改字段名和字段类型
alter table 表名 change 原名 新名 类型及约束;
# 修改表—删除字段
alter table 表名 drop 列名;
# 删除表
drop table 表名;
表操作
查询数据
添加数据
# 全列插入:值的顺序与表结构字段的顺序完全对应
insert into 表名 values(...)
# 部分列插入
insert into 表名(列1,...) values(值1,...)
# 全列多行插入
insert into 表名 values(...),(...)...;
# 部分列多行插入
insert into 表名(列1,...) values(值1,...),(值1,...)...;
修改数据
删除数据
上述删除操作不容易恢复,可以使用逻辑删除来代替
# 0表示未删除,1表示删除 alter table 表名 add isdelete bit default 0; # 逻辑删除 update 表名 set isdelete=1 where 条件
where 条件查询
模糊查询
like模糊查询关键字%多个任意字符_一个任意字符
范围查询
between...and...连续范围内in非连续范围内
空判断查询
in null判断为空使用is not null判断非空使用
不能使用
=或!=判断为空,null不是等于空字符串''
排序
- 先按第一列排序,如果第一列相通则按照第二列排序
asc升序(默认)desc降序
分页
start:开始索引,默认为 0count:查询条数
常用变量
# 查看当前数据库
select database();
# 查看当前用户
select user();
# 查看MySQL版本
select version();
# 查看安装路径
show variables like '%datadir%';