目录
数据 | 数字信息,属性,对一系列对象具体属性的描述的集合 |
数据库 | 数据库就是用来组织(各个数据之间是有关联的,按照规定组织起来的),存储和管理(对数据的增,删,改,查)数据的仓库 |
数据库是企业的重要信息资产,在使用数据库时,要注意(查和增 无所谓,删和改 要谨慎, 数据库的管理系统(DBMS)实现对数据的有效组织,管理和存取的系统软件 |
数据库的组成
数据库的分类
1 | mysql | 关系型数据库 |
2 | redis | 非关系型数据库 |
3 | es | 索引型数据库 |
什么是关系型数据库
关系型数据库 | 存储数据的结构是一个二维表格 |
表 | 由行和列组成 |
行 | 记录,用来描述一个对象信息 |
列 | 字段,用来描述对象的具体信息 |
常见的关系型数据库
在关系型数据库当中,表里面的数据是关联的,表和表之间的数据也是关联起来的 | ||
1 | mysql | 中小型的数据并发请求,用的比较多(因为免费) |
2 | oracle(甲骨文) | 高并发,大数据量 才使用它 ,和mysql使用起来差不多,只有一些前后顺序不一样 |
3 | sql-server | 被淘汰了 |
4 | mariaDB | yum安装的sql,和数据库一模一样 |
5 | postgresql | 下一个可能要火起来的数据库 |
关系型数据库当中,表里面的数据是关联的,表和表之间的数据也是关联起来
面试题
多表关联(多表关联查询),最多可以关联几张表
最多关联三张表,再多就会降低查询速度,你想关联多少就可以关联多少,理论上可以关联无数 |
非关系型数据库
非关系型数据库的特点 | 它保存的不是一张二维表格,一个 key 对应一个 value 键值对来保存数据,一个键对应一个值,比如 ky32=12 没有什么绝对的关联 |
redis(典型的非关系型数据库) | 缓存型的数据库 |
es | 索引型数据库 |
mongDB | 文档型数据库 |
关系型数据库与非关系型数据库对比
1 | 关系型数据库 | 既然有关联,查询速度相对来说,关系型数据库查询速度慢一点 |
2 | 非关系型数据库 | 可以支持高并发读写,对海量数据依旧保持高效率的存储和访问 |
Mysql数据库的存储引擎
1 | 5.5版本之间,MYISAM不支持事务和外键的存储引擎,适用于读的相对较多,写的相对较少 |
2 | 5.6版本之后默认的存储引擎:innodb ,可以支持事务,外键,行级锁定的存储引擎,还支持高并发性能的应用 |
事务
事务 | 在数据库当中,一个或者多个操作组成的数据库操作的序列,这些操作要么全部成功,如果失败一个就全部不执行 为什么要提出这个概念? 是为了确保数据一致性和完整性 |
事务在数据库中的特性特点:四个性质
1 | 原子性 | 它是数据库最小的工作单位,要么全部执行成功,要么全部不执行,只要有一个操作时间,整个执行的序列都会被回滚,也就是一个也不生效(撤销操作),哪怕是完成的操作也会被撤销。 |
2 | 一致性 | 事务执行前后,数据库的完整性和约束不能被破坏,只有在满足所有的约束条件情况下,事务才能被提交(比如要求只能填写数字,那么除了数字其他所有字符都无法提交) |
3 | 隔离性 | 事务的执行是相互隔离的,一个事物的执行不能受到其他事务的干扰,在并发事务(同时操作)之间互相隔离,防止数据不一致的情况发生。 |
4 | 持久性 | 事务一旦提交,他所做的所有修改会被永久的保存在数据库中,即使系统崩溃,提交的数据也不会丢失,确保数据库始终处于一致性的状态,确保数据的完整和一致 |
Mysql的名词
1 | 数据库 | database |
2 | 表 | 表:table,行:row,列:column |
3 | 索引 | index |
4 | 视图 | view |
5 | 存储过程 | procedure |
6 | 触发器 | trigger |
7 | 用户 | user |
8 | 权限 | privilege |
在mysql中的语句规范
1 | 在数据库系统中,sql不区分大小写,但是建议大写,语句不区分,但是表名是要严格区分大小写的 |
2 | sql语句可以单行书写,也可以多行书写,但是默认都以 (分号;)结尾,推荐多行写 |
3 | 关键词不能跨行写或者简写 |
4 | 子语句通常位于独立的一行,因为便于编辑,提高可读性 |
数据库的命名规则
1 | 必须以字母开头,后面可以包含数据,可以支持的特殊字符:#,_ , $ |
2 | 不能使用mysql的保留字,如 table select 等 |
3 | 数据库名,表名,用户名要严格区分大小写 |
数据库的字符类型
int | 会占4个字节,用来存储整数,范围比较大 |
char | 只能存储固定长度的字符串,用来存储定长度的字符串(比如规定长度为2,那么超过2就不行) |
varchar | 可变长度的字符类型,存储可变长度的字符串(也不是无限制的改变长度) |
float(m,d) | 要先申明(m,d)m表示总长度,d表示小数位。单精度浮点存储点数 |
double(m,d) | 双精度浮点数,存储浮点数,同样m表示总位数,d表示小数位(跟float差不多,没什么区别) |
text | 用于存储大文本数据(csdn就是用的这个) |
image | 用于存储二进制图像,图片,多媒体(视频) |
decimal(5,2) | 戴思某,用于存储固定精度的小数,其中5表示总位数,2表示小数,跟float,double,一样没什么本质上区别 |
date | 用于存储日期,如果要存储日期格式那么要以 年-月-日,中间要有 - 表述出来 ,如 2023-10-28 |
datetime | 存储日志 也是一样,格式:年-月-日 空格 时:分:秒,如:2023-10-28 22:50:59 |
timestamp | 和datetime格式一至,可以自动的更新为当前的时间 |
数据库字符串有个很重要的点
char | 占4个字节,无论你是否定义了值,都会占用固定长度的字节大小(不满4个也算4个),举例:定义的值为4,实际值为3,那么占4字节, char对比varcha r比较占磁盘空间,但读写速度比varchar快 |
varchar | 占1个字节,没有定义值就一直占一个(隐藏字节),举例:定义的长度为14,实际使用的长度为5,那么字节为5+1(隐藏字节)也就是6字节, varchar对比char 省磁盘空间,但读写速度比char慢 |
注意:都是字符串类型,一定要用单引号引起来 ,如:' 张三 ' ' 李四 ' |
Sql语句的分类(面试会问)
DDL | 数据定义语言,用于创建数据的对象,创建库,表,索引 |
CREATE | create 创建 |
DROP | drop 删除 |
ALTER | alter 修改 |
创建数据库的命令
- mysql -u root -p123456
- #mysql -u指定用户root,-p指定密码
- show global variables like 'port';
- #查看当前数据库使用的端口
- show databases;
- #查看我当前有那些库
- use mysql;
- #指定使用mysql这个库
- show tables;
- #查询当前库下有哪些表
- describe user\G;
- #查看表结构,加上\G就是纵向查看
- desc test1/user;
- #查看表结构的简写
- create database chen;
- #创建一个叫chen的库
- show databases;
- #查看一下chen的库是否创建完毕
- create table chen1 (id int(4) not null,name varchar(12) not null,sroce decimal(5,2),passwd char(48),primary key(id));
- #创建一个名字叫 chen1 的表,创建id,name,sroce,passwd四列这是类型,设立主键id不能为空,不能重复,int,varchar,decima,char为数据类型
- drop table chen1;
- #删除 chen1 表
- drop database chen;
- #删除 chen 库
- insert into chen1 values(1,'cwh',null,'空格');
- #对chen1这个表里插入一个数据(一个值)values第一个字符为1(序号),第二个字符为cwh(名字),第三个字符为null(可以为空),第四个字符为空格
- select * from chen1;
- #查询chen1这个表完整的数据
- select * from chen1 where passwd is not null
- #查询chen1这个表,passwd行哪一列不是为空?(空格会显示出来,是null的那一列不会显示出来)
- select * from chen1 where passwd is null
- #查询chen1这个表,passwd行哪一列为空(null那一列会显示出来,空格不显示出来,这个DDL语句,可以快速测试哪些是null或非null)
Null和空格的区别
null | null是什么也没有,对这个对象没有任何的描述信息 |
空格 | 空格也是字符 |
DML是什么
数据操作语言,对表中的数据进行管理 | |
select | 查询语句,也可以作为管理语句 |
update | 更新 |
insert | 添加 |
delete | 删除,对表进行删除 |
DQL
查询数据记录
Select
DCL
数据控制语言,设置或者更改数据库用户或者用户的权限
GRANT
REVOKE
TCL
事务控制语句,管理数据库当中的事务
Commit:确认提交事务
一旦提交后反悔可以 : ROLLBACK,:事务提交之后无法回滚,
Savepoint :检查点(保存点),可以回滚。
mysql数据库命令实操
mysql -u root -p123456 #指定进入root用户的数据库,密码123456
show global variables like 'port';
#查看端口
show databases;
#展示有哪些库
show tabes;
#展示这个库(你打开了哪个库就会展示哪个表)有哪些表
创建一个表内容
desc cw1;
#查看这个表的结构
truncate table cw1;
select * from cw1;
insert into cw1 (id,name,sroce,passwd) values(1.'gq',90,'123');
#创建的第一种方式
insert into cw1 values(2,'hws',95,'456');
#创建的第二种方式
查看一下
insert into cw1 values(3,'ymr',91,password('hyde'));
#对关键信息进行加密
update cw1 set passwd=password('000') where id = 2;
#通过id,set:进行指定passwd那一列的信息进行加密
insert into cw1 values(6,'lyw',95,'lll');
#不按顺序进行创建
delete from cw1 where id = 6;
#删除cw1表里的id列的第六行
select * from cw1。如果有大量数据查看会比较慢,可以用指定条件查看,select * from cw1 where id = 2;
select * from cw1 limit 2,5l;
#指定查看2到5行也就是一共4行,如果要查看前2行或者前几行就limit 2;
select sroce from cw1;
#指定查看sroce那一列
select distinct sroce from cw1;
#指定查询sroce那一列,并且去除重复
select distinct name sroce from cw1;
#指定多条件查询,并且去除重复
alter table cw1 rename cw11;
#改变表的名字
alter table cw1 add birth date;
#创建一个新的列
update cw1 set birth=date('2020-1-1') where id = 4;
#指定birth那一列,第4行添加一个年月日
alter table cw1 change birth birthday datetiem;
#修改birth那一列的名
alter table cw1 drop birthday;
#把birth那一列直接删除
alter table cw1 modify column passwd varchar(52);
#改变表里的类型