1. 程式人生 > 實用技巧 >複雜一點的SQL語句:Oracle DDL和DML

複雜一點的SQL語句:Oracle DDL和DML

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: 表或檢視不存在

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高階軟體工程師、四年工作經驗,拒絕鹹魚爭當龍頭的斜槓程式設計師。

聽我說,進步多,程式人生一把梭

如果有幸能幫到你,請幫我點個【贊】,給個關注,如果能順帶評論給個鼓勵,將不勝感激。

職場亮哥文章列表:更多文章

本人所有文章、回答都與版權保護平臺有合作,著作權歸職場亮哥所有,未經授權,轉載必究!