第一正規化要求每張表都要有主鍵,因此主鍵約束是非常重要的,而且*主鍵約束是外來鍵關聯的基礎條件。主鍵約束為表之間的關聯提供了鏈結點。
主鍵必須能夠唯一標識一條記錄,即主鍵欄位中的值必須是唯一的,而且不能包含null 值。雖然一張表中可以有多個unique 約束和非空約束,但每個表中只能有乙個主鍵約束。
在create table語句中定義主鍵約束:在字段定義後新增primary key關鍵字即可。不過在db2中,主鍵列也必須顯式的定義為not null。
如:建立員工資訊表,並將字段fnumber 設定為主鍵欄位:
插入初始資料到t_person表中:mysql、mssqlserver:
create table t_person (
fnumber varchar(20) primary key,
fname varchar(20),fage int)
oracle:
create table t_person (
fnumber varchar2(20) primary key,
fname varchar2(20),fage number (10))
db2:
create table t_person (
fnumber varchar(20) not null primary key,
fname varchar(20),fage int)
執行完畢後就能在表t_person中的看到下面的資料:insert into t_person (fnumber, fname, fage) values ( "1" , "kingchou", 20);
insert into t_person (fnumber, fname, fage) values ( "2" , "stef", 22);
insert into t_person (fnumber, fname, fage) values ( "3" , "long", 26);
insert into t_person (fnumber, fname, fage) values ( "4" , "yangzk", 27);
insert into t_person (fnumber, fname, fage) values ( "5" , "beansoft", 26);
執行下面的sql語句進行測試:fnumber fname fage
1 kingchou 20
2 stef 22
3 long 26
4 yangzk 27
5 beansoft 26
insert into t_person (fnumber, fname, fage) values ( "3" , "sunny", 22);
表t_person 中已經存在fnumber 等於3 的值,所以執行該語句後資料庫系統會報出如下的錯誤資訊:
違反了 primary key 約束"pk__t_person__2e1bdc42"。不能在物件 "dbo.t_person" 中插入重複鍵。
刪除t_person表:drop table t_person;
復合主鍵(聯合主鍵):由多個欄位來組成主鍵。
復合主鍵的定義和復合唯一約束的定義類似,下面的sql 語句用來建立員工資訊表,並且將字段fnumber 和fname設定為復合主鍵:
若在建立表的時沒有建立主鍵,可在後期進行新增。mysql、mssqlserver:
create table t_person (
fnumber varchar(20),
fname varchar(20),fage int,
constraint pk_1 primary key(fnumber,fname))
oracle:
create table t_person (
fnumber varchar2(20)fname varchar2(20),
fage number (10) ,
constraint pk_1 primary key(fnumber,fname))
db2:
create table t_person (
fnumber varchar(20) not null,
fname varchar(20) not null,
fage int,constraint pk_1 primary key(fnumber,fname))
為表新增主鍵的方式:alter table語句(但組成主鍵的字段必須包含not null約束,在沒有新增非空約束的字段上建立主鍵,系統將會爆出錯誤資訊)
如:首先建立乙個沒有主鍵的t_person 表,注意其中的字段fnumber 和fname 新增了非空約束:
為t_person建立主鍵約束mysql、mssqlserver:
create table t_person (
fnumber varchar(20) not null,
fname varchar(20) not null,fage int)
oracle:
create table t_person (
fnumber varchar2(20) not null,
fname varchar2(20) not null,
fage number (10))
db2:
create table t_person (
fnumber varchar(20) not null,
fname varchar(20) not null,fage int)
alter table t_person add constraint pk_1 primary key(fnumber,fname)
刪除主鍵約束:與刪除unique 約束以及check 約束的方式相同,只要用帶有drop子句的alter table 語句即可:
該語句在mysql中無效,在mysql中要執行下面的sql語句才能刪除主鍵:alter table t_person
drop constraint pk_1;
alter table t_person
drop primary key;
sql主鍵約束
資料字段屬性 unsigned 無符號的,宣告該資料不允許為負數 zerofill 0填充的,不足位數用0來填充 如 int 3 5 則005 auto increment 自動增長的,通常用於設定主鍵,且為整數型別,可定義起始值和步長 null not null 空 和 非空 default 預設...
主鍵 約束和索引
1 主鍵約束不允許出現 null 值。任何索引條目的索引鍵都不允許包含null。唯一約束允許包含 null 值,但唯一約束把兩個 null 值當作重複值,所以施加了唯一約束的每一列只允許包含乙個 null 值。2 建立主鍵時會自動建立聚集索引,除非當前表中已經含有了聚集索引或是建立主鍵時指定了 no...
SQL 修改主鍵約束
原文 sql 修改主鍵約束 今天在學習資料庫的時候遇到乙個關於如何修改主鍵約束的問題,抄錄下來以供備用。修改主鍵約束用sql 獲取主鍵約束名字 declare csname varchar 100 set csname select csname name from sysobjects where...