1、關於主鍵:在建表時指定primary key字句即可:
create table test(
id number(6) primary key,
name varchar2(30)
);
如果是對於已經建好的表,想增加主鍵約束,則類似語法:
alter table test add constraint pk_id primary key(id);
其中add constraint 和 primary key是關鍵字,pk_id是主鍵名稱,自定義的額,只要不重復即可。
2、關於id自增功能,也很簡單,而且比較靈活。
(1)首先建立一個序列(就是每次查詢會自動增加值的絕不重復的對象,比如每次加1或每次加10)。語法:
CREATE sequence 序列名
[INCREMENT by n] --每次加幾
[start with n] --序列從幾開始
[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] --最小值、最大值的限制
比如CREATE sequence s_test start with 1 increment by 1; --就是建立了額一個從1開始每次加1的序列。
訪問序列時,用 序列名稱.nextval的語法。
比如對於上表,如果想要id字段實現自增。則在每次插入記錄時,使用下面類似的語法(前提是表和序列已經建好)。
insert into test values (s_test.nextval,'張三');
當然,你也可以自動一些,對表的插入操作,建立一個觸發器,每當有數據插入時,觸發器自動修改id值為序列的新值,這樣就完全實現自增id功能了。不過其實也沒有這個必要。因為觸發器如果建多了,有時會比較混亂,不易管理。
3、創建自增觸發器
create or replace trigger TRI_TM_USER
before insert on TM_USER
for each row when (new.id is=0) --when (new.id is=0) 不需要
begin
select SE_TM_USER.nextval into :new.id from dual;
end ;
//一般情況下會直接在程序里去調用序列,因為數據量太大的話,對表逐行掃描的話會影響性能
帶有自增觸發器的插入:
TM_USER(ID,NAME,Constraint PRI_TM_USER PRIMARY KEY(ID) )
INSERT INTO TM_USER(NAME) VALUES ('NO id');
INSERT INTO TM_USER(ID,NAME) VALUES (1, 'id no use');
ID NAME
---------- --------------------
1 NO id
2 id no use
4、創建結構一樣的表
//創建與原表結構一樣的表(不帶數據)
CREATE TABLE TP_STUDENT_BACKUP AS SELECT * FROM TP_STUDENT WHERE 1=0;
//創建與原表結構一樣的表(帶數據)
CREATE TABLE TP_STUDENT_BACKUP AS SELECT * FROM TP_STUDENT WHERE 1=1;