MySQL数据库
一. 数据库
关系型数据库 mysql(开源) oracle(付费)
非关系型数据库 redis
1.1 数据库的概念
database: 用来组织,存储,管理数据的仓库。
数据库的管理系统: DBMS
实现对数据的有效值,关系和存取的系统软件。
1.2 关系型数据库
mysql(开源)
oracle(付费)
sql-server(没人用,windows研发)
postgresql(大象数据库)
influsdb(开源的时序数据库)
核心是一张表格,数据存储在表格当中
表有行和列:
- 列:列又叫字段,描述对象的属性
- 行:描述对象的信息。
数据是保存在表里面的,关系型数据库的表于表之间是有关联的,数据之间也是有关联的。
关系型数据库可以有多个库,库里面保存的是表,表里面有数据。但是,每个库是独立的。
数据库当中,多张表存储在库中,通过表与表之间的字段进行关联。
1.3 非关系型数据库
有库,库里面保存的是键值对 key------>value的形式进行保存
关系型数据库:并发量很低,一旦访问大量集中,数据库会很快崩溃
redis---->用户第一次访问数据---->redis上生成一个缓存的键值对----->访问缓存键值对
非关系数据库,可以高并发读写,对海量依旧可以保持高效的存储和访问。而且也实现高可用的架构
-
es elasttic search 索引型非关系数据库
-
redis 缓存型非关系数据库
-
prometheus 时序性的非关系数据
-
monggoDB 文档型非关系数据库
#mysql数据库的数据类型,这也是所有关系型数据库的数据类型
int(n):数据类型是整数, n,表示数据的长度显示,如int(4)
char():都是保存字符串类型的数据,保存固定长度的字符
varchar():都是保存字符串类型的数据,保存可变长度的字符
1、char的字段,无论是否有值,char都会占据4个字节(硬盘空间)
2、varchar是按照实际的字符长度进行记录,但是在结尾会多加一个字符,多一个字节
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:存储图盘或者是多媒体的文件
二. 数据库的存储引擎和事务
msygl: innoDB 支持事务,支持行级锁定,支持外键的存储引擎。
事务由四个特性组成:
- 原子性:事务是整个数据库工作的最小单位,不可分割的,要么全部执行成功,要么全部失败。
所有的已成功的都会被失败。 - 一致性:事务执行前后,数据完整性约束是不能被破坏的,满足所有条件约束的情况下,事务才能被提交。
- 隔离性:事务之间的执行是隔离的,一个事务的执行不能受到其他事务的干扰。
- 数据的持久性:事务一旦被提交,将永久性的保存到数据库中,保证数据不会丢失。
事务:插入数据,更新数据,删除数据。
2.1 数据库的管理
管理数据库的语法:sql语句
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
三. sql语句的规范
- sql语句不区分大小写,但是建议用大写
sql可以是单行也可以是多行,默认是以“;”结尾。
如果是多行表示一个sql语句,关键词必须要在一行。 - 库名,表名,列名和行的值,是严格区分大小写的。
- 命名规则:表,库,都必须以字母为开头,不要使用sql的保留字段,table select show database,表名和库名尽量不要使用特殊字符
3.1 sql语句的分类
- DDL:数据库定义语言,创建数据库,表示,索引等等的语句
create 创建
drop 删除
ALTER 修改---->只能对表修改
- DML:数据库操作语言,对表里面的数据进行管理
select 查
update 更新数据
insert 差输入
delete 删除数据
- DQL:查询语句,查询数据表中的符合条件的数据
select
- DCL:数据库控制语言,对数据库用户的权限进行控制
GRANT 赋权
REVOKE 取消权限
- TCL:事务控制语句
commit 提交
rollback 回滚
savepoin 保存点,用来回滚的
null和空值
null就是什么都没有,什么都不存在
空值:也是有数据,也是值
四. 创建数据库与表(navicat软件操作)
create database jx233;
#创建数据库
#创建表
create table jx244 (
id int not null,
#声明表中字段的名称和字段的类型,not null表示一定要写入数据
name char(10) not null,
#字段的名称是name,长度是10个字符,值一定有
address varchar(48) DEFAULT'地址不详',
#DEFAULT默认的给这一列的数据生成一个值,不写入数据,默认就是地址不详
score FLOAT(3,1)
);
select * from jx244;
#select 查
#*:所有列
#from 表名
desc jx244;
key:键 主键或者外键
default:表示如果插入数据时,没有写数据,自动添加字段
extra:提供附加的信息,自增长等等,自动加入时间
drop table jx244;
#删除表
drop database jx233;
#删除库
4.1 insert插入数据
insert into 表名 (字段1,字段2,字段3,...) values(字段1的值,字段2的只值,...)
insert into jx244(id,name,address,score)values(1,'jx',' ',99);
insert into jx244(id,name,address,score)values(2,'xj',null,99);
jx244(id,name,address,score)values(3,'第三',DEFAULT,97);
4.2 update 更新表的数据
update jx244 set score=100 where name='xj';
#修改jx244的表的数据,scocre=90,where条件进行定位
update jx244 set name='第一' where id =1;
4.3 delete 删除表中的数据行
delete from jx244 where name='第三';
delete from jx244 where name='';
4.4 select查询语句的进阶用法
select * from xy103 limit 3,5;
#查看4到6行
select distinct 列名 from jx244;
#distinct去重查询
#模糊查询
select * from jx244 where address like '%4%';
select * from jx244 where address like '4%';#表示以什么结尾
select * from jx244 where address like '%4';#表示以什么为开头
4.5 对表结构进行修改
1、修改表名:
Alter table xy103 rename jx104;
2、增加字段:
Alter table jx244 add birday date not null;
3、修改字段的类型:
alter table jx104 modify column birday varchar(20);
4、修改列的名称:
alter table jx104 change birday birtehday char(20);
5、删除字段
alter table jx104 drop birtehday;
create table if not exists jx105 (
#if not exists,只有当前的库中,没有xy105这张表才会进行创建
id int(4) primary key not_increment,
#auto_increment;该字段的價会自增长,必须是唯一的。主键或者是唯一约束
name char(20) not null
);
4.6 mysql当中的六个约束
- 主键约束:
primary key
,用于标识表中的每一行,主键的字段的值必须是唯一的,且不能为空,而且一个表只能有一个主键
alter table xy106 drop PRIMARY key;
#删除主键
- 外键约束:
foreign key
,用来建立表于表之间的关系。-张表的外键和另一张表的主键的值要
匹配,保证数据的引用完整性 - 非空约束:
not null
,插入或者是更新的操作这个字段必要有值 - 唯一性约束:
unique key
,类似于主键的唯一性,但是一个表可以有多唯一性约束 - 默认值约束:
default
- 自增约束:
auto_increment
,一般都是和主键一起使用,唯一性和数据类型都有要求
4.7 多表联合查询
多表联合查询时,表与表之间的关联不要超过3张表,超过之后速度会下降。
五. 练习
创建一个jx404表格
create table jx404 (
id int not null,
name char(10) not null,
address varchar(48) DEFAULT'地址不详',
score FLOAT(3,1)
);
select * from jx404;
1、只看前2行
select * from jx404 limit 2;
2、查询2-4行
select * from jx404 limit 1,3;
3、根据name和score进行去重查询
select distinct name,score from jx404;
4、查看表的结构
desc jx404;
5、修改name列的数据类型,更改为varchar(15)
alter table jx404 modify column name varchar(15);
6、添加新的colunm,名字为birth 类型为date
alter table jx404 add birth date;
7、birth为当前时间,自动生成。
insert into jx404 values(7,'日期',DEFAULT,7,now());
8、修改birth列的名称,改为birthday。类型为char(15).
alter table jx404 change birth birthday char(15);