一、JAVA模拟数据库和数据库
JAVA中的模拟数据库:
文件存储方式保存数据的弊端:
1、缺乏对数据的整体管理,数据不便修改。
2、不利于数据分析和共享。
3、数据量急剧增长,大量数据不可能长期保存在文件中。
数据库
存储数据
本质:软件,将数据存储到特定格式的文件中,类似excel表格(表头,内容,一行数据代表一条)
数据类型
列: 字段 field 属性
行:一条数据
二、数据库
1.数据库基本知识
关系型数据库: 版本
Oracle -甲骨文 11g
MySQL -甲骨文 5.5 5.7
SqlServer -微软
DB2 -IBM - eclipse
…
关系数据库简介
本质:描述两个元素间的关联或对应关系,使用关系模型把数据组织到二维数据表(Table)中。
表的概念:
一个关系数据库由多个数据表(Table)组成,数据表是关系数据库的基本存储结构。
表是二维的,由行和列组成。
表的行(Row)是横排数据,也被称作记录(Record)。
表的列(Column)是纵列数据,也被称作字段(Field)。
表和表之间存在关联关系。
非关系型数据库:NoSQL
SQLDeveloper - Oracle官方提供可视化连接工具 - 底层 :sqlplus
Navicat - 第三方可视化连接工具
可视化设计表 --DDL
可视化管理数据 - DML
导出SQL语句
MySQL连接时:
SID:orcl-连接Oracle数据库使用的唯一标识-默认值orcl
port:1521 - Oracle默认端口号
2.数据库语句
SQL语句:99标准
DDL:数据定义语言 - 表
create drop truncate rename alter
DML:数据操纵语言 - 数据
insert updata delete
DCL:数据控制语言 - 数据库的用户以及权限 - 不讲
create User、grant
TCL:事务控制语言 - 操作事务
commit rollback savepoint
Navicat 中不支持TCL
DQL:属于DML,不属于99标准
数据查询语言
DDL 创建语句
--创建表
create table user_zld(
--字段 类型
id number(6),
name varchar(20),
className varchar(20),
score number(5,1),
birthday date
);
--删表 --不可逆
drop table user_zld;
--删除字段
alter table user_zld drop (score);
--修改字段类型,不能修改字段名
alter table student.user_zld MODIFY(
className VARCHAR2(10) not null --不能为空
);
--修改表结构
--添加字段
--表中少字段 出生日期
alter table user_zld ADD(
birthday date
);
--修改表的名字
rename user_zld to user_ZZZ;
--表别名
--别名:可以给字段加别名
-- 只能在orderby使用
-- 也可以在给表明加别名
Select a.score from user as a;--AS 可以省略用空格代替
--truncate 删除表中所有数据 - 不可逆
truncate table user_ZZZ;
DML数据操纵语言
DML:数据操纵语言
insert into user_zld values
(1,'rose','java1906',92.3,sysdate);--值的个数和顺序必须按照表中定义
--即使设置默认值,也不能主动添加null
--insert into user_zld values
--(1,'rose',null,92.3,sysdate);
--设置classname字段默认值是'java1906'
alter table user_zld MODIFY
(className VARCHAR2(20) default 'java1906');--not null
--指定字段添加值
insert into USER_ZLD(NAME,BIRTHDAY,SCORE) values
('lucy',sysdate,99);
--查询制定表中所有数据
SELECT
*
FROM user_zld;
--修改指定表中数据
--案例:修改班级为java1907
UPDATE user_zld set className = 'java1907';
--筛选:where 条件
update user_zld set className = 'java1906'
where name = 'lucy';
--删除指定表中所有数据,
delete from user_zld
where score = 99;
--多条语句同时修改
update user_zld
set classname = 'java1906',
score = 100;
TCL:事务
事务 TCL COMMIT ROLLBACK SAVEPOINT
概念:业务层面上操作的最小单位,不可分割的
案例:转账业务 - update -100 +100
特点:原子性、一致性、隔离性、持久性
事务的并发问题:脏读、幻读、不可重复读
事务的隔离级别:
读未提交 - 最低,解决不了任何问题
读已提交 - 解决藏独问题
可重复读 - 解决脏读,不可重复读问题
串行化 - 最高级别,解决所有问题,效率低
--TCL事务管理 commit rollback savepoint
--只有DML需要配合TCL来使用,TCL是让DML对于数据的操作生效或者生效
--不同的会话 - 连接 ,都有单独的事务,如果DML后没有进行事务提交,操作是不生效的
/**TCL事务管理 rollback - 回滚 - 只有DML可以回滚
*delete 和 truncate 区别
*truncate属于DDL,不可逆
*delete属于DML,可逆
*Navicat 什么都不可逆,Navicat不支持TCL
**/
--提交事务 -当前会话的DML操作生效
COMMIT;
--回滚事务 - 让当前会话的DML操作撤销 - 从上一次提交后的地方开始撤销
delete from user_zld
where score = 100;
ROLLBACK;
-- 一次事务中,可以执行多次SQL语句
insert INTO user_zld (id) VALUES(2);
insert INTO user_zld (id) VALUES(2);
UPDATE user_zld set score = 90;
--保存一个事务节点,但是事务并没有提交/结束
--事务结束的途径: commit提交、rollback回滚、关闭连接自动提交
SAVEPOINT a;
update user_zld set name = 'rose';
--回滚到指定节点 -一旦提交,该节点消失
rollback to a;