阿音 Java笔记虾
在实际开发中最为常见的设计范式有三个:
第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式;
第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中;
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
大家可以在脑海中脑补一下这些步骤对应的代码,估计框架用习惯了,都有点忘记了吧
test1表中有ABC三列,用SQL语句实现:当A列大于B列时,选择A列否则选择B列,当B列大于C列时选择B列否则选择C列。
select
(CASE WHEN A>B THEN A ELSE B END) as A,
(CASE WHEN B>C THEN B ELSE C END) as B
from test1
使用预编译对象PreparedStatement
#内连接
select * from student s,classes c where s.c_id = c.id
select * from student s INNER JOIN classes c on s.c_id = c.id
#外连接
#左外连接
select * from student s LEFT JOIN classes c on s.c_id = c.id
#右外连接
select * from student s RIGHT JOIN classes c on s.c_id = c.id
举例:
客户A和客户B的银行账户金额都是10000元人民币,客户A需要把自己帐户中的5000元人民币转到客户B的账户上。
这个过程看似简单,实际上涉及了一系列的数据库操作,可以简单地视为两步基本操作,即从客户A帐户的金额中扣除5000元人民币,以及将客户B帐户中金额添加5000元人民币。
假设第1步数据库操作成功,而第二步失败的话,将导致整个操作失败,并且客户A帐户金额将被扣除5000元人民币。
事务机制可以避免此类情况,以保证整个操作的完成,如果某步操作出错,之前所作的数据库操作将全部失效。
原子性(ATOMICITY):
事务是数据库的逻辑工作单位,事务中包含的各操作要么都完成,要么都不完成
一致性(CONSISTENCY):
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。
如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
隔离性(ISOLATION):
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(DURABILITY):
指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快