五 SQL 索引 約束 主鍵約束

2021-10-13 13:07:08 字數 3313 閱讀 2289

第一正規化要求每張表都要有主鍵,因此主鍵約束是非常重要的,而且*主鍵約束是外來鍵關聯的基礎條件。主鍵約束為表之間的關聯提供了鏈結點。

主鍵必須能夠唯一標識一條記錄,即主鍵欄位中的值必須是唯一的,而且不能包含null 值。雖然一張表中可以有多個unique 約束和非空約束,但每個表中只能有乙個主鍵約束。

在create table語句中定義主鍵約束:在字段定義後新增primary key關鍵字即可。不過在db2中,主鍵列也必須顯式的定義為not null。

如:建立員工資訊表,並將字段fnumber 設定為主鍵欄位:

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);

執行完畢後就能在表t_person中的看到下面的資料:

fnumber fname fage

1 kingchou 20

2 stef 22

3 long 26

4 yangzk 27

5 beansoft 26

執行下面的sql語句進行測試:

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 新增了非空約束:

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)

為t_person建立主鍵約束

alter table t_person add constraint pk_1 primary key(fnumber,fname)
刪除主鍵約束:與刪除unique 約束以及check 約束的方式相同,只要用帶有drop子句的alter table 語句即可:

alter table t_person

drop constraint pk_1;

該語句在mysql中無效,在mysql中要執行下面的sql語句才能刪除主鍵:

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