[JavaEE] 数据库基础

一.数据库的目的:

  为了更好的让内存中的数据被保存,一个建立在硬盘的数据集合就被建立起来了:数据库

  数据库的类型有:

          网状结构

          层次结构

          关系结构

          非关系结构

  本文主要记载笔者对关系结构型数据库:MySQL的认知

二.操作语句:

  1.DQL: 数据库的数据查询语言: select , where , group by

  2.DDL: 数据库定义语言: 如 create , drop , alter

  3.DML: 数据库的数据操作语言: 如 delete ,  update , insert

  4.TPL: 数据库的事务操作语言 如:commit , rollback , savepoint等

  5.DCL: 数据库控制语言,主要用于数据库用户的创建,权力的给予等 如: grant revoke

  ps: 笔者认为,数据库主要难度在查询,创建,  查询难度在于多表多要求查询,创建难度在于如何创建一个好的 易查询易维护的表

三.数据库的创建:

  1.库创建语法:

create database db_name ;

  2.表创建语法:

create table tb_name (
  id int primary key auto_increment,
  name varchar(11),
  bornDate date not null      
);

  笔者认为,一个优秀的表应最少满足第三范式,且索引主键外键的建立要有逻辑和条理性,能便于日后的使用以及使用时尽量减少内存对硬盘IO的影响和操作时间

四:数据的操作:

  1.增删改

  

insert into tb_name (column1,column2,column3) values (values1,values2,default);
delete from tb_name where column1 = values1;
update tb_name set column1 = values1 where column2 = values2;

   相对而言增删改比较的简单,这里面唯一可能说难的就是where 后面的条件,但这个就是DQL的语句了 也就是查询语句

  2.查询

  

select * from tb_name;

  这只是个最最最简单的例子,笔者将在有时间的时候对此进行补充,因为笔者也不太行,笔者老菜鸡了,这篇文章只是对笔者自己的学习进行一个框架性的梳理

四:事务:

  1.ACID

    acid 即 原子性,一致性,隔离性,持久性

    原子性: 一个事务要不然全部成功要不然全部失败

    一致性: 数据库的数据在事务的前后应保持数据的一致,不会无逻辑的增添不会无逻辑的减少

    隔离性: 一个事务不应对另一个正在进行的事务进行影响

    持久性: 事务对数据库的影响是永久的

  2.事务的使用语句:

    

start transaction # setAutoCommit = 0
#
#数据操作语言 如:DML
#
commit; #如果成功
rollback; #如果失败, 还可以使用savePoint 标记一个地方,然后rollbackto 指定的地方

五:数据库的其他

  MySQL 索引分类:      索引有一个最左匹配特性,所以我认为需要把特征性最大的数据往左边放,能减少匹配的时间和资源的使用

  数据结构:  

      B+树索引     innodb使用

      Hash索引

      Full-Text全文索引

      R-Tree索引

  物理储存:

      聚集索引   innodb使用

      非聚集索引/辅助索引

  逻辑角度:

      主键

      普通

      多列(复合,联合)

      唯一或非唯一    

      空间 : 4种 geometry , point , linestring , polygon

  innodb 在索引方面与myisam有巨大的区别,不过笔者认为使用B+树和聚集性都是innodb的优势所在

  事务并发操作的四种错误:

    更新丢失: A和B同时对一个数据进行更新,但AB都不知道互相的存在 一个劲的做自己的事情,但是总会有一个更新后的数据被覆盖,这就是丢失了一个更新数据

    脏读 : A读取了B更新后的数据,但是A读取完后B回滚了操作,这样就称为A读取了一个脏数据

    不可重复读 :  A对一个数据进行多次读取的时候,B跑进来对这个数据自己进行了更新也没有通知A,这个时候A读取的数据就会有一个不一致的情况出现

    幻读  : A对同一个表进行多行的读取的时候,B来对这些数据进行了一些插入或者删除操作,这个时候A就会在下一次再读取的时候发现多了或少了些东西,就很魔幻,就对自己产生了疑问 嗯? 我也妹去云南吃蘑菇阿

   事务隔离级别:  从低到高

    read uncommited  啥也不是,乱来都,你读你的 我整我的,你读就读了 我写就写了,错了就错了 rm-rf 快跑

    read commited  能解决脏读 你写完了我再来

    repeatable read  能解决重复读  你整个事务结束了我再来

    serializable       能解决幻读  并行变串行, 好嘛 原来还可以大家一起走,只不过窄路不太行,这下好了 全是窄路,就硬挤,就只能让硬件整上去让事务走的速度变快

posted @ 2020-08-22 15:20  Lzzycola  阅读(154)  评论(0编辑  收藏  举报