Oracle day04 DML_事务_序列_视图_数据类型_DDL

dml
insert关键字
作用:往表中插入一条(多条)数据

语法1:元祖值式的插入
语法1: insert into tablename(column1,column2,…,columnn) values(value1,value2,…,valuen); 
      insert   into    表名      (列1      ,列2    ,…., 列n  ) values(值1  ,值2,…. , 值n)   

              如果往表中所有的列都添加数据时,表后面的字段可以不添加,直接写values

              insert   into    表名  values(值1  ,值2,…. , 值n)

语法2:查询结果式的插入
语法2: insert into tablename subquery 

delete关键字
作用:从表中删除数据
语法: delete [from] tablename [where condition] 

update关键字
作用:更新表中的数据
语法: update tablename set column1=value1,column2=value2,…,columnn=valuen [where condition] 

 

事务

事务(transaction)是一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位。

目的:保证数据库的完整性

特点:事务不能嵌套

如何开启事务:
    一个dml语句(insert、delete、update)的执行

如何关闭事务:
    1.显示的调用commit或rollback
    2.当执行ddl(create、alter、drop)语句事务自动提交
    3.用户正常断开连接时,事务自动提交。
    4.系统崩溃或断电时事务自动回滚

序列

一、概念:
    序列(sequence):oracle专有的专有对象
二、作用:
    产生一个自动递增的数列

三、创建一个序列:

    create sequence seq_name
    increment by 1
    start with 1

四、使用序列:
    序列名.nextval
    序列名.currval

 

视图

一、定义:
    视图(view):一种不占用物理空间的虚表。

二、作用:
    将一些查询复杂的sql语句变为视图,便于查询

三、语法:

create [or replace] view v$_name
as sub-query
[with read only]

 

四、需要注意的点:
    1.视图也可以从视图中产生
    2.我们把用于产生视图的表称之为基表
    3.我们对视图进行数据修改就是对基表进行数据修改,反之亦然
    4.不能对多张表的数据,通过视图进行修改。

五、使用视图需要注意
    1.一般来讲,只有重复出现非常多次的sql语句,才会创建视图
    2.数据库迁移,视图也得随之迁移,否则在新数据中是不能用的
    3.创建视图时,尽量不要带or replace

数据类型

数据类型分类:
    1.number(x,y)  数字类型,x表示最大长度,y表示精度
    2.varchar2(x) 可变字符串,x表示最大长度
    3.char(x) 定长字符串,x表示最大长度
    4.long 长字符串,最大2g
    5.date,日期(年月日时分秒)
    6.timestamp 时间戳,精确到微秒

ddl

1.create关键字作用:用于创建数据库对象(表、视图、序列等)

语法:    create table tablename(column1 datatype, column2 datatype,…,columnn datatype) 
语法2: create table tablename as subquery 

2.alert关键字
作用:用于修改数据库对象(表、视图、序列等)

语法:
    1) alter table tablename add(columnname datatype) 
    2) alter table tablename modify( columnname datatype) 
    3) alter table tablename drop [column] columnname 

3.drop关键字
作用:用于删除数据库对象(表、视图、序列等)

语法:
     drop table tablename 

 

使用_例子:

dml

–insert关键字

–作用:往表中插入一条(多条)记录

元祖(tuple)值式的插入(一次插入一条记录)
–语法1: insert into tablename(column1,column2,…,columnn) values(val1,val2,…,valn) 
–例子:

insert into emp(empno,ename,sal,deptno) values(9527,'hua%an',100,40);

 

–如果往表中所有的列都添加数据时,表后面的字段可以不添加,直接写values

insert into emp values(8888,'xiaoqiang','aaa',9527,sysdate,0,null,40);

 

查询结果式的插入
–语法2: insert into tablename subquery 
–例子:

insert into emp_temp (select * from emp where deptno = 20)

 

–创建一个emp的临时复制表

create table emp_temp as select * from emp where 1 = 2

 

–delete关键字

–作用:删除表中的数据
–语法: delete [from] tablename [where condition] 
–例子:

delete emp_temp where empno = 8888;

 

小心使用  delete emp_temp; 

 

–update关键字

–作用:更新表中的数据
–语法: update tablename set column1=value1,column2=value2,…,columnn=valuen [where condition] 
–例子:

update emp_temp set sal = sal*1.2 where ename = 'smith';

 

事务

–转账

update emp_temp set sal = sal - 500 where ename='jones';
update emp_temp set sal = sal + 500 where ename='smith';

 

commit;
rollback;

create table aaa(id number,name varchar2(20));

insert into emp_temp(empno,ename) values(1111,'cai10');
insert into emp_temp(empno,ename) values(2222,'cai20');
--savepoint 存档点 savepoint sp1; insert into emp_temp(empno,ename) values(3333,'cai30'); insert into emp_temp(empno,ename) values(4444,'cai40'); rollback to sp1;

 

–事务的四个特性:acid
–原子性(a)
–一致性(c)

update emp_temp set sal = 5000 where empno=1111
update emp_temp set sal = sal+1000 where empno = 1111;

 

–隔离性(i)
–持久性(d)

 

用户管理

–1.创建一个账户

create user zhangsan identified by 123456;

 

–2.修改账户的密码

alter user zhangsan identified by 654321;

 

–3.删除一个账户 [cascade 表示是否级联删除]

drop user zhangsan;

 

–4.让一个用户的密码失效

alter user zhangsan password expire;

 

–5.锁定、解锁一个账户

alter user zhangsan account lock;
alter user zhangsan account unlock;

 

–dcl

–grant授予权限
–revoke收回权限

–1.给用户授权
–允许用户登录

grant create session to zhangsan;

 

–给账户授权可以操作表

grant all on scott.emp_temp to zhangsan;

 

–2.取消用户的权限

revoke all on scott.emp_temp from zhangsan;

 

 

–创建序列

create sequence seq_emp_temp
increment by 1
start with 1

 

–使用序列

–通过序列名.next_val
自增序列: select seq_emp_temp.nextval from dual; 
查询序列: select seq_emp_temp.currval from dual; 
使用一次加一行序列加一: insert into emp_temp(empno) values(seq_emp_temp.nextval)

 

视图

登录到sys账户给scott赋予创建视图的权限: grant create view to scott; 

–1.视图的创建

create view v$_emp_dept
as
select ename,sal,job,dname from emp,dept where emp.deptno = dept.deptno;

 

–视图也可以从视图中产生

create view v$_emp_dept_tem
as
select ename,sal from v$_emp_dept

 

–修改视图的数据,就是修改基表的数据

create or replace view v$_emp
as
select empno,ename from emp
with read only

select * from v$_emp;
select * from emp;

update emp set sal = 8888 where empno = 9527;

 

–视图的优点:可以使某些重复出现sql语句变得更为简单
–视图的缺点:1.如果修改基表的结构,视图失效
—           2.增加数据库的维护成本
—           3.视图会被覆盖掉
—           4.一般情况下,不要对视图进行dml操作

–视图的例子

select dname, grade
  from (select deptno, avg_sal, grade
          from (select deptno, avg(sal) avg_sal from emp group by deptno) t,
               salgrade s
         where t.avg_sal between s.losal and s.hisal) t1,
       dept
 where t1.deptno = dept.deptno
   and t1.grade =
       (select min(grade)
          from (select deptno, avg_sal, grade
                  from (select deptno, avg(sal) avg_sal
                          from emp
                         group by deptno) t,
                       salgrade s
                 where t.avg_sal between s.losal and s.hisal));

 

 
–为上面的sql中重复出现的sql语句创建视图

create view v$_dept_avgsal
as
select deptno, avg_sal, grade
          from (select deptno, avg(sal) avg_sal from emp group by deptno) t,
               salgrade s
         where t.avg_sal between s.losal and s.hisal

 

–利用视图替换上面的sql语句

select dname, grade
  from v$_dept_avgsal t1,
       dept
 where t1.deptno = dept.deptno
   and t1.grade =
       (select min(grade)
          from v$_dept_avgsal);

 

–删除视图所表示的基表

create view v$_aaa
as
select * from aaa;

 

–删除表 aaa: drop table aaa;
–查询视图: select * from v$_aaa;
–删除视图 v$_aaa: drop view v$_aaa; 

–ddl

–create

–作用:用来创建数据库的对象(表,视图,序列,索引等)
–语法1: create table tablename(column1 datatype, column2 datatype,…,columnn datatype) 
–例子:

create table t_user(
id number,
username varchar2(30),
password varchar2(30)
);

 

–语法2: create table tablename as subquery 

–例子:

create table emp_e1 as select * from emp where 1=1;

 

–alter

–作用:用来修改数据库的对象(表,视图,序列,索引等)
–语法: alter table tablename [modify/add/drop] 
–例子1:

alter table emp_e1 modify(ename varchar2(10));
insert into emp_e1(empno,ename) values(9898,'cai10cai10cai');

 

–例子2:

alter table emp_e1 add(phone varchar2(11));

 

–例子3:

alter table emp_e1 drop column phone;

select * from emp_e1

 

–drop
–作用:用来删除数据库的对象(表,视图,序列,索引等)
–语法  drop table tablename 
 drop table emp_e1; 

 

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐