约束是表级的强制规定
有以下五种约束: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - CHECK
作用范围:
① 列级约束只能作用在一个列上② 表级约束可以作用在多个列上(当然表级约束也可以作用在一个列上)定义方式: 列约束必须跟在列的定义后面,表约束不与列一起,而是单独定义。
非空(not null) 约束只能定义在列上
alter table [表名] add constraint [约束别名] [约束类别(字段名)]
向表emp2的id列中添加PRIMARY KEY约束(my_emp_id_pk)
ALTER table emp2ADD constraint my_emp_id_pk primary key(id);alter table modify [字段名] [约束]
或者
alter table modify [字段名] [constraint] [别名] [约束]
- 例如:把 name 字段修改为 not null约束
alter table emp2 modify name not null;
alter table emp2 modify salary constraint my_emp2_salary_n not null;
alter table [表名] add constraint [约束别名] check([约束条件])
例子:给表中添加约束,使得salary大于0
alter table emp2 add constraint emp2_salary_min check(salary>0);
alter table [表名] drop constraint [约束别名]
当一个表进行操作的时候会影响和他有外检约束的另外一张表
ON DELETE CASCADE(级联删除): 当父表中的列被删除时,子表中相对应的列也被删除ON DELETE SET NULL(级联置空): 子表中相应的列置空假如表emp
有一个外键dept_id
连接到表dept
的dept_id
在创建表的时候就设置
on delete cascade
on delete set null
视图和子表类似,不同的是,对视图的操作会影响原表的内容
视图是一种虚表。 视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。向视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句. 视图向用户提供基表数据的另一种表现形式简单视图和复杂视图区别:
特性 | 简单视图 | 复杂视图 |
---|---|---|
表的数量 | 一个 | 一个或多个 |
函数 | 没有 | 有 |
分组 | 没有 | 有 |
DML操作 | 可以 | 有时候可以 |
注意: 使用scott用户登陆的时候默认是没有创建视图权限的 解决方式: 1. 打开cmd 2. 使用system用户登录:sqlplus system/root@orcl
3. 赋权限:grant create view to scott;
4. 此时scott用户就获得了创建view的权限
实例:创建视图empview,来自于对employees的查询
create view empview as select employee_id,last_name,salary from employees where department_id=80desc empview查看一下
SQL> desc empview Name Null? Type ----------------------------------------- -------- --------------- EMPLOYEE_ID NOT NULL NUMBER(6) LAST_NAME NOT NULL VARCHAR2(25) SALARY NUMBER(8,2)此时看到创建的视图符合我们的意图
添加上or replace
即刻
使用组合函数的查询创建的视图为复杂视图
实例:查询所有部门的平均工资,赋值给empview2
SQL> create view empview2 as select department_id,avg(salary) avg_salary from employees group by department_id;在创建一个view的时候后面加上with read only
表示只读; 例如:
此时进行uodate操作会提示错误
SQL> update empview3 set salary=8000 where last_name='Jhonson';update empview3 set salary=8000 where last_name='Jhonson' *ERROR at line 1:ORA-42399: cannot perform a DML Operation on a read-only view很简单 drop view [视图图名]
选取前n行的值,或者第n到m行之间的值
实例说明: 现在想选取出来工资前十名的人员的信息 创建一个empview4
SQL> create view empview4 as select employee_id,last_name,salary from employeesorder by salary desc;此时要想选择前十个,是无从下手的,这个时候就要借助rownum
这个伪列
例如:
但是此时还不能够使用rownum
来作为查询的条件,因为伪列是虚拟的
然后把上面的查询结果,作为一个新的表再次查询
select rownum,employee_id,salary from (select employee_id,salary from employees order by salary desc )where rownum < 11;输出:
ROWNUM EMPLOYEE_ID SALARY---------- ----------- ---------- 1 100 24000 2 101 17000 3 102 17000 4 145 14000 5 146 13500 6 201 13000 7 205 12000 8 147 12000 9 108 12000 10 168 1150010 rows selected.注意 : 对 ROWNUM 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据。 想要查询第40–第50的员工信息,只能再次嵌套一次,将rawnum作为一个真实的一列查询。
select * from( select rownum rn,employee_id,salary from (select employee_id,salary from employees order by salary desc ) ) where rn>40 and rn<50;输出结果:
RN EMPLOYEE_ID SALARY---------- ----------- ---------- 41 154 7500 42 171 7400 43 172 7300 44 164 7200 45 179 7000 46 161 7000 47 178 7000 48 155 7000 49 113 69009 rows selected.新闻热点
疑难解答