1. 程式人生 > >數據庫 ——創建數據庫的表

數據庫 ——創建數據庫的表

屬於 則無 creat user http for com oracle 視頻

一、創建表

語法:

技術分享圖片

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,--

約束名由Oracle指定,格式為SYS_Cn

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_namepassword 聯合做唯一鍵

)

③、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_infoid為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

)

可以通過視圖查看某個表有哪些約束,例如

技術分享圖片

數據庫 ——創建數據庫的表