1. 数据库的概念及作用
1.1 数据库的概念
数据库就是用户计算机上的一些具有特殊格式的数据文件的集合
1.2 数据库的特点
- 持久化存储
- 读写速度极高
- 保证数据的有效性
- 对程序支持性非常好,容易扩展
2. 数据库分类及特点
2.1 数据库的分类
关系型数据库和非关系型数据库。
关系型数据库是指采用了关系模型来组织数据的数据库。例如:MySQL、Oracle、SQLServer等
非关系型数据库强调了key-value的方式存储。例如:MongoDB、redis
2.2 数据库管理系统
数据库管理系统又称RDBMS,是针对关系型数据库的,一般由数据库客户端、数据库服务端、数据库文件集合三部分组成。
3 Ubuntu下MySQL环境搭建
3.1 常用命令
sudo apt-get install mysql-server # 安装mysql服务端
sudo apt-get install mysql-client # 安装mysql客户端
sudo service mysql start # 启动mysql数据库
sudo service mysql stop # 停止mysql数据库
ps ajx | grep mysql # 查看mysql数据库启动状态
3.2 MySQL配置文件
配置文件路径:/etc/mysql/mysql.conf.d/mysqld.cnf
bind-address 表示服务器绑定的ip,默认为127.0.0.1
port 表示端口,默认为3306
datadir 表示数据库目录。默认为/var/lib/mysql
general_log_file 表示普通日志,默认为/var/log/mysql/mysql.log
log_error 表示错误日志,默认为/var/log/mysql/error.log
3.3 MySQL数据类型
MySQL支持多种类型,常用一般分为三类:数值、日期、字符串
3.3.1 整型
tinyint:占用1个字节。应用场景一般为:某个事物的状态,0或者1
int:占用4个字节。应用场景一般为:某个事物的数量
3.3.2 浮点型
float:单精度型,只保证6位有效数字的准确性
double:双精度型,只保证16位有效数字的准确性
decimal:定点数,其中decimal(3,2)代表共3位数字,其中2位是小数,例如:6.88
3.3.3 字符串
char:定长字符串,最大255个字节。即在表创建时,char字段占用硬盘空间的大小就已经固定了。例如:char(10) 就代表占用10个字符空间。
varchar:变长字符串,最大65535个字节。即占用的空间不是固定的,而是用内容决定的。例如:varchar(10)代表最多保存10个字符。
text:不可以有默认值
3.3.4 枚举类型
enum:在定义字段时就预告规定好固定的几个值,然后插入记录时,只能在这几个固定好的值中选择一个。
例如:gender enum(‘凡人’,‘炼气’,‘筑基’)
3.3.5 时间类型
datetime:保存时间范围为1000-01-01 00:00:00到9999-12-31 23:59:59
timestamp:保存时间范围为1970-01-01 00:00:01到2038-01-19 03:14:07
3.4 数据完整性和约束
数据完整性用于保证数据的正确性,即在更新、删除、插入数据时都要检查数据的完整性,核实约束条件。
约束类型 | 约束说明 |
---|---|
NOT NULL | 非空约束(设置非空约束,该字段不能为空) |
PRIMARY KEY | 主键约束(唯一性,非空性) |
UNIQUE KEY | 唯一约束(唯一性,可以空,但只能有一个) |
DEFAULT | 默认约束(默认值) |
FOREIGN KEY | 外键约束(需要建立两表间的关系) |
3.5 数据库的连接和退出
连接:mysql -u用户名 -p密码
退出:exit或者quit
查看版本信息:select version()
查看时间:select now()
3.6 数据库基本操作
3.6.1 数据库基本操作命令
命令 | 作用 |
---|---|
show databases; | 查看所有数据库 |
select database(); | 查看当前使用的数据库 |
create database 数据库名 charset=utf8; | 创建数据库 |
use 数据库名; | 使用数据库 |
drop database 数据库名; | 删除数据库 |
3.6.2 数据表基本操作命令
命令 | 作用 |
---|---|
show tables; | 查看当前数据库中所有表 |
desc 表名 | 查看表结构 |
show create table 表名 | 查看表的创建语句以及详细过程 |
alter table 表名 add 列名 类型; | 添加字段 |
alter table 表名 change 原名 新名 类型及约束; | 重命名字段 |
alter table 表名 modify 列名 类型及约束 | 修改字段类型 |
alter table 表名 drop 列名 | 删除字段 |
drop table 表名; | 删除表 |
3.6.3 表数据操作命令
3.6.3.1 增加数据
insert into 表名 values (...); 其中...要和每个字段的顺序保持一致
insert into 表名 (字段1,字段2) values (值1,值2);
insert into 表名 (...),(...)...;一次性插入多条数据
3.6.3.2 删除数据
delete 表名 where 条件; 删除指定条件的数据
delete 表名; 删除表中所有数据
3.6.3.3 修改数据
update 表名 set 字段1=值1,字段2=值2 where 条件;
3.6.3.4 查询数据
select * from 表名; 查询所有列数据
select 字段1 from 表名; 查询字段1数据
select * from 表名 where 字段1=值1; 查询字段1的值为值1的数据
select * from 表名 where 字段1=值1; 查询字段1的值为值1的数据
select * from 表名 where 字段1>值1; 查询字段1的值大于值1的数据
select * from 表名 where 字段1<=值1; 查询字段1的值小于值1的数据
select * from 表名 where 字段1<>值1; 查询字段1的值不为值1的数据
select * from 表名 where 字段1=值1 and 字段2=值2; 查询字段1的值为值1,且字段2的值为值2的数据
select * from 表名 where 字段1=值1 or 字段2=值2; 查询字段1的值为值1或字段2的值为值2的数据
select * from 表名 where 字段3 like '%A%'; 查询字段3的值包含A的数据
select * from 表名 where 字段1 like 'A%'; 查询字段1的值以A开头的数据
select * from 表名 where 字段1 like '%A'; 查询字段1的值以A结尾的数据
select * from 表名 where 字段1 in ("值1","值2","值3"); 查询字段1的值在 ("值1","值2","值3")里的数据
select * from 表名 where 字段1 between 值1 and 值2; 查询字段1的值在 值1到值2之间的数据
select * from 表名 where 字段1 not between 值1 and 值2; 查询字段1的值不在 值1到值2之间的数据
select * from 表名 where 字段1 is null; 查询字段1的为null的数据
select * from 表名 where 字段1 is not null; 查询字段1的不为null的数据
3.6.4 排序和聚合函数
排序语法:
select * from 表名 order by 字段1 asc|desc
其中asc为从小到大即升序排列,是默认值。desc是降序排列
聚合函数
命令 | 作用 |
---|---|
count(字段) | 计算总行数 |
max(字段) | 求此字段的最大值 |
min(字段) | 求此字段的最小值 |
sum(字段) | 求此字段的和 |
avg(字段) | 求此字段的平均值 |
3.6.5 分组查询和limit查询
数据表(person):
字段名 | 类型 |
---|---|
name | varchar(10) |
age | tinyint |
分组查询:
按照年龄分组:select age from person group by age;
按照年龄分组,查询相同分组中的姓名:select group_concat(name),age from person group by age;
按照年龄分组,查询每个分组中有多少人:select count(1),age from person group by age;
limit限制查询
语法:limit 起始记录,记录数
起始记录是指从第几条开始取,记录数是指一共取多少条。
3.6.6 连接查询
3.6.6.1 内连接
根据连接条件取交集,on是连接条件
语法:select 字段 from 表1 inner join 表2 on 表1.字段1 = 表2.字段2
3.6.6.2 外连接
外连接分为左连接和右连接。
左连接,取两表交集+主表
语法:主表 left join 从表 on 连接条件
右连接,取两表交集+主表
语法:从表 right join 主表 on 连接条件