柚子快報邀請碼778899分享:數(shù)據(jù)庫 【Oracle】創(chuàng)建表
柚子快報邀請碼778899分享:數(shù)據(jù)庫 【Oracle】創(chuàng)建表
目錄
方法一:CREATE TABLE 語法
創(chuàng)建表示例1:創(chuàng)建stuinfo(學(xué)生信息表)
創(chuàng)建表示例2:添加stuinfo(學(xué)生信息表)約束
方法二:CREATE TABLE AS 語法
創(chuàng)建表示例3:
創(chuàng)建表示例4:實現(xiàn)對select查詢的結(jié)果進行快速備份
創(chuàng)建表示例5:復(fù)制另一個表的選定列
創(chuàng)建表示例6:從多個表復(fù)制選定的列
方法一:CREATE TABLE 語法
CREATE TABLE schema_name.table_name (
????column_1 data_type column_constraint,
????column_2 data_type column_constraint,
????...
????table_constraint
);
首先,在CREATE TABLE子句中,指定新表所屬的表名和模式名稱。
其次,在圓括號內(nèi)列出所有列。如果一個表有多個列,則需要用逗號分隔每個列的定義。列定義包括列名,后跟它的數(shù)據(jù)類型,例如NUMBER,VARCHAR2和列約束,如NOT NULL,主鍵,約束檢查等。
注意:請注意用戶權(quán)限問題,必須具有CREATE TABLE系統(tǒng)特權(quán)才能在模式中創(chuàng)建新表,并使用CREATE ANY TABLE系統(tǒng)特權(quán)在其他用戶的模式中創(chuàng)建新表。除此之外,新表的所有者必須具有包含新表或UNLIMITED TABLESPACE系統(tǒng)特權(quán)的表空間的配額。
在我們之前創(chuàng)建的JT_CS用戶下創(chuàng)建表,一定要有CREATE TABLE權(quán)限,不然無法創(chuàng)建數(shù)據(jù)表。
創(chuàng)建表示例1:創(chuàng)建stuinfo(學(xué)生信息表)
?--實例建表stuinfo
?create table JT_CS.stuinfo
?(
? ?stuid??????varchar2(11) not null,--學(xué)號:'S'+班號(7位數(shù))+學(xué)生序號(3位數(shù))(不能為空)SC200101001
? ?stuname????varchar2(50) not null,--學(xué)生姓名(不能為空)
? ?sex????????char(1) not null,--性別(不能為空)1(男)、2(女)
? ?age????????number(2) not null,--年齡(不能為空)
? ?classno????varchar2(7) not null,--班號:'C'+年級(4位數(shù))+班級序號(2位數(shù))(不能為空)C200101
? ?stuaddress varchar2(100) default '地址未錄入',--地址 (不填或為空時默認填入‘地址未錄入‘)
? ?grade??????char(4) not null,--年級(不能為空)
? ?enroldate??date,--入學(xué)時間
? ?idnumber???varchar2(18) default '身份證未采集' not null--身份證(不能為空)
?)
?-- Add comments to the table
?--comment on table 是給表名進行注釋
?comment on table JT_CS.stuinfo
? ?is '學(xué)生信息表';
?-- Add comments to the columns
?--comment on column 是給表字段進行注釋。
?comment on column JT_CS.stuinfo.stuid
? ?is '學(xué)號';
?comment on column JT_CS.stuinfo.stuname
? ?is '學(xué)生姓名';
?comment on column JT_CS.stuinfo.sex
? ?is '學(xué)生性別';
?comment on column JT_CS.stuinfo.age
? ?is '學(xué)生年齡';
?comment on column JT_CS.stuinfo.classno
? ?is '學(xué)生班級號';
?comment on column JT_CS.stuinfo.stuaddress
? ?is '學(xué)生住址';
?comment on column JT_CS.stuinfo.grade
? ?is '年級';
?comment on column JT_CS.stuinfo.enroldate
? ?is '入學(xué)時間';
?comment on column JT_CS.stuinfo.idnumber
? ?is '身份證號';
通過上面Crate Table命令創(chuàng)建了stuinfo學(xué)生信息表后,還可以繼續(xù)給表添加相應(yīng)的約束來保證表數(shù)據(jù)的準(zhǔn)確性。比如:學(xué)生的年齡不能存在大齡的歲數(shù),可能是錯誤數(shù)據(jù)、性別不能填入不是1(男)、2(女)之外的數(shù)據(jù)等。
創(chuàng)建表示例2:添加stuinfo(學(xué)生信息表)約束
--添加約束
--把stuid當(dāng)做主鍵,主鍵字段的數(shù)據(jù)必須是唯一性的(學(xué)號是唯一的)
alter table JT_CS.STUINFO
??add constraint pk_stuinfo_stuid primary key (STUID);
-- --給字段年齡age添加約束,學(xué)生的年齡只能0-60歲之內(nèi)的
alter table JT_CS.STUINFO
??add constraint ch_stuinfo_age
??check (age>0 and age<=60);
??
--性別不能填入不是1(男)、2(女)之外的數(shù)據(jù)
alter table JT_CS.STUINFO
??add constraint ch_stuinfo_sex
??check (sex='1' or sex='2');
--年級
alter table JT_CS.STUINFO
??add constraint ch_stuinfo_GRADE
??check (grade>='2000' and grade<='9999');
方法二:CREATE TABLE AS 語法
除了上邊Create?Table 語句可以創(chuàng)建數(shù)據(jù)表以外,使用Create Table AS語句一樣可以通過復(fù)制現(xiàn)有表的列從現(xiàn)有表來創(chuàng)建新表。同時,Create Table 表名 as select 語句也可以實現(xiàn)對select查詢的結(jié)果進行快速備份。
--語法:SELECT語句可指定列或添加where條件
CREATE TABLE new_table??
AS (SELECT * FROM old_table);
創(chuàng)建表示例3:
CREATE TABLE JT_CS.STUINFO_01 AS (SELECT * FROM JT_CS.STUINFO);
創(chuàng)建表示例4:實現(xiàn)對select查詢的結(jié)果進行快速備份
新創(chuàng)建的表命名為STUINFO_02,并具有與STUINFO相同的表字段和記錄(性別參數(shù)小于2的所有記錄);
CREATE TABLE JT_CS.STUINFO_02 AS (SELECT * FROM JT_CS.STUINFO WHERE sex<2);
創(chuàng)建表示例5:復(fù)制另一個表的選定列
-----語法:
CREATE TABLE new_table AS (SELECT column_1, column2, ... column_n FROM old_table);?
-----示例:創(chuàng)建新表,指定STUNAME, SEX,AGE,CLASSNO四列,并選擇SEX小于2的記錄。
CREATE TABLE scott.STUINFO_03 AS (SELECT stuname, sex,age,classno FROM??scott.STUINFO WHERE sex<2);
創(chuàng)建表示例6:從多個表復(fù)制選定的列
-----語法:
CREATE TABLE new_table AS (SELECT column_1, column2, ... column_n FROM old_table_1, old_table_2, ... old_table_n);?
-----示例:
CREATE TABLE scott.STUINFO_04 AS (SELECT scott.STUINFO.stuname, scott.STUINFO.sex,??scott.STUINFO_01.age,scott.STUINFO_01.classno FROM scott.STUINFO,
scott.STUINFO_01 WHERE scott.STUINFO.stuname = scott.STUINFO_01.stuname AND??scott.STUINFO.sex < 2);
柚子快報邀請碼778899分享:數(shù)據(jù)庫 【Oracle】創(chuàng)建表
相關(guān)鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。