Oracle SQL建表小結(jié)
OracleSQL建表小結(jié)
一下例子在oracle10g中運(yùn)行成功。一,create創(chuàng)表。Createtable表名
(列名數(shù)據(jù)類型【列級(jí)別完整約束】,列名數(shù)據(jù)類型【列級(jí)別完整約束】,。。。。。。。。!颈砑(jí)別的約束】);例子1
createtableteacher(idchar(20)primarykey,namechar(20)unique,
sexchar(4)constraintt_sexCHECK(sex="男"orsex="女"),ageintegerconstraintt_agecheck(age>=1andageSdeptchar(20));
createtableCourse(Cnochar(5)primarykey,Cnamechar(20)notnull,CPNOchar(5),Ccreditinteger,
FOREIGNKEYCPNOREFERENCESCourse(Cno));
createtableSC(Snochar(17),Cnochar(5),Gradenumeric(5,2),primarykey(Sno,Cno),
foreignkey(Sno)referencesStudent(Sno),foreignkey(Cno)referencesCourse(Cno));
上面例子1是創(chuàng)建一個(gè)teacher表以id為主鍵,名字唯一,性別約束只能是男或者女,年齡在0到300間。
例子2是創(chuàng)建學(xué)生表和課程表,然后建立SC。這里主要學(xué)習(xí)如何建立外鍵和組合主鍵。
對(duì)于表級(jí)別約束例子2中Cpno的值參考Cno。(Cpno是選課的id)二,alter修改表
如果已經(jīng)建好表了,但是又要添加列,約束。。。--添加列
Altertable表名add列名數(shù)據(jù)類型
例子1altertablecourseaddCdescchar(200);--刪除列
Altertable表名dropcolumn列名例子2altertablecoursedropcolumncdesc;--修改列的數(shù)據(jù)類型
Altertable表名altercolumn列名數(shù)據(jù)類型;--修改字符串的長(zhǎng)度
altertablecoursemodifyCdescchar(500);--修改主鍵
ALTERTABLEtablename--修改表
ADDCONSTRAINTtb_PRIMARYPRIMARYKEYCLUSTERED(列名)/*將你要設(shè)置為主鍵約束的列*/
--修改約束
ALTERTABLE銷售表--修改表
ADDCONSTRAINTck_sl--創(chuàng)建檢查約束
CHECK(數(shù)量>=1and數(shù)量
--修改外鍵altertable表名
addconstraint外鍵名稱foreignkey(字段)references關(guān)系表名(關(guān)系表內(nèi)字段)
例子altertablecourseaddconstraintcpforeignkey(cpno)referencescourse(cno);--創(chuàng)建唯一約束
AltertableCourseaddunique(Cname)--刪除約束
Altertable表名dropconstraint約束名--啟用約束
Altertable表名enableconstraint約束名
擴(kuò)展閱讀:oracle數(shù)據(jù)庫(kù)創(chuàng)建表設(shè)計(jì)與修改(個(gè)人總結(jié)超有用)
CREATETABLEcd_study_detail(
row_idVARCHAR2(20)UNIQUE,
id_cardVARCHAR2(20)PRIMARYKEY,
study_dateDATECHECK(study_dateLIKE"%-%-%"),study_descVARCHAR2(50),study_scoNUMBER(10,1),
CONSTRAINTdtudy_role_fkFOREIGNKEY(id_card)REFERENCESneu_study(id_card));
CREATETABLEneu_study(
row_idVARCHAR2(20)UNIQUE,
id_cardVARCHAR2(20)PRIMARYKEY,
birth_dayDATECHECK(birth_dayLIKE"%-%-%"),role_idVARCHAR2(20),per_remarkVARCHAR2(255),
base_salryNUMBER(10,4)CHECK(base_salryBETWEEN500AND201*),fact_salryNUMBER(10,4),
create_dateDATEDEFAULTSYSDATECHECK(create_dateLIKE"%-%-%"),last_up_dateDATECHECK(last_up_dateLIKE"%-%-%"),
CONSTRAINTdtudy_role_fkFOREIGNKEY(字段)REFERENCES表名(字段)//字段后直接加references表名(字段名)創(chuàng)建外鍵更好)
DROPTABLEneu_study;
CREATETABLEROLE(
cd_roleVARCHAR2(20)PRIMARYKEY,role_nameVARCHAR2(20)UNIQUE)
SELECT*FROMneu_studySELECT*FROMROLE
INSERTINTOROLEVALUES("&請(qǐng)輸入部門編號(hào)","&請(qǐng)輸入部門姓名");
CREATESEQUENCEseq_studySTARTWITH1INCREMENTBY1;DROPSEQUENCEseq_study;
INSERTINTOneu_study
VALUES(seq_study.NEXTVAL,"&請(qǐng)輸入身份證號(hào)",
to_date("&請(qǐng)輸入生日","yyyy-mm-dd"),"&請(qǐng)輸入部門編號(hào)","&備注",&請(qǐng)輸入基本工資,&請(qǐng)輸入當(dāng)前實(shí)際工資,
to_date("&請(qǐng)輸入創(chuàng)建工資的日期","yyyy-mm-dd"),
to_date("&請(qǐng)輸入最后更新工資的日期","yyyy-mm-dd"));
INSERTINTOneu_study
VALUES(seq_study.NEXTVAL,"2100902930",
to_date("1986-02-03","yyyy-mm-dd"),"1102","無(wú)",201*,600,
to_date("201*/11/10","yyyy-mm-dd"),to_date("201*/11/16","yyyy-mm-dd"));COMMIT;
SELECT*FROMneu_study;
//Oracle的基本操作+Oracle字段類型(zz)在Oracle關(guān)于時(shí)間屬性的建表
Example:
createtablecourses(
cidvarchar(20)notnullprimarykey,
cnamevarchar(20)notnull,
ctypeinteger,
ctimedateDEFAULTSYSDATE,
cscorefloatnotnull)
insertintocoursesvalues("ss01","java",0,TO_DATE("201*-8-28","yyyy-mm-dd"),94)
insertintocoursesvalues("ss02","music",1,TO_DATE("201*-8-27","yyyy-mm-dd"),88)
insertintocoursesvalues("ss03","c++",0,TO_DATE("201*-8-29","yyyy-mm-dd"),78)
在PL/SQL建表以后,記得commit,才能在pl/sql上查詢到數(shù)據(jù)。對(duì)于日期類型
將字符串轉(zhuǎn)換成日期:
InsertIntotable(col_date)Values(to_date(‘201*-01-16’,’yyyy-mm-dd’));將日期轉(zhuǎn)換成字符串:
InsertIntotable(col_char)Values(to_char(Date,’format’));
select*fromcourseswherectime>to_date("201*-8-28","yyyy-mm-dd")
創(chuàng)建表
1.ORACLE常用的字段類型ORACLE常用的字段類型有
VARCHAR2(size)可變長(zhǎng)度的字符串,必須規(guī)定長(zhǎng)度CHAR(size)固定長(zhǎng)度的字符串,不規(guī)定長(zhǎng)度默認(rèn)值為1
NUMBER(p,s)數(shù)字型p是位數(shù)總長(zhǎng)度,s是小數(shù)的長(zhǎng)度,可存負(fù)數(shù)最長(zhǎng)38位.不夠位時(shí)會(huì)四舍五入.DATE日期和時(shí)間類型
LOB超長(zhǎng)字符,最大可達(dá)4GCLOB超長(zhǎng)文本字符串BLOB超長(zhǎng)二進(jìn)制字符串
BFILE超長(zhǎng)二進(jìn)制字符串,保存在數(shù)據(jù)庫(kù)外的文件里是只讀的.
數(shù)字字段類型位數(shù)及其四舍五入的結(jié)果原始數(shù)值1234567.89
數(shù)字字段類型位數(shù)存儲(chǔ)的值Number1234567.89Number(8)12345678Number(6)錯(cuò)
Number(9,1)1234567.9Number(9,3)錯(cuò)Number(7,2)錯(cuò)
Number(5,-2)1234600Number(5,-4)1230000Number(*,1)1234567.9
2.創(chuàng)建表時(shí)給字段加默認(rèn)值和約束條件創(chuàng)建表時(shí)可以給字段加上默認(rèn)值
例如:日期字段DEFAULTSYSDATE
這樣每次插入和修改時(shí),不用程序操作這個(gè)字段都能得到動(dòng)作的時(shí)間
創(chuàng)建表時(shí)可以給字段加上約束條件例如:非空NOTNULL不允許重復(fù)UNIQUE關(guān)鍵字PRIMARYKEY按條件檢查CHECK(條件)
外鍵REFERENCES表名(字段名)
3.創(chuàng)建表的例子
CREATETABLEDEPT(
EPTNONUMBER(2)CONSTRAINTPK_DEPTPRIMARYKEY,DNAMEVARCHAR2(14),LOCVARCHAR2(13));
CREATETABLEregion(
IDnumber(2)NOTNULLPRIMARYKEY,postcodenumber(6)default"0"NOTNULL,areanamevarchar2(30)default""NOTNULL);
4.創(chuàng)建表時(shí)的命名規(guī)則和注意事項(xiàng)
1)表名和字段名的命名規(guī)則:必須以字母開頭,可以含符號(hào)A-Z,a-z,0-9,_,$,#2)大小寫不區(qū)分
3)不用SQL里的保留字,一定要用時(shí)可用雙引號(hào)把字符串括起來(lái).4)用和實(shí)體或?qū)傩韵嚓P(guān)的英文符號(hào)長(zhǎng)度有一定的限制
注意事項(xiàng):
1)建表時(shí)可以用中文的字段名,但最好還是用英文的字段名
2)創(chuàng)建表時(shí)要把較小的不為空的字段放在前面,可能為空的字段放在后面3)建表時(shí)如果有唯一關(guān)鍵字或者唯一的約束條件,建表時(shí)自動(dòng)建了索引4)一個(gè)表的最多字段個(gè)數(shù)也是有限制的,254個(gè).
5.約束名的命名規(guī)則和語(yǔ)法
約束名的命名規(guī)則約束名如果在建表的時(shí)候沒(méi)有指明,系統(tǒng)命名規(guī)則是SYS_Cn(n是數(shù)字)約束名字符串的命名規(guī)則同于表和字段名的命名規(guī)則
6.使用約束時(shí)的注意事項(xiàng)
約束里不能用系統(tǒng)函數(shù),如SYSDATE和別的表的字段比較可以用本表內(nèi)字段的比較
想在事務(wù)處理后,做約束的檢查
SQL>altersessionsetconstraintsdeferred.
7.由實(shí)體關(guān)系圖到創(chuàng)建表的例子s_dept
前提條件:已有region表且含唯一關(guān)鍵字的字段idSQL>CREATETABLEs_dept(idNUMBER(7)
CONSTRAINTs_dept_id_pkPRIMARYKEY,nameVARCHAR2(25)
CONSTRAINTs_dept_name_nnNOTNULL,region_idNUMBER(7)
CONSTRAINTs_dept_region_id_fkREFERENCESregion(id),
CONSTRAINTs_dept_name_region_id_ukUNIQUE(name,region_id));
8.較復(fù)雜的創(chuàng)建表例子
SQL>CREATETABLEs_emp(idNUMBER(7)
CONSTRAINTs_emp_id_pkPRIMARYKEY,last_nameVARCHAR2(25)
CONSTRAINTs_emp_last_name_nnNOTNULL,first_nameVARCHAR2(25),useridVARCHAR2(8)
CONSTRAINTs_emp_userid_nnNOTNULLCONSTRAINTs_emp_userid_ukUNIQUE,start_dateDATEDEFAULTSYSDATE,commentsVARCHAR2(25),manager_idNUMBER(7),titleVARCHAR2(25),dept_idNUMBER(7)
CONSTRAINTs_emp_dept_id_fkREFERENCESs_dept(id),salaryNUMBER(11,2),
commission_pctNUMBER(4,2)
CONSTRAINTs_emp_commission_pct_ckCHECK(commission_pctIN(10,12.5,15,17.5,20)));
8.通過(guò)子查詢建表通過(guò)子查詢建表的例子
SQL>CREATETABLEemp_41ASSELECTid,last_name,userid,start_dateFROMs_empWHEREdept_id=41;
SQL>CREATETABLEAasselect*fromBwhere1=2;只要表的結(jié)構(gòu).
10.用子查詢建表的注意事項(xiàng)
1)可以關(guān)連多個(gè)表及用集合函數(shù)生成新表,注意選擇出來(lái)的字段必須有合法的字段名稱,且不能重復(fù)。
2)用子查詢方式建立的表,只有非空NOTNULL的約束條件能繼承過(guò)來(lái),其它的約束條件和默認(rèn)值都沒(méi)有繼承過(guò)來(lái).3)根據(jù)需要,可以用altertableaddconstraint……再建立其它的約束條件,如primarykey等.
11.ForeignKey的可選參數(shù)ONDELETECASCADE在創(chuàng)建ForeignKey時(shí)可以加可選參數(shù):ONDELETECASCADE它的含義是如果刪除外鍵主表里的內(nèi)容,子表里相關(guān)的內(nèi)容將一起被刪除.
如果沒(méi)有ONDELETECASCADE參數(shù),子表里有內(nèi)容,父表里的主關(guān)鍵字記錄不能被刪除掉.
12.如果數(shù)據(jù)庫(kù)表里有不滿足的記錄存在,建立約束條件將不會(huì)成功.
13.給表創(chuàng)建和刪除同義詞的例子SQL>CREATESYNONYMd_sum2FORdept_sum_vu;
SQL>CREATEPUBLICSYNONYMs_dept2FORalice.s_dept;
SQL>DROPSYNONYMs_dept;
Oracle添加修改刪除表字段
1、添加字段altertabletable_nameaddcolumn1typeaddcolumn2type
addcolumn3type...;
2、刪除字段altertabletable_namedropcolumncolumn_name;3、修改字段altertabletable_namemodify(column_nametype);
14.修改字段名方法:ALTERTABLE表名
MODIFY(字段名notnull)
15.請(qǐng)問(wèn)如何修改一張表的主鍵?altertableaaa
dropconstraintaaa_key;altertableaaa
addconstraintaaa_keyprimarykey(a1,b1);
16.如果該字段不是外鍵中的字段,你可以通過(guò):altertabletab_namedropCOLUMNcol_name;刪除
1.修改主鍵
ALTERTABLEtable_nameDROPPRIMARYKEYCASCADE;
ALTERTABLEtable_nameADDPRIMARYKEY(column_names);2.
ALTERTABLEtable_nameDROPCOLUMN(col1,col2,col3);---fororacle8iorlaterALTERTABLEtable_nameADD(col1datatype,clo2datatype);
友情提示:本文中關(guān)于《Oracle SQL建表小結(jié)》給出的范例僅供您參考拓展思維使用,Oracle SQL建表小結(jié):該篇文章建議您自主創(chuàng)作。
來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。