數據庫 ——創建數據庫的表
一、創建表
語法:
a、table_name——表名
b、column_name——字段名
Oracle表名與字段名命名規則:
i、必須以字母開始
ii、必須是1到30 個字符長度
iii、只能包含字母、數字、下劃線“_”、美元符“$”和井號“#”
Ⅳ、不能使用Oracle的關鍵字
Ⅴ、同一個用戶所擁有的對象之間不能重名
c、datatype——數據類型
Oracle常用數據類型:
i、char(size):存儲固定長度的字符串。參數size指定了長度,如果存儲的字符串長度小於size,用空格填充,默認長度為1,最長不超過2000個字節;
ii、varchar2(size):存儲可變長度的字符串。參數size指定了該字符串的最大長度。默認長度為1,,最長不超過4000個字節;
iii、number(p,s):存儲變長的數字。既可以存儲浮點數,也可以存儲整數。p表示數字的最大位數(如果是小數包括整數部分、小數部分,不包括小數點,p默認是38位),s指小數位數
Ⅳ、timestamp:和DATE類型大致相同,不過timestamp精確到了秒後6位小數
Ⅴ、clob:存儲單字節字符大數據。和varchar2數據類型相似,最大可以存儲4G的數據,可以用來存儲非結構化的XML文檔
ⅶ、blob:存儲無結構的二進制大數據。最大可以存儲4G的數據,可以用來存儲圖像、視頻、音頻等信息;
d、[default default_value]——設定字段默認值
e、約束
Oracle數據庫通過約束(constraints)防止無效的數據進入到表中,以保護數據的實體完整性。為了便於約束的使用,往往需要為約束起一個有意義的名字(例如student_id_pk表示student表id列為主鍵);如果不顯式命名約束,Oracle數據庫將以SYS_Cn的格式為約束命名,這裏n是唯一的整數。約束分為字段級別約束和表級別約束:字段級約束:只為單個字段添加約束;表級約束:為一個或多個字段添加約束
①、not null:指定字段不能為空,只能定義為字段級約束
create table user_info(
user_name varchar2(10) not null,--
password varchar2(15) constraint student_password_nn not null--自定義約束名
)
註意:沒有顯式命名的非空約束,使用PL/SQL Developer在Checks約束選項卡中是看不到的。
②、unique:指定字段的值(或字段組合的值)對於表中所有的行必須是唯一的。對於無非空約束的字段,唯一鍵約束允許輸入空值,且包含空值的行可以有多個。可以為字段級別約束,也可以為表級別約束,表級約束時可以定義復合唯一鍵。主鍵是表中每行數據的唯一標識。
create table user_info(
user_name varchar2(30) unique
)
create table user_info(
user_name varchar2(10),
password varchar2(15),
unique(user_name,password)--user_name和password 聯合做唯一鍵
)
③、primary key:指定主鍵。該約束強制字段或字段組合必須具有唯一性且每個字段不能為空。可以為字段級別約束,也可以為表級別約束。
create table user_info(
id char(36) primary key,
user_name varchar2(10)
)
或
create table user_info(
id char(36) constraint user_info_id_pk primary key,
user_name varchar2(10)
)
或
create table user_info(
id char(36),
user_name varchar2(10) ,
constraint user_info_id_pk primary key(id)
)
註意:每個表只能創建一個主鍵
④、foreign key:指定一個字段或字段組合作為一個外鍵(即外來的主鍵或唯一鍵),該外鍵和另一個表的主鍵或唯一鍵簡歷起一個關系。外鍵值必須匹配父表中存在的值;如果父表主鍵值或唯一鍵值是子表的外鍵值,則父表中的這條數據不能刪除,Oracle數據庫中外鍵的值可以為null。
需求:如何將京東fuliuqingfeng的用戶信息及其多個郵寄商品地址保存到數據庫中
方案1:
問題:這種表結構存在嚴重的字段冗余,如果個人信息字段比較多這一問題表現的越嚴重。
方案2:
問題:這種表結構消除了字段冗余,但由於只是邏輯上的“外鍵”關系,所以依然無法保證數據完整性,例如可以將user_info中id為51b28fe1-4ebf-41ac-a17b-d5e276861fd0的數據刪除,但此時地址表中數據將不再完整——找不到這些地址屬於哪個用戶;再例如也可以向address表中添加一條user_info_id不存在的地址信息(如:insert into address (id,user_info_id,real_name,mobile,address) values (‘7da42cc6-36a6-4ad5-9998-71dbc30c8e17‘,‘ddc376dd-f8b3-42a6-b42a-db22abed1941‘,‘張三‘,‘18338970095‘,‘北京東城區‘);)——同樣,該條數據並不完整,依然找不到這些地址屬於哪個用戶
方案3:
說明:這種方案為user_info_id添加了外鍵,指向user_info表的主鍵,該約束起到了保護數據完整性的作用:如果刪除的用戶信息id已經在address表中使用,則該條數據無法刪除;無法向address表中添加用戶id不存在的地址信息。
註意:
1、設置表中字段為外鍵時,該字段對應父表字段必須是父表的主鍵或唯一鍵,否則創建失敗,例如:
2、外鍵數據類型要和父表對應字段數據類型一致,否則會出錯;另外字段間長度也建議一致;
⑤、check:指定列值必須滿足check中條件,否則無法進行添加或修改;一個字段可以定義多個check約束。
create table people(
age number(3) not null check(age>0 and age<150)-- --年齡不能為空並且範圍在0~150
)
可以通過視圖查看某個表有哪些約束,例如
數據庫 ——創建數據庫的表