數據表是數據庫中最重要、最基本的操作對象,是數據存儲的基本單位。數據表被定義爲列的集合,數據在表中是按照行和列的格式來存儲的。每一行代表一條唯一的記錄,每一列代表記錄中的一個域。
本模塊將介紹數據表的基本操作,主要內容包括:創建數據表、修改數據表、刪除數據表。
1、創建數據表
數據表屬於數據庫,在創建數據表之前,應該先在對象管理器中選擇在哪個數據庫中進行,如果沒有選擇數據庫,則不能創建數據表。常見的創建數據表的方法有兩種。
(1)使用對象管理器創建數據表
(2)使用SQL語句創建數據表
創建數據表的語句爲create table,語法規則如下:
create table <表名> ( 字段名1 數據類型 [列級別約束條件] [默認值], 字段名2 數據類型 [列級別約束條件] [默認值], ... [表級別約束條件] );
使用create table創建表時,必須指定以下信息:
-- 要創建的表的名稱不區分大小寫,不能使用SQL語言中的關鍵字,如 drop、alter、insert等。
-- 數據表中如果要創建多個列,每一個列(字段)的名稱和數據類型都要用逗號隔開。
CREATE TABLE entity_alarm ( id text, source text, alarm text, status text, assign text, devicetype text, alarmtype text, occur_time timestamp without time zone, collect_time timestamp without time zone, clear_time timestamp without time zone, clear_insert timestamp without time zone, tkt_id text, sms_send_flag numeric );
2、使用主鍵約束
主鍵是表中一列或多列的組合。主鍵約束(Primary Key Constraint)要求主鍵列的數據唯一,並且不允許爲空。主鍵能夠唯一地標識表中的一條記錄,可以結合外鍵來定義不同數據表之間的關係,並且可以加快數據庫查詢的速度。主鍵和記錄之間的關係如同身份證和人之間的關係,它們之間是一一對應的。主鍵分爲兩種類型:單字段主鍵和多字段聯合主鍵。
(1)單字段主鍵
主鍵由一個字段組成,SQL語句格式分爲以下兩種情況。
1)在定義列的同時指定主鍵,語法規則如下:
字段名 數據類型 primary key
上邊的表定義其主鍵爲id,SQL語句如下:
CREATE TABLE entity_alarm ( id text primary key, source text, alarm text, status text, assign text, devicetype text, alarmtype text, occur_time timestamp without time zone, collect_time timestamp without time zone, clear_time timestamp without time zone, clear_insert timestamp without time zone, tkt_id text, sms_send_flag numeric );
在【對象瀏覽器】窗格中選擇所創建的數據表,在右側的窗口中選擇【附屬關係】選項卡,即可看到主鍵的類型,如圖所示
2)在定義完所有列之後指定主鍵,語法規則如下:
[constraint <約束名>] primary key [字段名]
上邊的數據表也可如下創建:
CREATE TABLE entity_alarm ( id text, source text, alarm text, status text, assign text, devicetype text, alarmtype text, occur_time timestamp without time zone, collect_time timestamp without time zone, clear_time timestamp without time zone, clear_insert timestamp without time zone, tkt_id text, sms_send_flag numeric, primary key(id) );
兩個實例結果是一樣的,都會在id字段上設置主鍵約束。
(2)多字段聯合主鍵主鍵由多個字段聯合組成,語法規則如下:
primary key [字段1, 字段2, ..., 字段n]
假如存在一個員工表,表中沒有主鍵id,爲了唯一的確定一個員工,可以把名字和部門聯合起來作爲主鍵,SQL語句如下:
create table tb_emp ( name text, deptId text, salary numeric, primary key(name, deptId) );
3、使用外鍵約束
外鍵用來在兩個表的數據之間建立連接,它可以是一列或者多列。一個表可以有一個或多個外鍵。外鍵對應的是參照完整性,一個表的外鍵可以爲空值,若不爲空值,則每一個外鍵值必須等於另一個表中主鍵的某個值。
-- 外鍵:首先它是表中的一個字段,它可以不是本表的主鍵,但對應另外一個表的主鍵。外鍵的作用主要作用是保證數據引用的完整性。定義外鍵後,不允許刪除在另一個表中具有關聯關係的行。例如,部門表tb_dept的主鍵是id,在員工表tb_emp中有一個鍵deptId與這個id關聯。
部門表tb_dept如下
create table tb_dept ( id text primary key, name text not null );
-- 主表(父表):對於兩個具有關聯關係的表而言,相關聯字段中主鍵所在的那個表即是主表。
-- 從表(子表):對於兩個具有關聯關係的表而言,相關聯字段中外鍵所在的那個表即是從表。
(1)使用對象瀏覽器創建外鍵約束
(2)使用SQL語句創建外鍵約束
創建外鍵的語法規則如下:
[constraint <外鍵名>] foreign key 字段名1 [ ,字段名2,...] references <主鍵名> 主鍵列1 [ ,主鍵列2,...]
其中,“外鍵名”爲定義的外鍵約束的名稱,一個表中不能有相同名稱的外鍵; “字段名”表示從表需要添加外鍵約束的字段列;“主表名”即被從表外鍵所依賴的表的名稱;“主鍵列”表示主表中定義的主鍵字段,或者字段組合。
實例:
創建一個部門表tb_dept1
create table tb_dept1 ( id text primary key, name text not null, location text );
創建數據表tb_emp5,讓它的鍵deptId作爲外鍵關聯到tb_dept1的主鍵id
create table tb_emp5 ( id text primary key, name text, deptId text, salary numeric, constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id) );
語句執行成功後,在表tb_emp5上添加了名稱爲fk_emp_dept1的外鍵約束,外鍵名稱爲deptId,其依賴於表tb_dept1的主鍵id。關聯指的是在關係型數據庫中,相關表之間的聯繫。它是通過相容或相同的屬性或屬性組來表示的,子表的外鍵必須關聯父表的主鍵,且關聯字段的數據類型必須匹配,如果類型不一樣,則創建子表時,就會出現錯誤。
4、使用非空約束
非空約束(not null constraint)指字段的值不能爲空。對於使用了非空約束的字段,如果用戶在添加數據時,沒有指定值,數據庫系統會報錯。
非空約束的語法規則如下:
字段名 數據類型 not null
定義數據表tb_emp6,指定員工的名稱不能爲空
create table tb_emp6 ( id text primary key, name text not null, deptId text, salary numeric, constraint fk_emp_dept2 foreign key(deptId) references tb_dept1(id) );
執行後在tb_emp6中創建了一個name字段,其插入值不能爲空(not null)。
5、使用唯一性約束
唯一性約束(unique constraint)要求添加該約束的列字段的值唯一,允許爲空,但只能出現一個空值。唯一性約束可以確保一列或者幾列不出現重複值。
(1)使用對象瀏覽器創造唯一性約束
(2)使用SQL語句創建唯一約束
1)在定義完列之後直接指定唯一約束,語法規則如下:
字段名 數據類型 unique
創建數據表tb_dept ,指定部門的名稱唯一
create table tb_dept2 ( id text primary key, name text unique, location text );
2)在定義完所有列之後指定唯一約束,語法規則如下:
[constraint <約束名>] unique(<字段名>)
創建數據表tb_dept3,指定部門的名稱唯一
create table tb_dept3 ( id text primary key, name text, location text, constraint sth unique(name) );
unique 和primary key的區別:一個表中可以有多個字段聲明爲unique,但只能有一個primary key聲明:聲明爲primary key的列不允許有空值,但是聲明爲unique的字段允許空值(null)的存在。
6、使用默認約束
默認約束(default constraint)指定某列的默認值。如男性同學較多,性別就可以默認爲“男”。如果插入一條新的記錄時沒有爲這個字段賦值,那麼系統會自動爲這個字段賦值爲“男”。
默認約束的語法規則如下:
字段名 數據類型 default 默認值
創建數據表tb_emp7,指定員工的部門編號默認爲1111
create table tb_emp7 ( id text primary key, name text not null, deptId text default 1111, salary numeric, constraint fk_emp_dept3 foreign key(deptId) references tb_dept1(id) );
新插入的記錄如果沒有指定部門編號,則默認都爲1111。