ORACLE数据库的数据对象-表、约束、视图、索引、序列

--------------------数据库的数据对象-表、约束、视图、索引、序列 ----------------

----------------表---------------------

ORACLE数据库常见数据类型

VARCHAR2\VARCHAR--表示一个字符串
NUMBER --NUMBER(N)表示一个整数,数字长度为N ,也可以使用INT
       --NUMBER(N,M) 表示一个数,其中小数位数为M 
DATE --表示日期类型,日期要按照标准日期格式存放
CLOB --大对象,表示大文本数据,可存放4G
BLOB --大对象,表示二进制数据,最大可以存放4G,如电影,歌曲


DATE --它可以存储月,年,日,世纪,时,分和秒。DATE 数据类型的问题在于它表示两个事件发生时间间隔的度量粒度是秒
TIMESTAMP --它包括了所有DATE 数据类型的年月日时分秒的信息,而且包括了小数秒的信息。

1.创建表

CREATE TABLE 表名(
字段名1 字段类型[DEFAULT 默认值],
字段名2 字段类型[DEFAULT 默认值],
字段名3 字段类型[DEFAULT 默认值],
... ... ...
字段名N 字段类型[DEFAULT 默认值],
);


CREATE TABLE 表名 AS (子查询)
说明:当子查询不成立时,如1=2,则只复制表的结构,不复制表的数据。


2.删除表

DROP TABLE 表名;

3.修改表的结构

ALTER TABLE 表的名称 ADD(列名称 列的数据类型 DEFAULT 默认值)
--给表增加一列
ALTER TABLE 表的名称 DROP COLUMN 列名称;
--删除表的一列
ALTER TABLE 表的名称 MODIFY(列名称 列的类型 DEFAULT 默认);
--如果是更改数据长度,则要求更改时,长度不能小于当前表中对应列具有的最大长度。
--如果是更改数据类型,则要求该列的所有数据为空。

4.重命名表

RENAME 旧名称 TO 新名称;
注:这是ORACLE特有的操作。
5.截断表
TRUNCATE TABLE 表名;
意义:清空表中的所有数据,并且立即释放资源,该操作不可回滚。

-----------------约束-----------------------------------------------

---主键约束(PRIMARY KEY )

表示一个唯一的标识,本身不能为空,也不能有重复值
主键约束一般在ID上使用,且一张表里只能定义一个主键
1.在表列名后定义主键
CREATE TABLE PERSON( 
   PID VARCHAR2(18)  PRIMARY KEY,
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE,
   SEX VARCHAR(2) DEFAULT '男'
   );--这种方式系统将默认主键的名字
2.用CONSTRAINT定义主键
CREATE TABLE PERSON( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE,
   SEX VARCHAR(2) DEFAULT '男',
   CONSTRAINT PERSON_PID_PK PRIMARY KEY(PID)
   );
3.在定义表时后面直接定义上主键
CREATE TABLE PERSON( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE,
   SEX VARCHAR2(2) DEFAULT '男',
   PRIMARY KEY(PID)
   );--不过这种方式系统将默认主键的名字

---唯一约束(UNIQUE )

表示一个字段的内容不允许重复,一张表里可以定义多个唯一约束
1.
CREATE TABLE PERSON3( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3) UNIQUE,
   BRTIHDATE DATE UNIQUE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL
   );
2.
CREATE  TABLE PERSON3( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL,
   CONSTRAINT PERSON3_PID_UK UNIQUE(PID)
   );
3.
CREATE  TABLE PERSON3( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL,
   UNIQUE(PID)
   );

---检查约束(CHECK )

检查一个列的内容是否合法,也可以给多个列同时定义检查约束
1.
CREATE  TABLE PERSON4( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3) CHECK(AGE BETWEEN 1 AND 150),
   BRTIHDATE DATE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL
   );
2.
CREATE  TABLE PERSON4( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3) CHECK(AGE BETWEEN 1 AND 150),
   BRTIHDATE DATE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL
   CONSTRAINT PRESSON_SEX_CK CHECK(SEX IN('男','女'))
   );
3.
CREATE  TABLE PERSON4( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL,
   CHECK(AGE BETWEEN 1 AND 150)
   );


---非空约束(NOT NULL )

限定列不能有空值,一张表中可以给多个列指定非空约束
NOT NULL 不能用 CONSTRAINT 来定义
CREATE TABLE PERSON2( 
   PID VARCHAR2(18),
   NAME VARCHAR2(30),
   AGE NUMBER(3),
   BRTIHDATE DATE NOT NULL,
   SEX VARChar2(2) DEFAULT '男' NOT NULL
   );

---外键约束(FOREIGN KEY )

在两张之间的操作
建立一个PERSON表
CREATE  TABLE PERSON( 
   PID VARCHAR2(18) PRIMARY KEY,
   NAME VARCHAR2(30) NOT NULL,
   AGE NUMBER(3) CHECK(AGE BETWEEN 1 AND 150),
   BRTIHDATE DATE,
   SEX VARChar2(2) DEFAULT '男' NOT NULL
);
建立一个BOOK表
CREATE TABLE BOOK(
  BID NUMBER(5,2) PRIMARY KEY,
  BNAME VARCHAR(30),
  PID VARCHAR2(18),
  CONSTRAINT PERSON_BOOK_FK FOREIGN KEY(PID) REFERENCES  PERSON(PID) [ON DELETE CASCADE] 
);
注意事项:
    (1)在子表设置外键时必须是父表中的主键
    (2)删除表时,要先删除子表,最后删除父表
    (3)可以建立级联删除:在建立外键时在其后面加入 ON DELETE CASCADE --只是可以删除数据 ,当删除父表里的数据时子表相应外键连接的数据也会删除。
    (4)可以建立级联更新:再建立外键时在其后面加入 ON UPDATE CASCADE --只是可以更新数据。
级联删除的例子:
CREATE TABLE WODE(N NUMBER(10) PRIMARY KEY,M VARCHAR2(10));
CREATE TABLE WODE1(N1 NUMBER(10),
CONSTRAINT WODE_WODE1_FK FOREIGN KEY(N1) REFERENCES WODE(N) ON DELETE CASCADE
)
SELECT * FROM WODE FOR UPDATE;
SELECT * FROM WODE1 FOR UPDATE;
DELETE WODE;--删除WODE 表时,WODE1 与其通过外键连接的数据也会被删除。

----约束的管理

1.增加约束
ALTER TABLE 表名称 ADD CONSTRAINT 约束名称 约束类型(约束字段);
2.删除约束
ALTER TABLE 表名称 DROP CONSTRAINT 约束名称;

----------------------视图 --------

概念:一个视图的实质是封装了一条复杂的SQL
优点:
1.为用户集中数据,简化用户的数据查询和处理。
2.屏蔽数据库的复杂性,用户不必了解数据库的复杂性。
3.简化用户权限的管理,只授予用户使用视图的权限。
4.便于数据共享,多个用户不必都定义所需的数据。
5.可以重新组织数据,以便关联到其他应用中。

--创建视图

CREATE VIEW 视图名称 AS 子查询;
视图创建后,可以像操作表一样操作视图。

--删除视图

DROP VIEW 视图名称;

------------------------序列---------------

--创建序列

   CREATE SEQUENCE 序列名称
   [MAXVALUE  NUM 设置序列最大值]
   [NOMAXVALUE  不设置序列最大值]
   [MINVALUE  NUM  设置序列最小值]
   [NOMINVALUE  不设置序列最小值]
   [INCREMENT BY 设置步长] 
   [START WITH 开始位]
   [CACHE  NUM  设置缓存几个序列]
   [NOCACHE  不设置缓存]
   [CYCLE   到头循环]
   [NOCYCLE  一直累加,不循环]

序列的操作

NEXTVAL:取得序列的下一个内容
CURRVAL:取得当期序列
序列的应用:生成不一样的ID号。
如:创建一个表
CREATE TABLE STAB(ID1 NUMBER(20));
CREATE SEQUENCE STB INCREMENT BY 1 START WITH 1 NOCYCLE;
INSERT INTO STAB VALUES(TO_CHAR(SYSDATE,'YYYYMMDD')||TRIM(TO_CHAR(STB.NEXTVAL,'0000')));
SELECT * FROM STAB;

------------------ROWNUM 和 ROWID ---------------

ROWID 是表的伪列,它用于惟一标识表行,并且间接给出了表行的物理位置,是定位表行最快的方式,
      使用 INSERT 语句插入数据时,ORACLE会自动生成 ROWID 并将其值与表数据一起存放到表行中。
ROWNUM 是ORACLE系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2... ... 。
ROWNUM 的应用例子:
--找EMP4COPY 表中工资最大的前五名(空值被默认为最大)
SELECT ROWNUM,S.* FROM (SELECT EMP4COPY.* FROM EMP4COPY ORDER BY SAL DESC) S WHERE ROWNUM<=5;
SELECT * FROM EMP4COPY FOR UPDATE--在此表中插入一个员工号9999,SAL保持为空值;则上面的查询语句最大值的一行为9999
按工资从大到小排名,找后五名:
SELECT ROWNUM,S.* FROM (SELECT EMP4COPY.* FROM EMP4COPY ORDER BY SAL DESC) S
MINUS
SELECT ROWNUM,S.* FROM 
(SELECT EMP4COPY.* FROM EMP4COPY 
ORDER BY SAL DESC) S,(SELECT COUNT(*) N FROM EMP4COPY) C WHERE ROWNUM<=C.N-5;


或者:按工资从大到小排名,找10名之后的员工信息:
SELECT * FROM (SELECT ROWNUM Q,E.* FROM (SELECT * FROM EMP ORDER BY SAL DESC) E) M
WHERE M.Q BETWEEN 10 AND (SELECT COUNT(*) FROM EMP);
找从第3名到第六名的员工信息:
SELECT * FROM (SELECT ROWNUM Q,E.* FROM (SELECT * FROM EMP ORDER BY SAL DESC) E) M
WHERE M.Q BETWEEN 3 AND 6;
查询表中的记录的前五行
   SELECT * FROM EMP WHERE ROWNUM<=5;
第10条记录后的所有员工,如何查?
   SELECT *  FROM EMP WHERE ROWNUM>10;--这样写是错误的,它不会显示结果













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值