mysql添加主鍵、外鍵、唯一、非空約束


1 、約束的作用

對表中的數據進行限制,保證數據的正確性、有效性和完整性。一個表如果添加了約束,不正確的數據將無

法插入到表中。約束在創建表的時候添加比較合適。

2 、約束種類

2.1 主鍵約束 primary key

2.1.1 主鍵的作用

  • 非空且唯一
  • 一張表只能有一個字段為主鍵,(用來唯一標識數據庫中的每一條記錄)
  • 通常不用業務字段作為主鍵,單獨給每張表設計一個 id 的字段,把 id 作為主鍵。主鍵是給數據庫和程序使用的,不是給最終的客戶使用的。所以主鍵有沒有含義沒有關系,只要不重復,非空就行

2.2.2 主鍵操作

  • 創建表的時候創建主鍵

create table st5 (

id int primary key, -- id 為主鍵

name varchar(20),

age int

)

  • 刪除主鍵

alter table st5 drop primary key;

  • 創建表后添加主鍵

alter table st5 add primary key(id);

2.2.3 主鍵自增

主鍵如果讓我們自己添加很有可能重復,我們通常希望在每次插入新記錄時,數據庫自動生成主鍵字段的值

  • AUTO_INCREMENT 表示自動增長(字段類型必須為整數類型)

create table st5 (

id int primary key auto-increment, -- 給id 創建自動增長

name varchar(20),

age int

)

-- 插入數據 之后查詢數據 發現id是自動增長的

insert into st5 (name,age) values ('小喬',18);

insert into st5 (name,age) values ('大喬',20);

  • 修改自增長的默認值起始值

-- 指定起始值為 1000

create table st4 (

id int primary key auto_increment,

name varchar(20)

) auto_increment = 1000;

  • 創建好以后修改起始值

alter table st4 auto_increment = 2000;

  • 創建完表之后刪除自動增長

alter table st4 modify id int;

  • 添加自動增長

alter table st4 modify id int auto_increment;


2.2 唯一約束

  • 什么是唯一約束:表中某一列不能出現重復的值

2.2.1 唯一約束語法格式:字段名 字段類型 UNIQUE

-- 創建學生表 st7, 包含字段(id, name),name 這一列設置唯一約束,不能出現同名的學生

create table st7 (

id int,

name varchar(20) unique

)

  • 注意:唯一約束可以有null值,但是只能有唯一一條記錄為null

  • 刪除唯一約束:alter table st7 drop index name;

  • 在表創建完之后創建唯一約束:alter table st7 modify name varchar(20) unique;


2.3 非空約束

  • 什么是非空約束:某一列不能為 null。

-- 創建表學生表 st8, 包含字段(id,name,gender)其中 name 不能為 NULL

create table st8 (

id int,

name varchar(20) not null,

gender char(1)

)

-- 刪除st8 name的非空約束:alter table st8 modify name varchar(20);

  • 默認值:字段名 字段類型 DEFAULT 默認值

-- 創建一個學生表 st9,包含字段(id,name,address), 地址默認值是廣州

create table st9 (

id int,

name varchar(20),

address varchar(20) default '廣州'

)

-- 添加一條記錄,使用默認地址

insert into st9 values (1, '李四', default);

-- 添加一條記錄,不使用默認地址

insert into st9 values (3, '李四光', '深圳');

疑問:如果一個字段設置了非空與唯一約束,該字段與主鍵的區別?

  1. 主鍵數在一個表中,只能有一個。不能出現多個主鍵。主鍵可以單列,也可以是多列。

  2. 自增長只能用在主鍵上


2.4 外鍵約束

什么是外鍵約束:

1)什么是外鍵:在從表中與主表主鍵對應的那一列,如:員工表中的 dep_id

2)主表: 一方,用來約束別人的表,從表: 多方,被別人約束的表

創建/刪除 約束的語法

1)新建表時增加外鍵:

[CONSTRAINT] [外鍵約束名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表名(主鍵字段名****)

create table employee(

id int primary key auto_increment,

name varchar(20),

age int,

dep_id int, -- 外鍵對應主表的主鍵

-- 創建外鍵約束

constraint emp_depid_fk foreign key (dep_id) references department(id)

)

2)已有表增加外鍵:

ALTER TABLE 從表 ADD [CONSTRAINT] [外鍵約束名稱] FOREIGN KEY (外鍵字段名) REFERENCES 主表(主表字段名);

3)刪除外鍵的語法:

ALTER TABLE 從表drop foreign key 外鍵名稱;

-- 刪除 employee 表的 emp_depid_fk 外鍵

alter table employee drop foreign key emp_depid_fk;

什么是級聯操作:

在修改和刪除主表的主鍵時,同時更新或刪除副表的外鍵值,稱為級聯操作

ON UPDATE CASCADE:級聯更新,只能是創建表的時候創建級聯關系。更新主表中的主鍵,從表中的外鍵

列也自動同步更新

ON DELETE CASCADE :級聯刪除


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM