一、 三范式
1: 原子性: 字段不可再分,必须有主键,列不可分,无重复性
例如: userInfo: '山东省烟台市 1318162008' 依照第一范式必须拆分成 userInfo: '山东省烟台市' 和 userTel: '1318162008'两个字段
2: 依赖性: 消除部分依赖,字段完全依赖主键
例如:订单表只能描述订单相关的信息,所以所有的字段都必须与订单ID相关。产品表只能描述产品相关的信息,所以所有的字段都必须与产品ID相关。因此在同一张表中不能同时出现订单信息与产品信息。
3: 传递性; 消除传递依赖
例如:订单表中需要有客户相关信息,在分离出客户表之后,订单表中只需要有一个用户ID即可,而不能有其他的客户信息,因为其他的用户信息是直接关联于用户ID,而不是关联于订单ID。
第二范式与第三范式的本质区别:在于有没有分出两张表。
必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。
第二范式是说一张表中包含了多种不同实体的属性,那么必须要分成多张表,第三范式是要求已经分好了多张表的话,一张表中只能有另一张标的ID,而不能有其他任何信息,(其他任何信息,一律用主键在另一张表中查询)。
4:数据库中的五大约束包括:
1.主键约束(Primay Key Coustraint) 唯一性,非空性;
2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;
3.默认约束 (Default Counstraint) 该数据的默认值;
4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;
5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。
二、事务特性
1:原子性: 事务中所有数据的修改,要么全部执行,要么全部不执行
2:一致性: 事务完成时,要使所有的数据都保持一致的状态,换言之,通过事务进行的所有数
据修改,必须在所有相关的表中得到反映
3:隔离性: 事务应该在另一事务对数据的修改前或修改后进行访问,防止脏读和幻读。
4:持久性: 保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢失数据。
三、增删改查
1. 管理员登录
*. sqlplus sys/密码 as sysdba
*. sqlplus / as sysdba
2. 解锁
alter user scott account unlock;
3. 修改密码
alter user scott identified by 新密码;
4. 基本查询函数
- between ...and 在两个值之间
- in (set) 等于两值中的一个
- like 模糊查询
- is null 叛断空值
- order by 排序 : asc(升序)desc(降序)
- lower ,upper 大小写控制函数(查询到的值变为大小写)
- concat('hello','world') helloword
- substr (‘helloworld’,1,5) hello
- length ('helloworld') 10
- instr ('helloworld',w) 6
- lpad (id,5,'*') ****1
- rpad (id,5,'*') 1****
- trim ('h' from 'hellorold) elloworld
- replace ('abcd' ,'b','m') amcd
- 数字函数:
round 四舍五入
trunc 截断
mod 求余- 日期函数: 描述:
months_between 两个日期相差的月数
add_months 向指定日期中加上若干月数
next_day 指定日期的下一个日期
last_day 本月最后的一天
round 日期四舍五入
trunc 日期截断- 转换函数
to_date
to_char
to_number- group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)
- having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数;
5. 基本插入更新删除
insert into tablename(column) values (values);
update city set name='曼谷1’ where country='泰国'; 如果没有where则所有的name都改变了
delete from city where cid=9; 如果没有where条件那么表中所有数据都被删除
6. 事务提交和回滚
commit rollback
保存回滚点:savapoint name .回滚到回滚点:rollback to name;
四、数据库表结构操作
1、创建一个含有约束的表
- create table userInfo (
- id number(6),
- name varchar2(20),
- age number(3) default 18,
- birthday date,
- address varchar2(50),
- email varchar2(25),
- deptno number(2),
- constraint id_pk primary key (id),--也可以两个以上,联合主键
- constraint dept_deptno_ref foreign key (deptno) references dept(deptno),
- constraint emial_name_uqe unique (email, name)
- );
2、给表添加约束
- alter table userInfo add(msn varchar2(20));
- alter table userInfo modify(msn varchar2(25));
- alter table userInfo drop(msn);
- alter table userInfo drop constraint id_pk;
- alter table userInfo add constraint id_pk primary key (id);
3、不带约束名称
- create table userInfo (
- id number(6) primary key,--主键
- name varchar2(20) not null,--非空
- age number(3) default 18,
- birthday date,
- address varchar2(50),
- email varchar2(25) unique,--唯一
- deptno number(2) references dept(deptno)—外键
- );
- --复合外键
- create table emp0(id number ,name varchar(8) ,constraint fk_nam1e foreign key(id,name) references emp9(id,name1));
- --主键另外写法
- create table emp2(id number,name varchar(8),id1 number, constraint pk_id primary key(id), constraint fk_name foreign key(id1) references emp(id))
- --check 约束的写法
- create table emp4(id number check(id in(1,2 ,3)),name varchar(8));
ALTER TABLE INFOS ADD CONSTRAINT CK_INFOS_SEAT CHECK(SEAT >=0 AND SEAT <=50)