VIEW视图的定义
也称虚表,不占物理空间,这个也是相对概念,因为视图本身定义语句还需要存储在数据字典李,视图只有逻辑定义 ,每次使用只是重新执行SQL.
如果普通用户第一次创建视图,提示没有权限 ,要使用管理员修改权限
sqlplus /nolog conn sys/admin@orcl as sysdba; //授权 grant create view to scott; //回收权限 revoke create view from scott;
create view v_emp as select * from emp where deptno = 20;
–视图的使用
select * from v_emp;
–向视图中添加数据,执行成功之后,需要提交事务,绿色表示提交事务,让数据生效,
– 红色表示回滚事务,让数据恢复原状态;
insert into v_emp(empno,ename) values(1111,‘张三’);
–如果定义的视图是非只读视图的话,可以向表中插入数据
–如果是只读视图,则不可以插入数据
–创建只读权限视图,无法进行增删改查操作。并进行演示
create view v_emp2 as select * from emp with read only;
select * from v_emp2;
insert into v_emp2(empno,ename) values(222,‘李四’);
–删除视图
drop view v_emp2;
drop view v_emp;
–当删除视图中数据的时候,如果数据来源于多个基表,则此时不能全部进行删除
–只能删除一个表中的数据
1、创建用户
语法: create user username identified by password;
下划先为用户密码
create user bjmsh identified by bjmsb;
2、查询用户是否创建
select username from dba_users;
grant privileges [ON object_name] to username
将权限privileges授予用户username
SQL>grant create session to John
用户John的scott用户表emp的所有权限,使用下列SQL语句:
SQL>revoke all on scott.emp from John
将John用户的口令修改为newpsw
alter John indentified by newpsw
删除John操做
drop user John csscade
测试John是否存在
conn Jojn/newpsw@test;
select * from user_sys_privs;
--在Oracle中如果需要完成一个列得自增操作,必须要使用序列
▪ 创建序列的语法:
create sequence seq_name --seq定义名称随便定义
increent by n --每次增长的值是几
start with n --从哪个值开始
maxvalue n|nomaxvalue 10^27 or -1 --最大值是多少
minvalue n|no minvalue --最小值是多少
cycle|nocycle --是否进行循环【当超过最大值时,是否循环再走一遍】
cache n|nocache --是否有对应得一个缓存【】
create sequence my_sequence
increment by 2
start with 1;
–注意:如果创建好序列之后,没有经过任何的使用,那么就不能获取当前的值
– 必须要先执行nextval之后才能获取当前的值
–查看当前序列的值
select my_sequence.currval from dual;
–获取序列的下一个值
select my_sequence.nextval from dual;
–删除序列
drop sequence 序列名;
–具体使用向emp表中,添加序列数据
insert into emp(empno,ename) values(my_sequence.nextval,‘hehe’);
select * from emp;
--在实际项目中,使用最多的时读取操作,但是插入数据和删除数据同类重要,而修改操作相对较少
–DML;数据操作语言
–在实际项目中,使用最多的时读取操作,但是插入数据和删除数据同类重要,而修改操作相对较少
插入操作
元组的插入
结果的插入
–最基本的插入方式【元组的插入】
– insert into tablename values(val1,val2…);
–如果表明没有列,那么只能将所有列的插入
–insert into tablename(col1,col2…) values(val1,val2…);
–可以指定向哪些列中插入数据
insert into emp values(2222,'haha','clerk',7902,to_date('2019-11-2','YYYY-MM-dd'),1000,500,10);
–向部分列插入数据的时候,不是随便列插入的,要遵顼创建表的时候规范
insert into emp(empno,ename) values(3333,‘wangwu’);
–创建表的其他方式
–复制表,同时复制表数据【不会复制约束】
create table emp2 as select * from emp;
–复制表结构,但是不复制表数据【不会复制约束】
create table emp3 as select * from emp where 1=2;
/*
删除操作:
delelte from tablename where condition【条件】;
Delete from table 表示从表中删除一切元组
如果想从表中删除所有行,不要使用delete,可使用过 truncate table 语句,完成相同的工作,但是速度更快(没有事务)
*/
select * from emp2;
–删除满足条件的数据
delete from emp2 where deptno = 10;
–把整张表的数据全部清空
delete from emp2;
–truncate table,跟delete有所不同,在进行删除的时候经过事务,而在truncate 不经过事务,一旦删除就是永久删除,不具备回滚操作
truncate table emp2;
/*
修改操作
update tablename set col1 = val1,cal2 = val2 where condition;
可以更新或者修改满足条件的一个或者多个列
*/
update emp set ename = ‘heihei’ where ename = ‘haha’;
update emp set job = ‘teacher’,mgr = 1122 where empno = ‘3333’;
/*
增删改是数据库常用操作,在进行的时候都需要(事务)的保证,也就是说每次在 PLsql 中执行sql语句之后都需要完成condition的操作
所有说事务变的非常关键
最住哟啊的目的为了保证数据一致性
如果要保证数据的安全,最主要的方式就是加锁的操作 MVCC
为了提高效率,有可能多个操作在同一个事务中执行,那么就有可能出现部分成功,基于这种情况,就需要事务的控制
*/