持久化方法:
方法 |
优点 |
缺点 |
其他 |
java序列化 |
|
没有事物功能;所有类有唯一的1个版本序列号,不同对象不同; |
|
Extensible Markup Language(xml) |
|
没有事物功能;搜索能力差; |
|
数据库 |
|
|
|
数据库发展过程
层次模型 |
|
网状模型 |
|
关系模型 |
|
对象模型 |
数据和数据的方法一起存储。db4o |
基本术语:
实体——why——table——具有区分其他事物的属性并与其他实体有联系的事物
属性——column——描述数据(属性名称,数据类型)
关系——————
主键——业务主键(有业务含义)+逻辑主键(自动生成的)
外键——主表的外键来自从表的主键。
事物功能——对于对象,要么全部保存,要么全部不保存——在操作中,当操作整体完成后,才一起保存每步作的修改。
一个业务系统必须有对立的数据库
索引——在查询大量数据时,能够提高查询效率——索引提高select语句的速度,降低delete、update、insert语句执行速度——一个表可以有多个索引,一个索引作用于多个列。——主键/唯一约束自动创建的索引依附与约束。
数据库里的数据类型
字符串:
char——定长——char最大长度为8KB.——查询效率高
varchar(x)——变长——没有初始长度——节约空间
数字:
int 4——整数;
decimal(p,s) 2~17——小数(进1法)
p——值的总位数,默认为18。s——小数点后的位数,默认为0。
布尔:
日期:
datetime 8 getdate()
表之间的关系类型——关系是双向的
关系类型 |
图例 |
概念 |
实例 |
一对一 |
实线 |
主表的一行与子表中0或1行相关 |
居民与身份证 |
一对多 |
虚线+箭头——将父类的主键,作为子类的外键。 |
|
父亲与儿子 |
多对多 |
复合主键+自动编号——增加第3张表——中间表、关系表 |
|
|
约束(constraint)——检查录入数据正确否
数据完整性=可靠性+准确性=实体完整性(unique)+域完整性+引用完整性(foreign key)+自定义完整性
NOT NULL |
不允许为空 |
Name varchar(10) not null |
DEFAULT |
默认值通过方法、系统变量获得 |
phoneNo varchar(10) default '不知电话'——字符串用单引号 |
UNIQUE |
给定列的所有值唯一;允许为空;可以有多个唯一约束 |
phoneNo varchar(10) unique |
PRIMARY KEY() |
不能为空;主键约束和其唯一的索引同时存在; |
phoneNo varchar(10), constraint MyPrimaryKey——指明约束的名字 primary key(Name) |
CHECK() |
数据变更时起作用;单列可有多个该约束; |
age int,constraint checkAge check(age between 10 and 100) |
IDENTITY(m,n) |
@@IDENTITY——得到当前记录的编号值;从m开始,每次自动+n,默认m=m=1; |
Friend_id int identity |
FOREIGN KEY() references() |
该约束连接的2个列是相同的数据类型;要删除被引用的表,先去掉引用关系。 |
PhoneNo varchar(10) ,foreign key(friendID) references Friend(friendID) |
操作关系型数据库和数据的3种语言
数据定义语言(DDL)——创建/删除数据库/表/索引、修改表(alter)、重命名表
create/drop database 名称;
create table 表名( 列名 数据类型 约束 );create table 工资表(自动编号 int identity primary key,学号 int,工资 decimal(10,2),日期 datetime);
*表的第3字段来自其它字段的组合(数据类型一样)——create table zz(a int,b int,c as a+b)
*临时表(#)#——当前连接临时表;##——全局临时表。
alter 对象对象名命令语句
alter table t_student add s_age int;——增加
alter table t_student alter column s_id int not null;——修改
alter table t_student drop constraint fk_stu_cla;——删除
alter table t_class add constraint pk_cla primary key(c_id);
truncate table 表名
create index idx_stu_age on 学生(年龄);
drop index idx_stu_age
*表的完整路径写法——数据库名.dbo 表名==数据库名.. 表名
数据操作语言(DML)——插入、更改、删除、查询
insert into 表名(字段名) values(数值)insert into 学生(学号,班级编号,姓名) values (1,101,'a');
update 表名 set KV对 where 条件update 学生表 set 分数=70 where 学号=100;
delete from 表名 where 条件delete from 班级 where 班号=100;
Drop |
内容和结构同时删除;不可回滚;该表的存储过程/函数将保留,但变为invalid. |
Delete |
选择性删除内容(引用完整性);可回滚; |
truncate |
只无差别删除内容,留结构等;不可回滚,无触发——物理删除; |
速度,一般来说: drop>; truncate >; delete
select * from 表名 select xs.学号,姓名,工资 from 学生表 xs,工资表 gz where xs.学号=gz.学号——将表在内存中合并为一个显示学号、姓名、工资的新表。
事物控制语言(tcl)
begin transaction——开启事物
1.commit:确认数据库的修改——以成功的方式结束当前事务
2.rollback:回滚让数据回到事务开始之前的位置
3.savepoint segement trigger——设置保存点,清除数据库修改的部分记录。
一个业务开始
事务开始
操作1 A帐户修改-500
操作2 B帐户修改+500
事务开始
一个业务结束
数据控制语言(DCL)——访问权限(grant<——>revoke)
1.grant——权限授予。
2.revoke——权限回收