約束關係
1、非空約束
highgo=# create table test1(
highgo(# num int unique,
highgo(# name varchar(10)
highgo(# );
注意: create table / unique 將要為表 "test1" 建立隱含索引 "test1_num_key"
create table
插入兩條合法記錄
highgo=# insert into test1 values(1,'adam');
insert 0 1
highgo=# insert into test1 values(2,'eva');
insert 0 1
highgo=# select * from test1;
num | name
-----+------
1 | adam
2 | eva
(2 rows)
插入一條非法記錄,違反了非空約束
highgo=# insert into test(no) values(002);
錯誤: 在字段 "name" 中空值違反了非空約束
detail: 失敗, 行包含(2, null).
2、唯一約束
highgo=# create table test1(
highgo(# num int unique,
highgo(# name varchar(10)
highgo(# );
注意: create table / unique 將要為表 "test1" 建立隱含索引 "test1_num_key"
create table
插入合法記錄
highgo=# insert into test1 values(1,'adam');
insert 0 1
highgo=# insert into test1 values(2,'eva');
insert 0 1
highgo=# select * from test1;
num | name
-----+------
1 | adam
2 | eva
(2 rows)
插入非法記錄
highgo=# insert into test1 values(2,'lilith');
錯誤: 重複鍵違反唯一約束"test1_num_key"
detail: 鍵值"(num)=(2)" 已經存在
注意:如果該唯一值欄位,插入空值的時候,可以插入多條記錄
highgo=# insert into test1(name) values('sachiel');
insert 0 1
highgo=# insert into test1(name) values('shamshiel');
insert 0 1
highgo=# select * from test1;
num | name
-----+-----------
1 | adam
2 | eva
| sachiel
| shamshiel
(4 rows)
3、主鍵約束
主鍵約束相當於非空約束和唯一約束的組合。這種約束不僅能保證字段只能取非空值, 而且保證欄位的值在表中唯一。
highgo=# create table test3(
highgo(# num int primary key,
highgo(# name varchar(10)
highgo(# );
注意: create table / primary key 將要為表 "test3" 建立隱含索引 "test3_pkey"
create table
4、外來鍵約束
外來鍵約束主要用於保證資料庫的參照完整性。
highgo=# create table test4(
highgo(# snum int references test3,
highgo(# score int);
create table
highgo=# insert into test4 values(3,88);
錯誤: 插入或更新表 "test4" 違反外來鍵約束 "test4_snum_fkey"
detail: 鍵值對(snum)=(3)沒有在表"test3"中出現.
highgo=# insert into test4 values(2,88);
insert 0 1
注意:on update cascade (父表修改,子表也修改)
on delete cascade (父表刪除,子表也刪除)
on delete set null (父表刪除,子表設定為 null)
highgo=# create table test5(
highgo(# snum int references test3
highgo(# on update cascade
highgo(# on delete set null,score int);
create table
highgo=# insert into test5 values(1,99);
insert 0 1
highgo=# insert into test5 values(2,88);
insert 0 1
highgo=# select * from test5;
snum | score
------+-------
1 | 99
2 | 88
(2 rows)
highgo=# update test3 set num=8 where name='lilith';
錯誤: 在 "test3" 上的更新或刪除操作違反了在 "test4" 上的外來鍵約束 "test4_snum_fkey"
detail: 鍵值對(num)=(2)仍然是從表"test4"引用的.
highgo=# insert into test3 values(3,'sachiel');
insert 0 1
highgo=# update test3 set num=8 where name='sachiel';
update 1
highgo=# select * from test3;
num | name
-----+---------
1 | adam
2 | lilith
8 | sachiel
(3 rows)
highgo=# update test3 set num=4 where name='adam';
update 1
highgo=# select * from test3;
num | name
-----+---------
2 | lilith
8 | sachiel
4 | adam
(3 rows)
highgo=# delete from test3 where num=4;
delete 1
highgo=# select * from test5;
snum | score
------+-------
2 | 88
| 99
(2 rows)
5、資料檢驗
highgo=# create table test6
highgo-# (num int,name varchar(10),*** varchar(1) check(*** in('y','n')));
create table
highgo=# insert into test6 values(1,'aaa','y');
insert 0 1
highgo=# insert into test6 values(2,'bbb','n');
insert 0 1
highgo=# select * from test6;
num | name | ***
-----+------+-----
1 | aaa | y
2 | bbb | n
(2 rows)
highgo=# insert into test6 values(2,'bbb','a');
錯誤: 關係 "test6" 的新列違反了檢查約束 "test6_***_check"
detail: 失敗, 行包含(2, bbb, a).
pg學習 基本表定義 修改表結構
修改表結構 1 增加字段 highgo d test1 table public.test1 column type modifiers id integer name character varying highgo alter table test1 add addr varchar 20 al...
pg學習 基本表定義 資料型別
資料型別 1 字串型別 char 型別 描述單個位元組的字段。char length 型別 存放定長的字元到字串中,不足 length 的字串,用空格進行 補充。varchar length 型別 存放變長的字串,但有長度限制 text 型別 不限制字串的數目,通常用於描述長度變化較大或長度不可預知...
建立表 定義約束
建立表 use bhgs 確保sql server是在指定資料庫中建立物件 goif object id dbo.employee u is null drop table dbo.employee create table dbo.employee empid int notnull firstn...