文章目錄
(一)創建表空間、用戶以及用戶授權
(二)數據類型介紹和表的創建
(三)修改表結構
(四)數據的增刪改
(五)序列的使用
(一)創建表空間、用戶以及用戶授權
我們只能使用超級管理員用戶來創建表空間,如下:
--創建表空間
create tablespace zzq
datafile 'c:\zzq.dbf' --該路徑爲虛擬機的路徑
size 100m --指定初始容量
autoextend on --允許自動擴容
next 10m; --每次擴大10m
注意:要在最末尾加上分號
如果直接在虛擬機磁盤上刪除表空間(.DBF)是不行的,如下:
我們接下來演示刪除表空間,如下:
--刪除表空間
drop tablespace zzq;
運行了上述語句後,就可以再次回到虛擬機磁盤中刪除了,如下:
接下來創建用戶,如下:
--創建用戶
create user zzq
identified by password --密碼
default tablespace zzq; --指定表空間
最後給用戶授權,否則用戶無法訪問太多的表空間,如下:
--oracle數據庫中常用角色
connect --連接角色,基本角色
resource --開發者模式
dba --超級管理員模式
公司一般會授權給程序員resource權限,也就是開發者模式,但是我們爲了學習,直接授權dba權限
--給用戶授權
grant dba to zzq;
最後切換到zzq用戶,如下:
(二)數據類型介紹和表的創建
注意:
- 我們比較常用的是varchar2,因爲它可以存放可變長度的字符串
- oracle本身不支持存放小數,但是可以使用NUMBER實現存放小數
接下來創建一個表,如下:
--創建一個person表
create table person(
pid number(20),
pname varchar2(10)
);
(三)修改表結構
我們演示一下添加一列,如下:
--添加一列
alter table person add (gender number(1));
注意:
- 只對一列做修改,add後面的括號可以省略
- 如果想添加多列,可以在括號裏面用逗號做分隔
下面演示修改列類型,如下:
--修改列類型
alter table person modify (gender char(1));
注意:如果想修改多列,同樣可以用逗號做分隔
下面演示修改列名,如下:
--修改列名稱
alter table person rename column gender to sex;
最後演示刪除一列,如下:
--刪除一列
alter table person drop column sex;
(四)數據的增刪改
首先演示添加數據,如下:
--添加一條記錄
insert into person (pid,pname) values (1,'小明');
commit;
然後演示修改數據,如下:
--修改一條記錄
update person set pname = '小紅' where pid = 1;
commit;
最後演示刪除數據,一共有三種刪除方法,如下:
delete from person; --刪除表中全部記錄
drop table person; --刪除表結構
truncate table person; --先刪除表,再次創建表,效果等同於刪除表中全部記錄
注意:
- 在數據量大的情況下,尤其在表中帶有索引的情況下,truncate操作的效率高
- 索引是後面會學的,索引可以提高查詢效率,但是會影響增刪改效率
我們直接使用第三種,如下:
truncate table person;
(五)序列的使用
我們先看看這個問題,如下:
我們發現增加記錄的時候我們是自己手動輸入主鍵的,這樣明顯是不合理的,我們可以用序列去改進
序列:
- 默認從1開始,依次遞增,主要用來給主鍵賦值使用
- 序列不屬於任何一張表,但是可以在邏輯上跟表做綁定
我們接下來創建一個序列,如下:
create sequence s_person;
我們查看剛纔創建的序列,如下:
select s_person.nextval from dual;
注意:
- 雖然序列不屬於任何表,但是oracle查詢必須要帶上from關鍵字,而from關鍵字後面不能爲空,所以要按規則去寫上dual
- dual是虛表,只是爲了補全語法,沒有任何意義
- s_person.nextval是下一個主鍵應該取的值意思,首次運行就是1,之後每次運行就遞增
- 執行了第一次之後,可以使用s_person.currtval查看當前值
效果如下:
我們使用序列給主鍵賦值,如下:
--添加一條記錄,使用序列給主鍵賦值
insert into person (pid,pname) values (s_person.nextval,'小明');
效果如下:
最後瞭解一下語法:
CREATE SEQUENCE 序列名
[INCREMENT BY n] --每次增長多少
[START WITH n] --從第幾開始
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --最大值/最小值,用不上這個
[{CYCLE|NOCYCLE}] --循環,不要用循環,不如會重複
[{CACHE n|NOCACHE}]; --提前緩存好,可以提高插入的效率