数据库的诞生
在数据库诞生之前,数据存储和数据管理已经存在了相当长的时间。当时数据管理主要是通过表格、卡片等方式进行,效率低下,需要大量人员参与,极易出错。
20世纪50年代,随着计算机的诞生和成熟,计算机开始运用于数据管理,与此同时,数据管理技术也迅速发展。传统的文件系统难以应对数据增长的挑战,也无法满足多用户共享数据和快速检索数据的需求。
在这样的背景下,20世纪60年代,数据库应运而生。在数据库技术领域,数据库所使用的典型数据模型主要有层次数据模型(Hierarchical Data Model)、网状数据模型(Network Data Model)和关系数据模型(Relational Data Model)。这三种模型是按照它们的数据结构来命名的,它们之间的根本区别就在于数据之间联系的表达方式不同。
再后来,由于互联网技术的发展,,数据规模爆炸式增长,单机数据库越来越难以满足用户需求,,解决这种问题的一个直观方法就是增加机器的数量,把数据库同时部署在多台机器上,分布式数据库就这样应运而生了。
为了使数据更加方便的被使用,降低使用成本,减少人员,配置等的重复利用,云数据库应运而生。云数据库即是数据库部署和虚拟化在云计算环境下,通过计算机网络提供数据管理服务的数据,云数据库将传统的数据库系统配置在“云上”,有专门的云服务提供商进行这些“云上”数据库系统的管理和部署工作,用户只需要通过付费的方式就能获取数据库服务。不同于传统数据库,云数据库通过计算存储分离、存储在线扩容、计算弹性伸缩来提升数据库的可用性和可靠性。 单机化存储明显比云存储更加安全。
数据库有两种类型:
1.关系型数据库 2.非关系型数据库。 关系型数据库一般像excel表格保存数据,而非关系型数据用键值对的形式保存。
MySQL是大家常用的的工具,用于处理和保存大量数据,以轻量,速度快和开放源码著称是一种关系型数据库。但有人认为其中重要的功能是实现了前后端分离。学习数据库是学习后端的必要途径。还有一些其他常用的一些数据库管理系统(MySQL、Oracle、DB2、SqlServer) 学习MySQL应主要学习sql sql是一种结构化查询语句,用于更新,管理,修改数据库。大多数数据管理系统都建立在sql上,是各种数据库交互的基础。
一。SQL指令:
DDL:数据定义指令,数据定义语言:(用来完成数据库的创建,删除和修改表结构等)
create DQL:数据查询语言(对数据库中的表进行查询)
select DML:数据操作语言(对表中的数据进行增删改等操作)
insert TPL:事务控制语言(拥有管理数据库中的事务)
DCL:数据控制语言(定义数据库的访问权限,安全级别等)
二.sql写法规则: 每条语句结束必须都有分号结束 sql不区分大小写 ’-- ‘,#是单行注释 /* */是多行注释。
注意事项 MySQL在创建之后会自动创建4个库,不能随便修改。 1.information_schema:是虚拟库,不占用系统空间,存储数据库启动之后的参数 2.mysql:存储用户权限的系统 3.performa_schema:用于收集数据库服务参数等 4.sys:用于开发者查询性能问题的库
四。sql语句
对数据库进行操作
1. create database 库名 charset=编码格式 (创建数据库)
2. show databases(查询所有数据库)
3. show create databa 库名:(查询指定数据库)
4. alert database 库名 character set 编码 (改变编码格式)
5. use 库名 (切换数据库)
6. select database (查看当前数据库)
7. drop database 库名(删除指定数据库)
五数据类型:
(1)字符串类型:
- 1.char(n):最大可存255个字符,长度固定,n为显示的字符
- 2.varchar():最大可储存65535个字符,长度可变。
- char查询效率高。varchar长度可变,节省磁盘资源
- enum:在指定的数据中选择一个数据(单选)
- set:在指定的数据中选择一个或多个数据(多选)
(2)数值类型
- tinyint 整数(1字节)
- smallint 整数类型(2字节)
- mediumint 整数类型(3字节)
- int 整数(4字节)
- bigint(8字节)
- float(m,d)单精浮点数,保存小数点后面有6到7位(m表示数据总长度,保留的小数位)
- double(m,d)双精度点数,保留小数点后15位 浮点数保存时存在精度丢失。
(3)时间类型:
- year(年)
- time(时分秒)
- date(年月日)
- datetime()这个也是时间类型,表示什么记不清了 写入时间必须用引号
表: 表是在库文件之下的,类似于excel表格的一种文件。
- 表的创建 creat table 表名(字段名多个字段名用逗号分开)
- 写入文件 insert into 表名 values(插入内容,每个字段的内容用逗号分离)当插入多个内容时每个内容用括号括起来,并且用逗号进行分离。
- replace into 跟 insert into功能类似,不同点在于:replace into 首先尝试插入数据到表中,
1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据;
1. 否则,直接插入新数据。
- 修改字段名 alter table 表名 change 旧的字段名 新的字段名 数据类型
- 添加字段名 alert table 表名 add 字段名 数据类型 after
- 修改表名 alert table 旧的表名 rename 新的表名
- 修改字段类型alter table 表名 modify column 字段名 类型
- 删除字段名 alter table 表名 drop column 字段名
- 删除表 drop table 表名
- 清除表数据 delete from 表名
- truncate table 在功能上,与不带where字句的delete语句相同;二者均删除表中的全部行,但truncate table 比delete速度更快,且使用的系统和事务日志资源少。 truncate 删除表中的所有行,但表的结构及其列,约束,索引等保持不变。新行标识所用的技术值重置为该列的种子。如果想保留标识计数值,轻盖拥delete 。如果要删除表定义及其数据,请使用drop table 语句。
- 查看库下的表 show tables
- 查看表结构 desc(降序)表名,ASC(升序)表名
- 表结构 查看创建表的语句 show create 表名
- 查看全部据 select *from 表名
- 查看某个字段的数据 select(字段名) from 表名
- 利用where方法查询方法 select *from 表名 where 限制条件
约束条件在创建表栏时使用
- not null 该栏下的数据不能为空’
- unique 在该栏中数据不能重复
- primary key 该栏下数据不能为空,且不能重复
- auto_increment 该栏必须有约束条件(该栏下数据不能为空),数据类型为整形,在不插入的条 下自动向该栏中加数据,数字默认为上一个数据加上一个数值,该值默认为1.
- fulltext全文索引。
函数:
自带函数
- avg()求平均
- sum()求合计
- max()求最大
- min()求最小
- rank() over 它是跳跃的、间断的排名
- rank_number() over 对于每个唯一的行集,将重新开始行号
- dense_rank() over 排序数字是连续的、不间断。当有相同的分数时,它们的排名结果是并列
- left(name,4)截取左边的4个字符的
- right(name,4)截取左边的4个字符
- stbstring(name,5,3) 截取name这个字段 从第五个字符开始 只截取之后的3个字符
- substring_index('www.baidu.com', '.', 2) 截取第二个 '.' 之前的所有字符
- substr(name, 1, CHAR_LENGTH(name)-3) 截取name字段,取除name字段后三位的所有字符
- timestampdiff(时间单位,开始时间,结束时间)
- date_add(时间,interval 增加的时间)
- group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
- concat(字符串1, 字符串2,...) 字符串参数用逗号隔开!
- concat_ws()函数 和 concat()函数一样,也是将多个字符串连接成一个字符串,但是可以指定分隔符!
返回值: 结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
自定义函数
注意: 中括号是可选的
自定义函数格式
- delimiter 结束符
- create func 函数名(传入的数据) returns 数据类型
- begin
- return 返回的数据
- end 结束符
- deliniter
- select 函数()(使用函数)
储存器格式
- delimiter 结束符
- create procedure 存储名(['in','out'] 参数)
- begin
- 存储方式
- end 结束符
- delimiter
参数说明
- in 传入参数
- out 传出参数
- call 存储器(使用存储器)
触发器
- delimiter 结束符
- create trigger 触发器名 【after,before】 insert on 表名 for each ROW
- begin
- declare num int(声明一个变量,declare只能用在触发器中);
- 触发行动
- end 结束符
- delimiter
索引
- 主键索引
- 唯一索引
- 普通索引
- 当读的操作大于写的操作时建立索引可以提高效率,反过来不建议使用索引。
- 索引的操作
- index 普通索引
- unique index唯一索引
- primary key 主键索引
- fulltext 全文索引
- 在创建表时在被当作索引的栏加上以上关键字。在表名之前,主键索引在后。,将栏目改成索引栏目,在没有索引的表中加入索引用create index 索引 类型 on 表名(以哪一个字段);
-
索引的添加 - alter table table 表名 add 索引类型 索引名(索引列表) - 在创建表时加入索引的关键字 -
索引的删除 - drop index 索引名 on 表名 - alter table 表名 drop index 索引名
事务
- 四大好处
- 原子性,持久性,隔离性,一致性。
- 关键字
- beigin数据的开始
- rollback事务的回滚
- commit事务的提交
- 隔离级别
- read uncommitted(读取未提交的数据)
- read committed(读取已提交的数据 )
- repeatable read(提交的数据读不到,但可以重复读取,会导致幻想读)
- serializable(排队读取)
- 存储引擎
- InnoDB(MySQL默认的存储引擎,读和写较为平衡)