关于oracle:复杂一点的SQL语句Oracle-DDL和DML

5次阅读

共计 4463 个字符,预计需要花费 12 分钟才能阅读完成。

DDL:对表或者表的属性进行了扭转

create:创立表创立用户创立视图

创立表

create table student(id int,score int) ;

student 前面与括号之间能够有空格能够没有

创立用户

create user liuyifei identified by 4852396;

drop:删除整个表、删除指定的用户、删除指定的存储空间

drop table table_name;
drop user user_name;

-- 删除空的表空间,然而不蕴含物理文件
drop tablespace tablespace_name;
-- 删除非空表空间,然而不蕴含物理文件
drop tablespace tablespace_name including contents;
-- 删除空表空间,蕴含物理文件
drop tablespace tablespace_name including datafiles;
-- 删除非空表空间,蕴含物理文件
drop tablespace tablespace_name including contents and datafiles;
-- 如果其余表空间中的表有外键等束缚关联到了本表空间中的表的字段,就要加上 CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

truncate

删除表中的所有数据,然而表还是存在的。和 drop 的先后参见如下:

SQL> create table st1(id int);

表已创立。SQL> truncate table st1;

表被截断。SQL> drop table st1;

表已删除。SQL> create table st1(id int);

表已创立。SQL> drop table st1;

表已删除。SQL> truncate table st1;
truncate table st1
               *
第 1 行呈现谬误:
ORA-00942: 表或视图不存在

<!–more–>

alter:减少删除批改字段

SQL> create table s1(id int,a int,score int);

表已创立。SQL> alter table s1 add name varchar2(10);

表已更改。SQL>
SQL> desc s1;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(38)
 A                                                  NUMBER(38)
 SCORE                                              NUMBER(38)
 NAME                                               VARCHAR2(10)

SQL> alter table s1 drop a;
alter table s1 drop a
                    *
第 1 行呈现谬误:
ORA-00905: 缺失关键字


SQL> alter table s1 drop column a;

表已更改。SQL> alter table s1 rename to s2;

表已更改。SQL> desc s2;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(38)
 SCORE                                              NUMBER(38)
 NAME                                               VARCHAR2(10)

SQL> desc s1;
ERROR:
ORA-04043: 对象 s1 不存在


SQL> alter table s2 rename column name to sname;

表已更改。SQL> desc s2;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(38)
 SCORE                                              NUMBER(38)
 SNAME                                              VARCHAR2(10)

DML:只对表的数据扭转,没有扭转表的属性

DML 操作之后要进行 commit 操作才会更改数据库。

select:查问

SQL> select score,sname from s2 where id='2';

     SCORE SNAME
---------- ----------
        99 ayun

insert:插入记录

SQL> insert into s2 values(1,100,'aming');

已创立 1 行。SQL> insert into s2 values(2,99,'ayun');

已创立 1 行。SQL> insert into s2 values(3,79,'ahe');

已创立 1 行。

delete:删除记录,不扭转表的属性。

SQL> delete from s2 where score='100';

已删除 1 行。SQL> select * from s2;

        ID      SCORE SNAME
---------- ---------- ----------
         2         99 ayun
         3         79 ahe

SQL> delete from s2;

已删除 2 行。SQL> select * from s2;

未选定行

SQL> desc s2;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------

 ID                                                 NUMBER(38)
 SCORE                                              NUMBER(38)
 SNAME                                              VARCHAR2(10)

update:更新记录

SQL> update s2 set score=100 where sname='ahe';

已更新 1 行。SQL> select * from s2;

        ID      SCORE SNAME
---------- ---------- ----------
         1        100 aming
         2         99 ayun
         3        100 ahe

DCL:只扭转属性

grant:受权

revoke:发出权限

grant 语法:GRANT privilege[, ...] ON object[, ...] TO {PUBLIC | GROUP group| username}

权限 privilege:select:查问
    insert:插入
    update:更新
    delete:删除
    rule:all:所有

grant select,insert,update on tablename to public;
给所有用户授予查问、插入、更新 tablename 表的权限
revoke select,insert,update on tablename from public;// 发出所有用户查问、插入、更新 tablename 表的权限

object:
    table:表
    view:视图
    sequence:序列
    index:索引

grant select,insert,update on tablename,viewname,sequencename,indexname to public;

public: 对所有用户凋谢权限
GROUP groupname: 对该组所有用户凋谢权限
username:对指定用户凋谢权限

给用户受权,connect 权限和 resource 权限。

不给新建用户授予 connect 权限,新建用户无奈通过 SID 或 SERVICE_NAME 连贯数据库实例。

不给新建用户授予 resource 权限,新建用户无奈创立表。

SQL>
SQL> create user liuyifei identified by a4852396;

用户已创立。SQL> conn liuyifei/a4852396;
ERROR:
ORA-01045: user LIUYIFEI lacks CREATE SESSION privilege; logon denied


正告: 您不再连贯到 ORACLE。SQL> show user;
USER 为 ""
SQL> conn / as sysdba;
已连贯。SQL> show user;
USER 为 "SYS"

SQL> grant connect to liuyifei;

受权胜利。SQL> conn liuyifei/a4852396;
已连贯。SQL> show user;
USER 为 "LIUYIFEI"

SQL> create table stu(id int);
create table stu(id int)
*
第 1 行呈现谬误:
ORA-01031: 权限有余


SQL> conn / as sysdba;
已连贯。SQL> show user;
USER 为 "SYS"
SQL> grant resource to liuyifei;

受权胜利。SQL> conn liuyifei/a4852396;
已连贯。SQL> create table stu(id int);

表已创立。

查看指定用户有哪些零碎权限

这项操作只能够是 dba 查看,普通用户是不能查看的,即便是查看本人的。上面的代码曾经验证了这个问题。

SQL> select * from dba_tab_privs where grantee=uper('liuyifei');
select * from dba_tab_privs where grantee=uper('liuyifei')
              *
第 1 行呈现谬误:
ORA-00942: 表或视图不存在


SQL> select * from dba_roles_privs where grantee=uper('liuyifei');
select * from dba_roles_privs where grantee=uper('liuyifei')
              *
第 1 行呈现谬误:
ORA-00942: 表或视图不存在


SQL> show user;
USER 为 "LIUYIFEI"
SQL> conn / as sysdba;
已连贯。SQL> select * from dba_tab_privs where grantee=upper('liuyifei');

未选定行

SQL> select * from dba_role_privs where grantee=upper('liuyifei');

GRANTEE                        GRANTED_ROLE                   ADM DEF
------------------------------ ------------------------------ --- ---
LIUYIFEI                       CONNECT                        NO  YES
LIUYIFEI                       RESOURCE                       NO  YES

附录 1:

truncate 和 delete 的区别

truncate 会发出表空间,delete 不会发出表空间

附录 2:

sys 用户和 system 用户的区别:

SYS 用户,缺省始终创立,且未被锁定,领有数据字典及其关联的所有对象

SYSTEM 用户,缺省始终创立,且未被锁定,能够拜访数据库内的所有对象


记得帮我点赞哦!

精心整顿了计算机各个方向的从入门、进阶、实战的视频课程和电子书,依照目录正当分类,总能找到你须要的学习材料,还在等什么?快去关注下载吧!!!

朝思暮想,必有回响,小伙伴们帮我点个赞吧,非常感谢。

我是职场亮哥,YY 高级软件工程师、四年工作教训,回绝咸鱼争当龙头的斜杠程序员。

听我说,提高多,程序人生一把梭

如果有幸能帮到你,请帮我点个【赞】,给个关注,如果能顺带评论给个激励,将不胜感激。

职场亮哥文章列表:更多文章

自己所有文章、答复都与版权保护平台有单干,著作权归职场亮哥所有,未经受权,转载必究!

正文完
 0