数据库概念
datebase:用来组织,存储,管理数据的仓库。
数据库的管理系统:DBMS(用来实现对数据的有效组织、关系和存取的系统软件)
关系型和非关系型数据库
关系型数据库:mysql、oracle
非关系型数据库:redis
关系型数据库
常见关系型数据库:mysql、oracle、sql-server(windows)、postgresql(大象数据库)、influsdb
关系型数据库的核心:是一张表格,数据存储在表格中
表有行和列:
列:列又叫字段,描述对象的属性
行:描述对象的信息
数据是保存在表里面的,关系型数据库的表与表之间可以是有关联的,数据之间也是有关联的。
一个关系型数据库可以有多个库,库里面保存的是表,表里面有数据。每个库是独立的。
数据库当中,多张表存储在库中,通过表与表之间的字段进行关联。
关系型数据库:并非量很低,一旦访问大量集中,数据库会很快崩溃。
非关系型数据库
有库,库里面保存的键值对,key————>value的形式进行保存
如:set test1=1;键是test1,值是1
非关系型数据库:redis——>用户第一次访问数据——>redis上生产一个缓存的键值对——>访问缓存键值对
非关系型数据库,可以高并发读写,对海量依旧可以保持高效的存储和访问,网且也实现高可用的架构。
es elasttic search:索引型非关系数据库
redis:缓存型非关系数据库
prometheus:时序性的非关系数据
monggoDB:文档型非关系数据库
mysql数据库
数据类型
mysql数据库的数据类型,也是所有关系数据库的数据类型
int(n):这一列数据类型是整数,n 表示数据的长度限制
char():保存字符串类型的数据,保存固定长度的字符
- char的字段,无论是否有值,char都会占据4个字节(硬盘空间),如:存储'ab'是4个字节。
varchar():保存字符串类型的数据,保存可变长度的字符
- varchar是按照实际的字符长度进行记录,但是在结尾会多一个字节,如:存储'ab'是3个字节。
- varchar比char节省磁盘空间
- char比varchar读写速度要快,因为char的存储方式是连续磁盘空间。varchar多次查询之后,会产生磁盘文件的碎片。
text:存储大文本数据
date:存储日期,YYYY-MM-DD
datetime:存储时间,YYYY-MM-DD HH:MM:SS
timestamp:可以自动存储当前的时间戳,YYYY-MM-DD HH:MM:SS
float(n,m):浮点数,带小数点的值,n总位数,M小数点后几位,单精度浮点数
double(n,m):双精度浮点数
image:存储图像或者多媒体的文件
数据库的存储引擎和事务
mysql:innoDB,支持事务,支持行级锁定,支持外键的存储引擎。
事务由四个特性组成:
1、原子性:事务是整个数据库工作的最小单位,不可分割的,要么全部执行成功,要不全部失败,所有的已成功的都会被失败。
2、一致性:事务执行前后,数据的完整性约束是不能被破坏的,满足所有条件约束的情况下,事务才能被提交。
3、隔离性:每个事务执行的过程是隔离的,互相不能被干扰,并非事务之间是独立的。如果隔离性不好会发生以下结果:
如果隔离性不好会发生以下结果:
- 脏读:A事务在访问数据并且修改了数据,但是修改的结果没有提交到数据库,B事务也访问了这条数据,而且看到了未提交的结果。
- 不可重复读:A事务两次读取数据,过程中B事务修改了该数据,,导致A事务两次查询的结果不一致,这就是不可重复读,不能读到相同的数据。
- 幻读:A事务对数据进行了修改,B事务也对该数据进行了修改,A事务发现数据还是没有修改,产生了幻觉。
mysql支持事务四种隔离级别:
- 未提交读:允许脏读,可以看到未提交的修改 read uncommitted
- 提交读:read committed 提交读,只允许看到修改提交之后的数据
- 可重复读:mysql的默认隔离级别,一个事务,在执行两次select语句,保证得到相同的结果
- 串行读:后一个事务必须等待前一个完成之后才能继续,在这个过程中表会完全锁住,读写都会阻塞。
4、数据的持久性:事务一旦被提交,将永久性的保存到数据库中,保证数据不会丢失。
事务:包含插入数据、更新数据、删除数据。
数据库的管理语句
管理数据库的语法:sql语句
数据库常见名词:
- 数据库:database
- 表:table
- 行:row
- 列:column
- 索引:index
- 试图:view
- 用户:user
- 权限:privilege
- 存储过程:procedure
sql语句的规范:
1、sql语句不区分大小写,但是建议用大写;sql可以是单行也可以多行,默认是以 ‘ ;’ 结尾。
如果是多行一个sql语句,关键词必须要在一行。
2、库名、表名,列名和行的值,是严格区分大小写的
3、命名规则:
表、库都必须以字母为开头,不要使用sql的保留字段,table select show database
表名和库名尽量不要使用特殊字符
sql语句的分类
1、DDL:数据库定义语言,创建数据库,表示、索引等的语句。
- create:创建
- drop:删除
- ALTER:修改(只能对表)
2、DML:数据库操作语言,对表里面的数据进行管理
- select:查
- update:更新数据
- insert:插入
- delete:删除数据
3、DQL:查询语句,查询数据表中的符合条件的数据
- select:查
4、DCL:数据库控制语句,对数据库用户权限进行控制
- GRANT:赋权
- REVOKE:取消权限
5、TCL:事务控制语句
- commit:提交
- rollback:回滚
- savepoint:保存点,用来回滚
实操
在Linux上基本操作
查看库和使用库
查看表以及查看表的结构
不进入数据库查看表的数据
创建库和表—create
- null,表示什么都没有,什么都不存在。
- 空值,表示也是有数据,也是值。
避免创建重复的表
删除表和数据库—drop
查看表和状态—select,desc
- key:键,主键或者外键
- default:表示如果插入数据时,没有写数据,自动添加字段
- extra:提供附加的信息,自增长等待,自动加入时间
select查询进阶用法
查看指定范围—limit
- 表示查看从第1行后1行开始,至后面4行,即2-5行
数据去重—distinct
- 需要去重的类型越多,效果越差
模糊查询—like
管理表数据
插入表的数据—insert into
更新表的数据—update
- 表示id=1的所有行,name都改成李事宇
删除表中的数据行—delete和truncate
- 表示删除score=92.7的所有行数据
delete 和 truncate 区别
如使用delete之前,自增长到了5,删除之后,再建立新的数据便是从6开始。
truncate:速度更快
对表的结构进行修改—Alter
1、修改表名
2、增加列
3、修改列的类型
4、修改列的名称和类型
5、删除列
mysql当中的六个约束
1、主键约束:primary key,用于标识表中的每一行,主键的字段的值必须是唯一的,且不能为空,且一个表只能有一个主键。
2、外键约束:foreign key,用来建立表于表之间的关系。一张表的外键要和另一张表的主键的值匹配,保证数据的引用完整性。
3、非空约束:not null,插入或者更新的操作这个字段必须要有值。
4、唯一性约束:unique key,类似于主键的唯一性,但是一个表可以有多个唯一性约束。
5、默认值约束:default
6、自增约束:auto_increment,一般和主键一起使用,唯一性和数据类型都有要求。
这时候从表的crad_id已经和主表的crad_id关联上了,从表crad_id的值只能与主表的crad_id一致。
也可以在行尾申明主键
- 多表联合查询时,表与表之间的关联不要超过3张表,超过之后,速度会下降。
自动生成当前时间
删除主键
自动填充—zerofill
zerofill:不满足4位的前面会用0来自动填充