MySQL數(shù)據(jù)庫如何給表設(shè)置約束詳解
一、PK(主鍵約束)
1、什么是主鍵?
- 在了解主鍵之前,先了解一下什么是關(guān)鍵字
- 關(guān)鍵字:在表中具有唯一性的字段,比如一個(gè)人的身份證號,學(xué)號。一個(gè)表中可以有多個(gè)關(guān)鍵字。
- 主鍵也叫主關(guān)鍵字,就是由一個(gè)或多個(gè)關(guān)鍵字組成的,并且可以通過主鍵獲得整個(gè)表的信息。比如訂單表,通過訂單編號可以獲取到訂單中的姓名,商品,價(jià)格等信息。
注意:關(guān)鍵字不一定是主鍵,主鍵一定是關(guān)鍵字
特點(diǎn):主鍵不能為空,具有唯一性不能重復(fù)。一個(gè)表要么只有一個(gè)主鍵,要么沒有主鍵,不可以有多個(gè)主鍵。
2、怎么設(shè)置主鍵?
方法一:在創(chuàng)建表時(shí)設(shè)置主鍵
-- 建立User表 CREATE TABLE User( User_id int NOT NULL, User_name VARCHAR(20), User_pwd VARCHAR(18), -- 在這里設(shè)置id為主鍵 PRIMARY KEY(User_id) )
CREATE TABLE Users( -- 也可以在字段中直接設(shè)置主鍵 User_id int NOT NULL PRIMARY KEY, User_name VARCHAR(20), User_pwd VARCHAR(18) )
以上兩種方式都可以創(chuàng)建主鍵,效果一樣。
方法二:創(chuàng)建表時(shí)沒有設(shè)置主鍵,后續(xù)在表中設(shè)置主鍵
- 首先建一個(gè)沒有設(shè)置主鍵的表
CREATE TABLE User( User_id int NOT NULL, User_name VARCHAR(20), User_pwd VARCHAR(18) )
- 然后再設(shè)置主鍵
原理是向創(chuàng)建表時(shí)的代碼中添加 PRIMARY KEY(User_id)
跟方法一中的第一個(gè)原理一樣
ALTER TABLE user ADD PRIMARY KEY(User_id)
原理是向User_id 字段中添加 PRIMARY KEY
跟方法一中的第二個(gè)原理一樣
ALTER TABLE users MODIFY User_id INT PRIMARY KEY;
二、FK(外鍵約束)
1、什么是外鍵
- 外鍵又叫外關(guān)鍵字,代表兩個(gè)表直接的聯(lián)系。一張表的外鍵一定是另一張表的主鍵,以另一個(gè)關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表,具有此外鍵的表被稱為主表的從表。
- 比如訂單表中包含了商品ID,用戶ID兩個(gè)外鍵。其中商品ID是商品信息表的主鍵,用戶ID是用戶表的主鍵。
注意:一個(gè)表中的外鍵可以有多個(gè),也可以沒有。
2、怎么設(shè)置外鍵
方法一:創(chuàng)建表時(shí)設(shè)置外鍵約束
在前面設(shè)置主鍵的基礎(chǔ)上來舉例,前面創(chuàng)建了一個(gè)用戶表,那么現(xiàn)在創(chuàng)建一個(gè)訂單表。
CREATE TABLE dingdan( DDid INT PRIMARY KEY NOT NULL, User_id INT NOT null, DDname VARCHAR(20) NOT NULL, -- 設(shè)置約束關(guān)系,dingdan表中的User_id 與 user表中的User_id表示的是同一個(gè)數(shù)據(jù) constraint fk FOREIGN KEY(User_id) REFERENCES user(User_id) )
方法二:創(chuàng)建表時(shí)沒有設(shè)置主鍵,后續(xù)在表中設(shè)置主鍵
alter table student add constraint stfk foreign key(stid) references teacher(tid)
注意:建立了主外鍵關(guān)系后,主表中的數(shù)據(jù)不能隨意刪除。比如訂單中有一條數(shù)據(jù)包含了某個(gè)用戶,那么用戶表中就不能把該用戶的信息刪除,否則會報(bào)錯(cuò)。
三、unique(唯一約束)
1、什么是唯一約束?
某個(gè)字段如果設(shè)置了唯一約束,那么該字段要么不寫,要寫就不能重復(fù)。
2、如何設(shè)置唯一約束
還是創(chuàng)建一個(gè)用戶表,這次表中多了郵箱字段。設(shè)置郵箱不能重復(fù)
CREATE TABLE User( User_id int NOT NULL, User_name VARCHAR(20), User_pwd VARCHAR(18), User_Email VARCHAR(40) UNIQUE )
四、not null(非空)
意思就是這個(gè)字段不能為空
接著上面唯一約束來寫,這里規(guī)定郵箱不僅不能重復(fù)而且不能為空
CREATE TABLE User( User_id int NOT NULL, User_name VARCHAR(20), User_pwd VARCHAR(18), User_Email VARCHAR(40) UNIQUE not null )
五、default(默認(rèn)值)
意思就是這個(gè)字段如果你不寫,那么會默認(rèn)給你一個(gè)值
繼續(xù)上面的User表來寫,在這里添加一個(gè)性別字段,如果你不寫性別那么默認(rèn)為男
CREATE TABLE User( User_id int NOT NULL, User_name VARCHAR(20), User_pwd VARCHAR(18), User_gender enum('男','女') default '男' )
六、auto_increment(自增)
自增就是自動遞增,也就是說如果你在這個(gè)字段沒有填寫數(shù)據(jù),系統(tǒng)會自動根據(jù)上一條數(shù)據(jù)加1
一般用在ID,編號
將用戶表中的ID設(shè)為自增
CREATE TABLE User( User_id int auto_increment, User_name VARCHAR(20), User_pwd VARCHAR(18), User_gender enum('男','女') default '男' )
注意:第一個(gè)數(shù)據(jù)如果不填,默認(rèn)會給一個(gè)值。所以即便ID是主鍵,也可以不填數(shù)據(jù)
到此這篇關(guān)于MySQL數(shù)據(jù)庫如何給表設(shè)置約束詳解的文章就介紹到這了,更多相關(guān)MySQL 設(shè)置約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 淺談關(guān)系型數(shù)據(jù)庫中的約束及應(yīng)用場景
- MySQL數(shù)據(jù)庫表中的約束詳解
- MySQL數(shù)據(jù)庫的約束使用實(shí)例
- MySQL數(shù)據(jù)庫約束操作示例講解
- 一文理解MySQL數(shù)據(jù)庫的約束與表的設(shè)計(jì)
- SQL?Server數(shù)據(jù)庫創(chuàng)建表及其約束條件的操作方法
- MySQL數(shù)據(jù)庫的約束限制詳解
- MySQL數(shù)據(jù)庫表約束講解
- MySQL示例講解數(shù)據(jù)庫約束以及表的設(shè)計(jì)
- MySQL?數(shù)據(jù)庫的約束及數(shù)據(jù)表的設(shè)計(jì)原理
- Mysql關(guān)于數(shù)據(jù)庫是否應(yīng)該使用外鍵約束詳解說明
- 深入理解數(shù)據(jù)庫之表的唯一、自增等七大約束
相關(guān)文章
使用MySQL Slow Log來解決MySQL CPU占用高的問題
在Linux VPS系統(tǒng)上有時(shí)候會發(fā)現(xiàn)MySQL占用CPU高,導(dǎo)致系統(tǒng)的負(fù)載比較高。這種情況很可能是某個(gè)SQL語句執(zhí)行的時(shí)間太長導(dǎo)致的。優(yōu)化一下這個(gè)SQL語句或者優(yōu)化一下這個(gè)SQL引用的某個(gè)表的索引一般能解決問題2013-03-03導(dǎo)致sql執(zhí)行速度慢的幾種情況盤點(diǎn)(生產(chǎn)環(huán)境踩過的坑)
盤點(diǎn)分析MySQL執(zhí)行速度慢可以幫助我們進(jìn)行優(yōu)化MySQL數(shù)據(jù)庫的效率,這篇文章主要給大家盤點(diǎn)介紹了關(guān)于導(dǎo)致sql執(zhí)行速度慢的幾種情況,文中介紹的這些主要是生產(chǎn)環(huán)境踩過的坑,需要的朋友可以參考下2023-03-03MySQL存儲過程的創(chuàng)建使用以及實(shí)現(xiàn)數(shù)據(jù)快速插入
因最近想要測試一下MySQL百萬級數(shù)據(jù)處理過程,所以要一次對數(shù)據(jù)庫快速插入大量數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL存儲過程的創(chuàng)建使用以及實(shí)現(xiàn)數(shù)據(jù)快速插入的相關(guān)資料,需要的朋友可以參考下2023-03-03Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的方法實(shí)例
在日常業(yè)務(wù)開發(fā)中通常mysql數(shù)據(jù)庫中某個(gè)字段會需要存儲json格式字符串,下面這篇文章主要給大家介紹了關(guān)于Mysql使用函數(shù)json_extract處理Json類型數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-09-09數(shù)據(jù)庫查詢哪個(gè)對像里面包含什么字段方法語句
在本篇文章里小編給大家整理的關(guān)于數(shù)據(jù)庫查詢哪個(gè)對像里面包含什么字段方法語句有需要的朋友們可以學(xué)習(xí)下。2019-08-08MySQL優(yōu)化全攻略-相關(guān)數(shù)據(jù)庫命令
MySQL優(yōu)化全攻略-相關(guān)數(shù)據(jù)庫命令...2006-11-11