基础
定义及特点
定义: 用于存储数据的软件
特点: 表是数据存储的核心体现
数据库常见分类
1、RDMS:(Relational Database Management System)关系型数据库系统
特征: 依据关系模型创建的数据库,把数据保存在不同的表中,表与表存在着某些关系。
2、非关系型数据库
非关系型数据库也叫nosql数据库,全称notonlysql。通常数据以对象的形式存储在数据库中,不固定结构,例如列模型,键值对模型。
二、启动
rpm -qa|grep -i mysql 查看mysql是否安装
systemctl status firewalld.service 查看mysql的状态(mysqld最后的d是 daemon守护进程的意思)
systemctl start mysqld 启动mysql
systemctl stop mysqld 关闭mysql
systemctl restart mysqld 重启mysql
1、进入数据库设置密码:
grant all privileges on *.* to 'root'@'localhost' identified by '123456';
操作语句
show databases; 显示所有的数据库名字
create database XX; 创建一个数据库名字为XX
drop database XX; 删除为XX名字的数据库
use XX; 进入到XX数据库 (显示Database changed 表示已进入)
show tables; 查看当前数据库里面有哪些表
desc XX; 查看XX这个表的结构 可以看到字段名称,数据类型,约束,备注
field ==》字段
type ==》数据类型
null ==》是否可以为空
key ==》primary key主键
default ==》默认值约束
Extra ==》额外的备注、auto_increment自增长约束
三、创表操作
create table+表名(字段1名称,数据类型,约束,字段2名称,数据类型,约束);
drop table if exists goods; -- 如果表存在, 执行删除操作
-- drop table : 删表
-- if exists : 如果存在
create table goods(goodsName varchar(20),price decimal(4, 2));
数据类型
int 存储整数 范围(-2147483647,2147483647)
bigint 存储整数 范围大于2147483647
unsigned 无符号
无符号范围(0 ~ 4294967295)
drop table if exists goods;
四、表结构操作
alter table +表名 rename +新表名; 修改表名
alter table +表名 change +原字段名 +新字段名 数据类型,约束; 修改表字段
alter table+表名 add +字段名 数据类型 约束 first;
添加表字段,并放在第一个字段前 first 第一,前面
alter table +表名 add +字段名 数据类型 约束 after +字段名; 添加表字段,并放到某个字段后 after 在·····之后
alter table +表名 add(字段1 数据类型,字段2 数据类型); 同时添加两个字段,默认添加到字段最后
alter table xx表drop xxx字段; 删除xx表的xxx字段
alter table +表名 drop 字段1,drop 字段2; 删除两个字段
alter table 表名 modify 字段1 字段类型 after 字段2; 移动字段
alter table 表名 drop primary key; 删除主键约束 (首先要把自增长删除)
create table goods(id int unsigned primary key auto_increment, goodsName varchar(20),price decimal(6,2),num int,company varchar(20),remark varchar(30));
-- unsigned : 无符号
-- primary key : 主键(唯一,不为空)
-- auto_increment : 自动递增
-- 直接替换字段名使用皆可
char 存储字符 例:char(10)可能占用了10个字节
注意:char(20) char(M) M指最大能存储20个字符,不足的用空格补齐
varchar(10) 存储字符 varchar(10)表示最大存储20个字符,实际是多少个字符就是多少个
date 建表的时候在日期的后面接date,并且加引号
datetime 日期时间
范围(1000-01-01 00:00:00 ~ 9999-12-31 23:59:59)
decimal 小数
decimal(5,2) 表示共存5位数,小数占2位,整数占3位
float 默认保存6位精度的数字(包括小数位和整数位) 例:float(20,2)指小数点后面2位
约束条件
primary key 主键约束,物理上存储的顺序
说明:非空唯一,用于唯一标识对应的记录。类似身份证、用来约束主键对应的值不能重复、也不能为空
foreign key 外键约束
在实际开发中,很少会使用到外键约束,会极大的降低表更新的效率
not null 非空约束 说明:表示当前字段对应的值不能为空
default 默认值约束 说明:默认给字段指定默认值
例:当往这个表当中插入数据的时候不给phone字段插入新的值、则默认用15366667777
auto_increment 自增长约束 说明:作用在整数类型,字段默认从1开始自增
unique 唯一 说明:此字段的值不允许重复
查询语句
select * from +表名; 查询表中的数据 *号代表的是所有
select 字段 from +表名; 查询某个字段的数据
select 字段1,字段2 from +表名 查询多个字段数据
select * from +表名 where 字段=值; 条件查询、查询满足某个条件的所有数据(where后面接满足的条件)
select * from +表名 where 字段!=值; 查询不满足某个条件的所有数据
select * from +表名 where 条件1 and 条件2; 查询同时满足多个条件数据(and关键字左右的两个条件必须同时满足)
select * from +表名 where 条件1 or 条件2; 查询满足至少1个条件的数据
select * from +表名 where 字段 between m and n 查询一个条件范围内的数据(between...and...指定一个范围)
select * from +表名 where 字段 not in(值1,值2,值3) 查询字段不满足在指定集合中的数据
select * from +表名 where 字段 in(值1,值2,值3) 查询字段满足在指定的集合中的数据
select * from +表名 where 字段 is null; 查询字段值为空的数据
select * from +表名 where 字段 is not null; 查询字段不为空的数据
select * from +表名 where 字段 like “%值%” 查询某个字段模糊匹配成功的数据
like:像 %用于匹配字段开头和结尾
select * from +表名 where 字段 limit m,n; 查询限定的数量的数据
select * from +表名 order by 字段 desc 查询的数据根据某个字段从大到小排序
select * from +表名 order by 字段 asc 查询的数据根据某个字段从小到大排序
select * from +表名 group by 字段; 查询的数据根据某个字段进行分组
select * from +表名 group by 字段 having 条件; 查询的数据根据某个字段进行分组再条件过滤(可以直接跟聚合函数)
having跟在groupby后面,作用相当于where
select class,sum(math) as b from student group by class having b>100; as取别名
插入数据及修改数据
插入 insert into 表名 values(...)
insert into test(id,score,name,phone,time)values(1,89.88,'xiaowang',15355556666,"2020-10-8");
insert into test values(2,78.456,'xiaowang',15344445555,'2020-10-8');
insert into test(id,score,name,phone,time)values(3,78.456,'xiaowang',15344445555,'2020-10-8'),(4,78.456,'xiaowang',15344445555,'2020-10-8');
insert into test values(5,78.456,'xiaowang',15344445555,'2020-10-8'),(6,78.456,'xiaowang',15344445555,'2020-10-8'),(7,78.456,'xiaowang',15344445555,'2020-10-8');
insert into test(id)values(8);
修改 update +表名 set 字段名=值 where 条件
删除操作
Truncate、Delete、Drop 的区别
1、Delete 删除数据时,即使删除所有数据,其中的自增长字段不会从1开始
2、Truncate 删除数据时,其中的自增长字段恢复从1开始
3、Drop 是删除表,所有数据和表结构都删掉总结
在速度上,drop > truncate > delete
如果想删除部分数据用 delete,注意带上 where 子句
如果想删除表,用 drop
如果想保留表而将所有数据删除,自增长字段恢复从1开始,用 truncate
drop +表名 删除表数据和表结构,释放空间
truncate +表名 只是删除表的数据,释放空间
delete from test1; 删除表数据,不删除表结构 ==》可以指定表字段值删除
MySQL 操作日志
记录 MySQL 所有的操作日志(包括增删改查),不过它会耗费数据库5%-10%的性能,所以一般没特别需要时不打开此功能,一般在查找问题时才打开,完成后及时关闭。
show variables like 'general%'; -- 查看日志功能是否开启
set global general_log = 1; -- 开启操作
set global general_log = 0; -- 关闭操作
-- 注意: 日志功能使用完成, 需要记得马上关闭, 避免影响数据库性能!!!!!!
注意 : MySQL 自带日志功能, 但是开启日志功能, 极其消耗数据库性能, 因此默认情况下是不开启的
日志目录
cat /usr/local/mariadb/var/localhost.log
聚合函数
select count(*) from +表名 统计查询数据的数量
select sum(字段) from +表名 查询某个字段求和
select avg(字段) from +表名 查询某个字段平均值
select distinct(字段) from +表名 对某个字段进行去重
select min(字段) from +表名; 查询某个字段最小值
select max(字段) from +表名; 查询某个字段最大值