Oracle 常用sql场景应用(未完待续......)
--1、創建一張學生信息表stuinfo,字段包括學號、姓名、性別、年齡、入學日期
SQL>CREATE TABLE stuinfo (snochar(4),sname varchar2(10),sex int,age int,sdate date);
Table created
?
--2、創建stuinfo表主鍵約束
SQL>ALTER TABLE stuinfo ADD CONSTRAINT pk_stu PRIMARY KEY (SNO);
Table altered
Executed in 0.952 seconds
?
--3、將入學日期增加sysdate默認值,需要注意的是sysdate后必須加not null
SQL>ALTER TABLE stuinfo MODIFY sdate DEFAULT SYSDATE NOT NULL;
Table altered
Executed in 0.546 seconds
?
--4、添加5條模擬數據
SQL> insert into stuinfo values('001','lilei','0','23',default);
SQL> insert into stuinfo values ('002','xiaofang','1','22',to_date('2014-09-01','yyyy-mm-dd'));
SQL> insert into stuinfo values('003','weiwei','1','24',to_date('2008-08-08','yyyy-mm-dd'));
SQL> insert into stuinfo values('004','xiaochao','0','27',to_date('2009-10-08','yyyy-mm-dd'));
SQL> insert into stuinfo values('005','tom','0','28',to_date('2007-03-08','yyyy-mm-dd'));
?
--5、檢索stuinfo表
SQL> select * from stuinfo;
?
--6、創建一張成績表,列內容包括學號、課程代碼、成績,其中學號是本表的外鍵
SQL>CREATE TABLE score (gnochar(4),class int,score NUMBER(4,2),CONSTRAINT FK_NO FOREIGN KEY (gno)REFERENCES stuinfo(sno));
Table created
?
--7、測試向score表中插入sno在stuinfo表中不存在的記錄
SQL>insert into score values('006',1212,96.33);
ORA-02291: 違反完整約束條件 (EPM.FK_NO) - 未找到父項關鍵字
?
--8、對于存在外鍵的表,插入或者更新時都需要與父表關聯,所以必須在外鍵處創建索引
SQL>CREATE INDEX inx_score ON score(gno);
Index created
Executed in 0.062 seconds
?
--9、將stuinfo表重命名為student
SQL>ALTER TABLE stuinfo RENAME TO student;
?
--10、為student表增加檢查——age between 1 and 120
SQL> ALTER TABLE student ADD CONSTRAINTage_check CHECK(age>1 and age<=120);
?
--11、測試向student表插入age是126的數據
SQL> INSERT INTO student VALUES('006','dushuai',0,'126',to_date('1989-01-05','yyyy-mm-dd'));
ORA-02290: 違反檢查約束條件 (EPM.AGE_CHECK)
?
--12、將student表中學號為006的學生年齡更新為26
SQL> UPDATE student SET age=26 WHEREsno='006';
1 row updated
Executed in 0.078 seconds
?
--13、測試對student進行刪除,檢查能夠正常刪除
SQL>DROP TABLE student;
ORA-02449: 表中的唯一/主鍵被外鍵引用
說明:如果表中的主鍵或唯一值被其他表外鍵引用,要么先刪除外鍵或者在drop后加cascade constraint 代表進行級聯刪除;
正確SQL>DROP TABLE student CASCADE CONSTRAINT;
?
--14、oracle閃回技術,即從回收站恢復被drop的表
SQL> FLASHBACK TABLE student TO BEFORE DROP;
Done
Executed in 0.296 seconds
?
--15、查詢回收站中的內容
SQL>SELECT r.original_name,r.type,r.droptime FROM recyclebin r;
?
--16、為表添加整體注釋
SQL>COMMENT ON TABLE student IS '學生信息表';
?
--17、為student表中的age列添加注釋
SQL>COMMENT ON COLUMN student.age IS '年齡需要大于1歲并小于等于120歲';
?
--18、創建一張表,只使用student表中的表結構,而不使用數據
SQL>CREATE TABLE student_temp AS SELECT* FROM student WHERE 1=2;
說明:因為1=2條件不成立,所以只將student表的結構復制給了新表;
??????相同道理,如果條件成立為真,則會將表結構和數據都會復制給新表!
??????新表只能繼承舊表的結構和數據,無法繼承主鍵、外鍵、索引等約束;
?
--19、設置表為只讀模式
SQL>ALTER TABLE student_temp1 READ ONLY;
說明:表設置為只讀后,無法進行插入、更新等DML操作,但允許刪除表;
SQL>INSERT INTO student_temp1VALUES('007','wangzi','0','98',TO_DATE(SYSDATE,'YYYY-MM-DD'));
ORA-12081: 不允許對表"EPM"."STUDENT_TEMP1" 進行更新操作
?
SQL> DROP TABLE student_temp1;
Table dropped
Executed in 1.7 seconds
?
--20、將只讀表恢復成讀寫狀態
SQL> ALTER TABLE student_temp1 READ WRITE;
Table altered
Executed in 0.265 seconds
?
--21、student_temp1表新增備注列,類型為varchar2(200)
SQL> ALTER TABLE student_temp1 ADD note varchar2(200);
Table altered
Executed in 1.264 seconds
?
--22、將student_temp1表中的note表設置為不使用(unused)
SQL> ALTER TABLE student_temp1 SET UNUSED(note);
Table altered
Executed in 1.794 seconds
說明:使用set unused可以對表中的列進行標注,同時減少drop column的大量redo
注意set unused后的列數據無法恢復(除非通過數據備份),然后在系統開銷較小的時候,對標記set unused的表列進行刪除操作,格式如下:
SQL> ALTER TABLE student_temp1 DROPUNUSED COLUMNS;?
Table altered?
Executed in 2.247 seconds
--23、Oracle新建表時應避免使用系統保留關鍵字,如果確實需要使用應當需要使用雙引號進行包圍并且在使用時也需要帶雙引號進行引用
SQL>ALTER TABLE t1 RENAME TO "select";
SQL>SELECT * FROM "select";
說明:創建表時如果表名使用的是小寫,在oracle數據字典中將自動轉化為大寫,用戶使用select訪問的時候表名使用小寫或大寫都是同等效果,但是如果使用雙引號,則大寫的雙引號可以正常訪問,而小寫的就會失敗,因為雙引號具有固定、鎖定的含義;即表名t == T == "T" != "t"
即表名t == T == "T" != "t"
轉載于:https://blog.51cto.com/dushuai/1569765
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Oracle 常用sql场景应用(未完待续......)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何扩展开发团队(转)
- 下一篇: 第十周项目1-程序填空与阅读(一)