- 浏览: 172132 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
gwill_21:
dwr.xml找不到怎么办,难道要自己手写dwr.xml?痛苦 ...
DWR框架 —— 用户注册验证 -
recoba7:
MLDN魔乐科技 Oracle学习笔记 (5) -
lanni2460:
呵呵 尽管现在才看到这个 但是我真的觉得 李老师 讲的很好呢 ...
严重声明,那些恶意诋毁MLDN及李兴华老师的其他培训机构统统走开 -
chian_xxp:
只要把功能实现了,代码结构合理了,代码性能提高了,该注意的注意 ...
业务、业务、业务。。。 -
wzpbb:
密码多少啊??? 给一下啊
MLDN 魔乐科技 Oracle 学习笔记(2)
居然有长度限制,气死我了,哼,本小姐继续发.
3.1 事务处理
所谓的事务就是指,组成这个事物的所有的操作要么同时成功,要么同时失败。
在Oracle中事务处理有三个核心的命令:
• ROLLBACK:回退至前一次确认的命令或保存点(rollback to 保存点标签名)
• COMMIT:提交
• SAVEPOINT:设置保存点(SAVEPOINT 保存点标签名)
事务处理是作业的逻辑单元。对数据库所做的所有修改都称为事务处理。只有将事物处理修改提交后,才能执行对数据库的永久修改。事务处理以可执行的SQL语句开头,并以ROLLBACK或COMMIT语句明确的结束,如果使用DDL语句,则隐式(即自动)结束。
在事务的处理中也会出现一种称为死锁的情况。等待另外一个session更新数据库的提交操作执行。
CREATE TABLE A(id NUMBER(4),name VARCHAR(10));
INSERT INTO A (id,name)VALUES(1001,'a');
SAVEPOINT TT;
INSERT INTO A (id,name)VALUES(1002,'b');
ROLLBACK TO TT;
SELECT *FROM A; //只有一条记录1001,a
COMMIT;
事务理解举例:
提款机取钱:
(1)比较用户名和密码正确,才正确登陆,否则失败 ----可以理解为一个事务
(2)当取款的时候,输入的金额,小于等于卡上的余额的时候,并且小于等于提款机中的余额,才能正确吐出钱。
这个过程,需要系统SELECT卡上的余额,需要SELECT提款机上的余额,需要UPDATE卡上的余额记录,需要UPDATE提款机中的余额记录,而要最终吐出钱,需要这些语句都成功,否则就都失败,都成功就COMMIT,失败就ROLLBACK;----可以理解为一个事务
3.2 约束
3.2.1 创建约束(重点)
1、在创建表结构的时候创建约束
CREATE TABLE 表名称
(
字段1 数据类型 【DEFAULT 默认值】【PRIMARY KEY】,
字段2 数据类型 【DEFAULT 默认值】【NOT NULL】【UNIQUE】,
字段3 数据类型 【DEFAULT 默认值】【NOT NULL】【CHECK(检查条件)】,
……
【ONSTRAINT 主表名_子表名_约束字段_fk FOREIGN KEY (约束字段) REFERENCES 主表名(约束字段) 【ON DELETE CASCADE】】
);
或者
CREATE TABLE 表名称
(
字段1 数据类型 【DEFAULT 默认值】【NOT NULL】,
字段2 数据类型 【DEFAULT 默认值】【NOT NULL】,
字段3 数据类型 【DEFAULT 默认值】【NOT NULL】,
……
【CONSTRAINT 表名_约束字段_pk PRIMARY KEY(主键约束字段)】,
【CONSTRAINT 表名_约束字段_uk UNIQUE(唯一约束字段)】
【CONSTRAINT 表名_约束字段_ck CHECK(检查约束字段及检查条件)】
【CONSTRAINT 主表名_子表名_约束字段_fk FOREIGN KEY (约束字段) REFERENCES 主表名(约束字段) 【ON DELETE CASCADE】】
);
建议:约束名的命名习惯是 表名_约束字段_约束约定标记(外键约束名的命名习惯是父表名_子表名_约束字段_约束约定标记),约束约定标记(主键约束pk、检查约束ck、唯一约束uk、外键约束fk)
提示:非空约束只能在字段后面添加,不能通过CONSTRAINT声明;
外键约束只能通过CONSTRAINT声明,不能在字段后面添加;
说明:
A、在创建表结构的时候创建约束,可以在字段后面直接添加该字段的约束(这样的约束采用系统随机分配的标记名),也可以通过CONSTRAINT单独声明约束,可以自己声明约束名,这样方便之后对约束的修改也方便错误信息提示及找到错误根源;
B、 参数说明
PRIMARY KEY:主键约束
NOT NULL:非空约束
UNIQUE:唯一约束
CHECK:检查约束
FOREIGN KEY:外键约束
FOREIGN KEY:在约束定义中指定子表中的列。
REFERENCES:指定父表名称和其中的列名称。
ON DELETE CASCADE:父表中的行被删除时,删除子表中对应的行。
ON DELETE SET NULL:父表中的行被删除时子表中对应行的外键列置NULL。
2、在创建表之后添加约束
格式:ALTER TABLE 表名 ADD CONSTRAINT 约束名称 约束类型(约束字段);
3.2.2 检测约束
Oracle中的约束有:
A、非空约束:即表示该字段值不能为空;
B、唯一约束:即表示该字段值在整个表范围内不能出现重复值;
C、主键约束:表中每一行数据的主键具有唯一性,并且不能为空,用于其它表的外键参照,一般设置编号为主键;
D、检查约束:用于设置某一字段的取值合法性的检查,是否在某一范围之内;
E、外键约束:唯一用于设置两张表之间的约束,即检查字表的外键字段的取值是否在父表主键字段取值的范围之内;
约束报错集萃:
假设有person和book两张表
SQL脚本:
--删除person表
DROP TABLE person;
DROP TABLE book;
--创建person表
CREATE TABLE person
(pno INT,
pname VARCHAR2(30) NOT NULL,
pid VARCHAR2(18),
age INT ,
sex VARCHAR(4) DEFAULT('女'),
CONSTRAINT person_pno_pk PRIMARY KEY(pno),
CONSTRAINT person_pid_uk UNIQUE(pid),
CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 200),
CONSTRAINT person_sex_ck CHECK(sex IN ('男','女','中性'))
);
--创建book表
CREATE TABLE book
(
bno NUMBER,
bname VARCHAR2(20),
pno INT,
CONSTRAINT book_bno_pk PRIMARY KEY(bno),
CONSTRAINT person_book_pno_fk FOREIGN KEY(pno) REFERENCES person(pno)
);
A、主键约束
--违反主键约束的唯一性
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1001,'b','000000000000000002',20,'男');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-00001: 违反唯一约束条件 (SCOTT.PERSON_PNO_PK) //此处明确指出违反哪个约束,如果之前没有给约束起名,在此处就不清楚是哪个地方出错
--违反主键约束的非空性
INSERT INTO person (pname,pid,age,sex)
VALUES('b','000000000000000002',20,'男');
--报错
--INSERT INTO person (pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-01400: 无法将 NULL 插入 ("SCOTT"."PERSON"."PNO")
B、非空约束
--违反反非空约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,null,'000000000000000002',20,'男');
--报错
--VALUES(1002,null,'000000000000000002',20,'男')
-- *
--第 2 行出现错误:
--ORA-01400: 无法将 NULL 插入 ("SCOTT"."PERSON"."PNAME")
C、唯一约束
--违反唯一约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,'b','000000000000000001',20,'男');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-00001: 违反唯一约束条件 (SCOTT.PERSON_PID_UK)
D、检查约束
--违反age检查约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,'b','000000000000000002',250,'男');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-02290: 违反检查约束条件 (SCOTT.PERSON_AGE_CK)
--违反sex检查约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,'b','000000000000000002',20,'人妖');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-02290: 违反检查约束条件 (SCOTT.PERSON_SEX_CK)
E、外键约束
--插入无效数据,1008在person中不存在
INSERT INTO book(bno,bname,pno)
VALUEs(3,'JAVA',1008);
--报错
--INSERT INTO book(bno,bname,pno)
--*
--第 1 行出现错误:
--ORA-02291: 违反完整约束条件 (SCOTT.PERSON_BOOK_PNO_FK) - 未找到父项关键字
--在没有删除子表前直接删除父表
DROP TABLE person;
--报错
--DROP TABLE person
-- *
--第 1 行出现错误:
--ORA-02449: 表中的唯一/主键被外键引用
注意:在删除具有外键关系的表的时候,先删除子表再删除父表
或者可以采用如下解决方法:
DROP TABLE person CASCADE CONSTRAINT;
--在没删除子表的数据的时候,先删除父表的数据
DELETE FROM person WHERE pno=1001;
--报错
--DELETE FROM person WHERE pno=1001
--*
--第 1 行出现错误:
--ORA-02292: 违反完整约束条件 (SCOTT.PERSON_BOOK_PNO_FK) - 已找到子记录
注意:在删除具有外键关系的父表的数据的时候,先删除子表对应的数据
或者可以采用如下解决方法,在删除父表的数据的时候同时删除子表中对应的数据
即在创建外键的时候指定级联删除
CREATE TABLE book
(
bno NUMBER,
bname VARCHAR2(20) NOT NULL,
pno INT,
CONSTRAINT book_bno_pk PRIMARY KEY(bno),
CONSTRAINT person_book_pno_fk FOREIGN KEY(pno) REFERENCES person(pno) ON DELETE CASCADE
);
3.2.3 删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名称;
3.2.4 修改约束(了解)
1、如果在创建表结构的时候,某个约束没有创建,那么之后可以增加约束:
格式:ALTER TABLE 表名 ADD CONSTRAINT 约束名称 约束类型(约束字段);
2、如果在创建表结构的时候,某个约束建的不符合要求,那么就只能先删除该约束,然后重新添加
3.2.5 查看表约束(了解)
查询表的约束信息:
例如:查询表persons中的约束:
SELECT constraint_name, constraint_type, search_condition
FROM user_constraints
WHERE table_name = 'PERSONS';
查询与约束相关的列:
例如:查询表persons中与约束相关的列:
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'PERSONS';
3.2.6 使约束失效(了解)
语法:
ALTER TABLE table_name
DISABLE(ENABLE) CONSTRAINT constraint_name [CASCADE];
说明:
执行ALTER TABLE语句的DISABLE(ENABLE)子句来使约束失效。
附带CASCADE选项使关联的约束失效。
3.3 序列(重点)
先创建一个temp表做演示,其相关SQL脚本如下:
--删除表
DROP TABLE temp;
--删除序列
DROP SEQUENCE noseq;
DROP SEQUENCE idseq;
--创建表
CREATE TABLE temp
(
no NUMBER(4),
nno NUMBER(4),
id VARCHAR2(8)
);
--创建序列
CREATE SEQUENCE noseq START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE idseq;
总结:
(1)在创建序列的时候,可以通过START WITH 设置起始值
(2)在创建序列的时候,可以通过INCREMENT BY 设置增值,默认为1
(3)在创建序列的时候,可以通过MINVALUE n设置最小值
(4)在创建序列的时候,可以通过MAXVALUE n设置最大值
(5)在创建序列的时候,可以通过CACHE n设置缓存值
(6)在创建序列的时候,可以通过CYCLE指定是否循环序列号
以上就创建了两个简单的序列,序列的下标从0开始计算,在使用的时候使用以下两个操作完成:
• nextVal:取出下一个内容
• currVal:取出当前的内容
--插入测试数据
INSERT INTO temp (no,nno,id)
VALUES(noseq.nextVal,noseq.currVal,to_char(sysdate,'yyyy') || LPAD(idseq.nextVal,4,'0'));
INSERT INTO temp (no,nno,id)
VALUES(noseq.nextVal,noseq.currVal,to_char(sysdate,'yyyy') || LPAD(idseq.nextVal,4,'0'));
INSERT INTO temp (no,nno,id)
VALUES(noseq.nextVal,noseq.currVal,to_char(sysdate,'yyyy') || LPAD(idseq.nextVal,4,'0'));
…….
--查询
SELECT * FROM temp;
曾犯错误:
CREATE SEQUENCE noseq START WITH 0 INCREMENT BY 1;
报错:
CREATE SEQUENCE noseq START WITH 0 INCREMENT BY 1
*
第 1 行出现错误:
ORA-04006: START WITH 不能小于 MINVALUE
---不指定最小值,默认为1
解决办法:
可以指定最小值
CREATE SEQUENCE noseq minvalue 0 maxvalue 99999999 START WITH 0 INCREMENT BY 1;
3.4 同义词(理解)
一个同义词(synonym)可以为任何表,视图,快照,序列,过程,函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因面经常使用,可用于:
(1)可屏蔽对象的名字及其持有者
(2)为分布式数据库的远程对象提供位置透明性
(3)为用户简化SQL语句
创建同义词的语法:
CREATE SYNONYM 同义词名称 FOR 用户名.表名称 ;
dual表是sys用户下的表,而现在scott用户下访问时不需要加sys.dual的原因就是同义词的作用。
CREATE SYNONYM dual FOR sys.dual;
有两种同义词:公用和专用。
创建公用同义词:
create public synonym public_emp for scott.emp; (公用同义词表示各个用户都能用)
创建专用同义词:
create synonym public_emp for scott.emp; (只能当前用户能用)
删除同义词:
DROP SYNONYM dual;
3.5 视图(掌握)
1、什么是视图
作为Oracle方案中的一类对象,一个视图是一个被命名的SELECT语句,构成视图中的SELECT语句不能包含ORDER BY、伪列,其本身不包含数据,而是允许用户透过视图从表中查询数据或对表中的数据进行修改。
2、为什么要使用视图
限制数据存取。
使复杂的查询简单化。
提供数据的独立性。
对同组数据提供不同视角。
视图是一个被命名的SELECT语句,即一个视图封装了一个SELECT语句。
3、创建视图
CREATE VIEW 视图的名称 AS SELECT语句;
--在创建视图的时候,可以通过WITH CHECK OPTION来限制修改创建视图的条件,在最后添加该子句即可
--在创建视图的时候,可以通过WITH READ ONLY 来限制DML操作,在最后添加该子句即可
4、删除视图
DROP VIEW 视图的名称;
5、修改视图
没有ALTER VIEW语句,只能通过
CREATE OR REPLACE VIEW 视图的名称 AS SELECT语句;
重新创建视图来达到修改的目的
3.1 事务处理
所谓的事务就是指,组成这个事物的所有的操作要么同时成功,要么同时失败。
在Oracle中事务处理有三个核心的命令:
• ROLLBACK:回退至前一次确认的命令或保存点(rollback to 保存点标签名)
• COMMIT:提交
• SAVEPOINT:设置保存点(SAVEPOINT 保存点标签名)
事务处理是作业的逻辑单元。对数据库所做的所有修改都称为事务处理。只有将事物处理修改提交后,才能执行对数据库的永久修改。事务处理以可执行的SQL语句开头,并以ROLLBACK或COMMIT语句明确的结束,如果使用DDL语句,则隐式(即自动)结束。
在事务的处理中也会出现一种称为死锁的情况。等待另外一个session更新数据库的提交操作执行。
CREATE TABLE A(id NUMBER(4),name VARCHAR(10));
INSERT INTO A (id,name)VALUES(1001,'a');
SAVEPOINT TT;
INSERT INTO A (id,name)VALUES(1002,'b');
ROLLBACK TO TT;
SELECT *FROM A; //只有一条记录1001,a
COMMIT;
事务理解举例:
提款机取钱:
(1)比较用户名和密码正确,才正确登陆,否则失败 ----可以理解为一个事务
(2)当取款的时候,输入的金额,小于等于卡上的余额的时候,并且小于等于提款机中的余额,才能正确吐出钱。
这个过程,需要系统SELECT卡上的余额,需要SELECT提款机上的余额,需要UPDATE卡上的余额记录,需要UPDATE提款机中的余额记录,而要最终吐出钱,需要这些语句都成功,否则就都失败,都成功就COMMIT,失败就ROLLBACK;----可以理解为一个事务
3.2 约束
3.2.1 创建约束(重点)
1、在创建表结构的时候创建约束
CREATE TABLE 表名称
(
字段1 数据类型 【DEFAULT 默认值】【PRIMARY KEY】,
字段2 数据类型 【DEFAULT 默认值】【NOT NULL】【UNIQUE】,
字段3 数据类型 【DEFAULT 默认值】【NOT NULL】【CHECK(检查条件)】,
……
【ONSTRAINT 主表名_子表名_约束字段_fk FOREIGN KEY (约束字段) REFERENCES 主表名(约束字段) 【ON DELETE CASCADE】】
);
或者
CREATE TABLE 表名称
(
字段1 数据类型 【DEFAULT 默认值】【NOT NULL】,
字段2 数据类型 【DEFAULT 默认值】【NOT NULL】,
字段3 数据类型 【DEFAULT 默认值】【NOT NULL】,
……
【CONSTRAINT 表名_约束字段_pk PRIMARY KEY(主键约束字段)】,
【CONSTRAINT 表名_约束字段_uk UNIQUE(唯一约束字段)】
【CONSTRAINT 表名_约束字段_ck CHECK(检查约束字段及检查条件)】
【CONSTRAINT 主表名_子表名_约束字段_fk FOREIGN KEY (约束字段) REFERENCES 主表名(约束字段) 【ON DELETE CASCADE】】
);
建议:约束名的命名习惯是 表名_约束字段_约束约定标记(外键约束名的命名习惯是父表名_子表名_约束字段_约束约定标记),约束约定标记(主键约束pk、检查约束ck、唯一约束uk、外键约束fk)
提示:非空约束只能在字段后面添加,不能通过CONSTRAINT声明;
外键约束只能通过CONSTRAINT声明,不能在字段后面添加;
说明:
A、在创建表结构的时候创建约束,可以在字段后面直接添加该字段的约束(这样的约束采用系统随机分配的标记名),也可以通过CONSTRAINT单独声明约束,可以自己声明约束名,这样方便之后对约束的修改也方便错误信息提示及找到错误根源;
B、 参数说明
PRIMARY KEY:主键约束
NOT NULL:非空约束
UNIQUE:唯一约束
CHECK:检查约束
FOREIGN KEY:外键约束
FOREIGN KEY:在约束定义中指定子表中的列。
REFERENCES:指定父表名称和其中的列名称。
ON DELETE CASCADE:父表中的行被删除时,删除子表中对应的行。
ON DELETE SET NULL:父表中的行被删除时子表中对应行的外键列置NULL。
2、在创建表之后添加约束
格式:ALTER TABLE 表名 ADD CONSTRAINT 约束名称 约束类型(约束字段);
3.2.2 检测约束
Oracle中的约束有:
A、非空约束:即表示该字段值不能为空;
B、唯一约束:即表示该字段值在整个表范围内不能出现重复值;
C、主键约束:表中每一行数据的主键具有唯一性,并且不能为空,用于其它表的外键参照,一般设置编号为主键;
D、检查约束:用于设置某一字段的取值合法性的检查,是否在某一范围之内;
E、外键约束:唯一用于设置两张表之间的约束,即检查字表的外键字段的取值是否在父表主键字段取值的范围之内;
约束报错集萃:
假设有person和book两张表
SQL脚本:
--删除person表
DROP TABLE person;
DROP TABLE book;
--创建person表
CREATE TABLE person
(pno INT,
pname VARCHAR2(30) NOT NULL,
pid VARCHAR2(18),
age INT ,
sex VARCHAR(4) DEFAULT('女'),
CONSTRAINT person_pno_pk PRIMARY KEY(pno),
CONSTRAINT person_pid_uk UNIQUE(pid),
CONSTRAINT person_age_ck CHECK(age BETWEEN 0 AND 200),
CONSTRAINT person_sex_ck CHECK(sex IN ('男','女','中性'))
);
--创建book表
CREATE TABLE book
(
bno NUMBER,
bname VARCHAR2(20),
pno INT,
CONSTRAINT book_bno_pk PRIMARY KEY(bno),
CONSTRAINT person_book_pno_fk FOREIGN KEY(pno) REFERENCES person(pno)
);
A、主键约束
--违反主键约束的唯一性
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1001,'b','000000000000000002',20,'男');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-00001: 违反唯一约束条件 (SCOTT.PERSON_PNO_PK) //此处明确指出违反哪个约束,如果之前没有给约束起名,在此处就不清楚是哪个地方出错
--违反主键约束的非空性
INSERT INTO person (pname,pid,age,sex)
VALUES('b','000000000000000002',20,'男');
--报错
--INSERT INTO person (pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-01400: 无法将 NULL 插入 ("SCOTT"."PERSON"."PNO")
B、非空约束
--违反反非空约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,null,'000000000000000002',20,'男');
--报错
--VALUES(1002,null,'000000000000000002',20,'男')
-- *
--第 2 行出现错误:
--ORA-01400: 无法将 NULL 插入 ("SCOTT"."PERSON"."PNAME")
C、唯一约束
--违反唯一约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,'b','000000000000000001',20,'男');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-00001: 违反唯一约束条件 (SCOTT.PERSON_PID_UK)
D、检查约束
--违反age检查约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,'b','000000000000000002',250,'男');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-02290: 违反检查约束条件 (SCOTT.PERSON_AGE_CK)
--违反sex检查约束
INSERT INTO person (pno,pname,pid,age,sex)
VALUES(1002,'b','000000000000000002',20,'人妖');
--报错
--INSERT INTO person (pno,pname,pid,age,sex)
--*
--第 1 行出现错误:
--ORA-02290: 违反检查约束条件 (SCOTT.PERSON_SEX_CK)
E、外键约束
--插入无效数据,1008在person中不存在
INSERT INTO book(bno,bname,pno)
VALUEs(3,'JAVA',1008);
--报错
--INSERT INTO book(bno,bname,pno)
--*
--第 1 行出现错误:
--ORA-02291: 违反完整约束条件 (SCOTT.PERSON_BOOK_PNO_FK) - 未找到父项关键字
--在没有删除子表前直接删除父表
DROP TABLE person;
--报错
--DROP TABLE person
-- *
--第 1 行出现错误:
--ORA-02449: 表中的唯一/主键被外键引用
注意:在删除具有外键关系的表的时候,先删除子表再删除父表
或者可以采用如下解决方法:
DROP TABLE person CASCADE CONSTRAINT;
--在没删除子表的数据的时候,先删除父表的数据
DELETE FROM person WHERE pno=1001;
--报错
--DELETE FROM person WHERE pno=1001
--*
--第 1 行出现错误:
--ORA-02292: 违反完整约束条件 (SCOTT.PERSON_BOOK_PNO_FK) - 已找到子记录
注意:在删除具有外键关系的父表的数据的时候,先删除子表对应的数据
或者可以采用如下解决方法,在删除父表的数据的时候同时删除子表中对应的数据
即在创建外键的时候指定级联删除
CREATE TABLE book
(
bno NUMBER,
bname VARCHAR2(20) NOT NULL,
pno INT,
CONSTRAINT book_bno_pk PRIMARY KEY(bno),
CONSTRAINT person_book_pno_fk FOREIGN KEY(pno) REFERENCES person(pno) ON DELETE CASCADE
);
3.2.3 删除约束
ALTER TABLE 表名 DROP CONSTRAINT 约束名称;
3.2.4 修改约束(了解)
1、如果在创建表结构的时候,某个约束没有创建,那么之后可以增加约束:
格式:ALTER TABLE 表名 ADD CONSTRAINT 约束名称 约束类型(约束字段);
2、如果在创建表结构的时候,某个约束建的不符合要求,那么就只能先删除该约束,然后重新添加
3.2.5 查看表约束(了解)
查询表的约束信息:
例如:查询表persons中的约束:
SELECT constraint_name, constraint_type, search_condition
FROM user_constraints
WHERE table_name = 'PERSONS';
查询与约束相关的列:
例如:查询表persons中与约束相关的列:
SELECT constraint_name, column_name
FROM user_cons_columns
WHERE table_name = 'PERSONS';
3.2.6 使约束失效(了解)
语法:
ALTER TABLE table_name
DISABLE(ENABLE) CONSTRAINT constraint_name [CASCADE];
说明:
执行ALTER TABLE语句的DISABLE(ENABLE)子句来使约束失效。
附带CASCADE选项使关联的约束失效。
3.3 序列(重点)
先创建一个temp表做演示,其相关SQL脚本如下:
--删除表
DROP TABLE temp;
--删除序列
DROP SEQUENCE noseq;
DROP SEQUENCE idseq;
--创建表
CREATE TABLE temp
(
no NUMBER(4),
nno NUMBER(4),
id VARCHAR2(8)
);
--创建序列
CREATE SEQUENCE noseq START WITH 1 INCREMENT BY 1;
CREATE SEQUENCE idseq;
总结:
(1)在创建序列的时候,可以通过START WITH 设置起始值
(2)在创建序列的时候,可以通过INCREMENT BY 设置增值,默认为1
(3)在创建序列的时候,可以通过MINVALUE n设置最小值
(4)在创建序列的时候,可以通过MAXVALUE n设置最大值
(5)在创建序列的时候,可以通过CACHE n设置缓存值
(6)在创建序列的时候,可以通过CYCLE指定是否循环序列号
以上就创建了两个简单的序列,序列的下标从0开始计算,在使用的时候使用以下两个操作完成:
• nextVal:取出下一个内容
• currVal:取出当前的内容
--插入测试数据
INSERT INTO temp (no,nno,id)
VALUES(noseq.nextVal,noseq.currVal,to_char(sysdate,'yyyy') || LPAD(idseq.nextVal,4,'0'));
INSERT INTO temp (no,nno,id)
VALUES(noseq.nextVal,noseq.currVal,to_char(sysdate,'yyyy') || LPAD(idseq.nextVal,4,'0'));
INSERT INTO temp (no,nno,id)
VALUES(noseq.nextVal,noseq.currVal,to_char(sysdate,'yyyy') || LPAD(idseq.nextVal,4,'0'));
…….
--查询
SELECT * FROM temp;
曾犯错误:
CREATE SEQUENCE noseq START WITH 0 INCREMENT BY 1;
报错:
CREATE SEQUENCE noseq START WITH 0 INCREMENT BY 1
*
第 1 行出现错误:
ORA-04006: START WITH 不能小于 MINVALUE
---不指定最小值,默认为1
解决办法:
可以指定最小值
CREATE SEQUENCE noseq minvalue 0 maxvalue 99999999 START WITH 0 INCREMENT BY 1;
3.4 同义词(理解)
一个同义词(synonym)可以为任何表,视图,快照,序列,过程,函数或包的别名,其定义存储在数据字典中。同义词因安全性和方便原因面经常使用,可用于:
(1)可屏蔽对象的名字及其持有者
(2)为分布式数据库的远程对象提供位置透明性
(3)为用户简化SQL语句
创建同义词的语法:
CREATE SYNONYM 同义词名称 FOR 用户名.表名称 ;
dual表是sys用户下的表,而现在scott用户下访问时不需要加sys.dual的原因就是同义词的作用。
CREATE SYNONYM dual FOR sys.dual;
有两种同义词:公用和专用。
创建公用同义词:
create public synonym public_emp for scott.emp; (公用同义词表示各个用户都能用)
创建专用同义词:
create synonym public_emp for scott.emp; (只能当前用户能用)
删除同义词:
DROP SYNONYM dual;
3.5 视图(掌握)
1、什么是视图
作为Oracle方案中的一类对象,一个视图是一个被命名的SELECT语句,构成视图中的SELECT语句不能包含ORDER BY、伪列,其本身不包含数据,而是允许用户透过视图从表中查询数据或对表中的数据进行修改。
2、为什么要使用视图
限制数据存取。
使复杂的查询简单化。
提供数据的独立性。
对同组数据提供不同视角。
视图是一个被命名的SELECT语句,即一个视图封装了一个SELECT语句。
3、创建视图
CREATE VIEW 视图的名称 AS SELECT语句;
--在创建视图的时候,可以通过WITH CHECK OPTION来限制修改创建视图的条件,在最后添加该子句即可
--在创建视图的时候,可以通过WITH READ ONLY 来限制DML操作,在最后添加该子句即可
4、删除视图
DROP VIEW 视图的名称;
5、修改视图
没有ALTER VIEW语句,只能通过
CREATE OR REPLACE VIEW 视图的名称 AS SELECT语句;
重新创建视图来达到修改的目的
发表评论
-
本小姐回来啦 —— 超级感谢MLDN
2009-08-10 13:24 1600我又回来了!哈哈,报告一个好消息,我已经成功入职博彦科 ... -
现在开始积极的找工作
2009-07-05 19:13 1174学习差不多了,得赶在毕业前找到一个工作啊,本小姐这段时 ... -
素质教育 —— 模拟面试
2009-06-30 19:10 1043今天一天都安排了职业素质的培养,包括简历的指导、技术面 ... -
EJB实体Bean开发的复合主键映射
2009-06-29 21:36 1685复合主键的映射:在Hibernate中是通过一个主键类来完成复 ... -
EJB实体Bean开发
2009-06-29 21:33 988EJB实体Bean开发的数据库连接采用数据源连接池的方式,因此 ... -
EJB3.0
2009-06-28 14:14 1228EJB是SUN公司提出的开发 ... -
JBoss服务器配置
2009-06-25 21:21 2079哦,哦,哦,EJB的准备课程啊。 这里开发使用的是 JB ... -
Spring结合iBATIS进行开发
2009-06-25 21:19 960使用Spring管理iBATIS完全可以参照Spring+Hi ... -
ibatis开发框架
2009-06-25 21:17 1254iBATIS为一个ORMapping框架,可以帮助开发人员完成 ... -
WebService分布式开发
2009-06-24 22:23 1904WebService:用来跨语言传递数据。 数据交互是通过XM ... -
北京下雨了
2009-06-18 19:56 771上次在公交车上,听到电视里放《北京下雨了》,那么北京今天 ... -
JQuery
2009-06-10 21:03 12581、JQuery的基本语法 ... -
AJAX中使用JSON
2009-06-10 21:02 1301在Java开发中,如果要使用JSON进行开发,需要一些支持,这 ... -
AJAX框架 —— JSON基本知识
2009-06-10 21:01 941我真想知道这年头到底有多少种框架。 1、JSON ... -
还应该多帮助同学,才能让自己进步快
2009-06-08 21:57 987今天对于本小姐来讲还真是相对轻松的一天啊,上周完成了任 ... -
业务、业务、业务。。。
2009-06-03 18:41 1142项目就是业务,项目中都是业务,技术就这么点东西,只要把 ... -
IBM Project 继续中ing....
2009-06-02 19:08 872项目就是要坚持的做下去,而且要想到做到最好,虽然框架很好 ... -
实际开发了
2009-06-01 18:17 877今天开始新的项目了,项目老师帮我们搭建好了SVN服务器, ... -
web学习笔记 —— 数据源
2009-05-31 19:56 1019使用数据源可以提升数据库的操作性能,当然,不管使用与否,对于程 ... -
SSH(Spring + Struts + Hibernate)
2009-05-31 19:47 2488Spring结合Hibernate ...
相关推荐
哇 鄙视你 鄙视 超鄙视哇 鄙视你 鄙视 超鄙视哇 鄙视你 鄙视 超鄙视哇 鄙视你 鄙视 超鄙视
在电子工程师的世界里,存在着一条无形的“鄙视链”,涉及软件工程师和硬件工程师的不同领域。这条鄙视链反映了行业中不同技术之间的微妙竞争和互相评价。让我们深入探讨一下这个话题。 首先,软件工程师的鄙视链是...
C语言鄙视系统C语言鄙视系统C语言鄙视系统C语言鄙视系统
### MOBA游戏“鄙视链”研究 #### 研究背景与目的 随着MOBA(多人在线战术竞技)游戏的兴起与发展,一系列经典作品如《DOTA》、《英雄联盟》以及《王者荣耀》等相继成为了全球玩家追逐的焦点。这些游戏不仅仅提供...
PowerEdge T110 II系列服务器采用的是S100 RAID卡,DELL官方不对该系列服务器提供WIN2003的技术支持,官方给出的回复是:要么装2008系统,要么不用RAID卡模式,对此表示一点小小鄙视,既然官方不给方法,就只有测试...
标题中的“用C#写的一个拼图的小东西别鄙视”揭示了这是一个使用C#编程语言开发的拼图游戏项目。这个项目可能是作者为了学习、娱乐或者教学目的而创建的,尽管作者谦虚地表示效率可能不高,但仍然期待得到他人的指导...
非主流--脑残儿--非主流--鄙视--很鄙视
【小学英语英语故事童话故事The Little Green Ones小小的绿东西】是一个适合小学生阅读的英语故事,旨在通过寓教于乐的方式帮助孩子们学习英语。这个故事讲述的是一群穿着绿色制服的小生物,它们在玫瑰树上生活并...
7. 人际关系的影响:女硕士的鄙视揭示了职场中人际关系的重要性,即使在工作中表现出色,如果不能获得同事或上司的好感,可能会影响职业生涯。 8. 自我认知:主人公通过反思他人对自己的看法,增强了自我认知,这有...
然而,这些游戏玩家之间存在着一种“鄙视链”现象,这种现象在一定程度上反映了玩家之间对不同游戏的认可度和偏好。本报告旨在通过大数据分析,揭示MOBA游戏鄙视链的真相,探究不同游戏用户之间的关系和态度。 首先...
【程序员里的鄙视链】揭示了编程界内部对各种技术和工具的一种相对主观的评价标准,这种现象虽然在一定程度上体现了技术的多样性,但也可能导致新手在选择入门语言时产生困惑。以下将详细介绍鄙视链中涉及的一些关键...
初中语文文摘社会欧洲人是这样互相鄙视的
教师招聘试卷(考试题)及答案鄙视收费.doc
文章的核心观点是:每个人都有自己的生活方式,不应以个人的价值观去评判或鄙视他人。 首先,文章通过描述作者与十年未见的老友王某相聚的情景,揭示了社会地位和经济条件对人们评价他人生活的影响。王某作为成功的...
根据给定的信息,我们可以梳理出以下相关知识点: ### 一、编程语言之争 ... ...”这句话反映了程序员群体中的一种普遍现象:不同的编程语言会有各自的拥趸者。...实际上,每种编程语言都有其适用场景和优势,并不存在绝对...
ODOD适合入门的软件破解教程_鄙视要太多分的.doc
标题中的“开发资料下载_各大公司的面试题、“鄙视”题”表明这是一份集合了多个公司面试问题的资源包,特别的是,其中可能包含了某些公司用来筛选或考验候选人的特殊问题,通常这类问题被称为“鄙视”题,因为它们...