DDL,DML

三大范式:

第一范式:如大小不能作为属性,因为大小有长宽高三个方面,不是单值的; 第二范式:所有属性必须依赖于主键,否则另外的那些属性可以拆分作为另外的一张表;
第三范式:所有的非主属性之间不依赖于任何一个其他属性,仅仅单一的地只依赖与主键,如成绩除了关联学号,还依赖于具体学科;这样就不符合第三范式;
三大范式

DDL语句:

1: 建立数据库

CREATE DATABASE student
ON PRIMARY 
(
    NAME = student,
    FILENAME = 'D:\Data\student.mdf',
    SIZE = 4MB,
    MAXSIZE = 6MB,
    FILEGROWTH = 20%
)

2: 定义表

CREATE TABAL Stu
(
    Sno CHAR(5) PRIMARY KEY,
    Sname VARCHAR(20) UNIQUE,
    Sex CHAR(1) NOT NULL,
    Sdept VARCHAR(15),
    Smon CHAR(5),
    SBirthday SMALLDATIME
)

约束

非空约束/not null字段约束

create table stu_uu(
 // 默认值,自己命名的非空约束
id number(5) default 1 constraint nul_1 not null,
name varchar2(30) constraint nul_2 not null,
// 可省constraint xxx,即可省略约束命名,系统自动命名
score number(5,2) not null 
remark varchar2(30)
)
// 注意not null约束不允许用于表约束中,如:
// constraint nul_3 not null(remark) 是错误的;

主键约束

create table stu_uu(
id number(5) constraint nul_1 not null constraint pk_id primary key, // 默认值,自己命名的非空约束
name varchar2(30) constraint nul_2 not null,
// 可省constraint xxx,即可省略约束命名,系统自动命名
score number(5,2) not null 
remark varchar2(30)
)

/*
 constraint pk_id primary key(id) 若是使用表级约束进行
定义主键,则主键约束名不可省略,列级中的主键约束的约束名可省略
*/

外键约束

create table score_uu
(
id number(5) not null primary key,
score float default 0 not null
)

create table stu_uu
(
    id number(5) not null primary key,
    name varchar2(30) not null,
    score_id number(5) not null constraint pk_fk_001 
        references score_uu(id) // 列级约束
// constraint pk_fk_001 foreign key (score_id)  //references score_uu(id)  on delete cascade//表级约束
)

注:
外键约束时加上:
on delete cascade - 表示删除主表的记录时,其对应的关联表记录也会被删除,删除关联表则删除不了,报错违反一致性约束
on delete set null - 表示删除主表的记录时,其对应的关联表记录也会被删除,删除关联表时关联表的记录能够删除,记录中主表对应的外键这时值自动改为NULL值;

唯一约束

CHECK约束

create table str_uu
(
    id integer not null primary key,
    name varchar2(30) not null check (length(name) <= 10)
)   

注:对于列级约束的约束名都可以省略,用系统自动的命名也行,但是对于表级约束则不能省略约束名;
其中,非空约束是不能作为表级约束的,其它约束都可以作为表级约束或列级约束;
check约束的规则:

Expressions not allowed
1 References to pseudocolumns CURRVAL, NEXTVAL, LEVEL, or ROWNUM
2 Calls to SYSDATE, UID, USER, or USERENV functions
3 Queries that refer to other values in other rows

注意创建表时使用以下这种方式:

Create a table containing all employees in department number 41 in the S_EMP table.
CREATE TABLE   emp_41
AS 
SELECT    id, last_name, userid, start_date
FROM      s_emp
WHERE    dept_id = 41; 

数据会被正常拷贝,但是:
Do not forget that only the NOT NULL constraint is copied.其它的约束全部丢失;

DML语句

1. insert

insert into 表名(字段1,字段2,....) values(值1,值2,....);
insert into 表名 values(值1,值2,....);--必须是全部字段

2.update

update 表名 set 字段1=值1/表达式,字段2=值2,.... [where 条件] 
// 不带where子句时,会出现全部记录被修改的情况
        update s_emp set salary = salary+50;

3.delete

// 删除记录,与删除表的drop指令区分

delete from 表名 [where ...] 
// 不带上where条件的会删除所有记录

4.alter

ALTER TABLE <表名>
[ADD <新列名> <数据类型> [完整性约束]]
[DROP <完整性约束>]
[MODIFY <列名> <数据类型>]

举例:

ALTER TABLE Stu ADD Scome DATETIME;
ALTER TABLE SC DROP SCORE_CHK;
ALTER TABLE Stu MODIFY COLUMN Sname VARCHAR(28);

删除基本表

DROP TABLE Stu

建立索引

create index idx_test
    on stu_uu( name, birth );

// SC表按照学好升序,课程号降序建唯一索引
create UNIQUE INDEX SCno ON SC
    (Sno ASC, Cno DESC);

删除索引

DROP INDEX 数据表名.索引名;

l Automatically(自动索引)
A unique index is created automatically when you define a PRIMARY KEY or UNIQUE constraint in a table definition.
ll Manually(自定义索引)
Users can create non-unique indexes on columns to speed up access time to the rows.

提倡使用索引的原因:
1 Used by the Oracle Server to speed up the retrieval of rows by using a pointer
2 Reduces disk I/O by using rapid path access method to locate the data quickly
3 Automatically used and maintained by the Oracle Server, and no interaction is required from the user.

视图

视图view(“管中窥豹”,类似一个表中的小窗口,对数据库的限制访问)
1 Restrict database access
2 Simplify queries
3 Data independence(数据独立无关)
4 Different appearances for the same data

创建视图

create view 视图名
(字段名)   
as
select子查询
[with check 选项]
[with read only]
// 这里的as后的select子查询不能使用order by

例子:

create view vw_test001 as 
select id, firsr_name, salary+nvl(commissiom_pct,0) as sal 
// 对于视图中的表达式作为列名必须用as其别名
from s_emp;

或者方式二:

create or replace view vw_test001(id,name,sal)
as
select id,first_name,salary+nvl(commission_pct,0) from s_emp;

3.2.使用视图
与表的使用一样;
select * from vw_test001; // 一个视图可以看作一张表

3.3.视图的作用:
通过视图可以对同一张表进行不同角度的查询。
3.4.视图的本质:
查询模版
3.5.删除视图

DROP VIEW viewname;  

注意:

1: 视图中不能使用order by,但视图创建好后,使用时可以使用order by;
2: 索引能提高查询速度。但假如不必要的索引会影响插入删除等的性能问题;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值