溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql中restrict的含義是什么

發(fā)布時間:2023-04-14 09:52:07 來源:億速云 閱讀:158 作者:iii 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“mysql中restrict的含義是什么”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

在mysql中,restrict是約束的意思,是指對表中數(shù)據(jù)的一種限制,能夠幫助數(shù)據(jù)庫管理員更好地管理數(shù)據(jù)庫,并且能夠確保數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和完整性。MySQL支持6種約束:主鍵約束、外鍵約束、唯一約束、檢查約束、非空約束和默認(rèn)值約束。

MySQL中什么是約束?

restrict(約束)是指對表中數(shù)據(jù)的一種限制,能夠幫助數(shù)據(jù)庫管理員更好地管理數(shù)據(jù)庫,并且能夠確保數(shù)據(jù)庫中數(shù)據(jù)的正確性、有效性和完整性。

例如,在數(shù)據(jù)表中存放年齡的值時,如果存入 200、300 這些無效的值就毫無意義了。因此,使用約束來限定表中的數(shù)據(jù)范圍是很有必要的。

MySQL中的約束就是用來檢測數(shù)據(jù)正確性和合理性的,一般的錯誤有:1,存在相同重復(fù)的數(shù)據(jù);2,錯誤的數(shù)據(jù);3,數(shù)據(jù)丟失錯誤(空數(shù)據(jù));4,指代不明確的錯誤(表之間無法準(zhǔn)確聯(lián)系起來)等。

MySQL的約束就是用來解決上述問題的,比如身份證號不能重復(fù),收貨地址不能空。如果違反了約束,則數(shù)據(jù)操作行為被制止。

在 MySQL 中,主要支持以下 6 種約束:

1)主鍵約束

主鍵約束是使用最頻繁的約束。在設(shè)計數(shù)據(jù)表時,一般情況下,都會要求表中設(shè)置一個主鍵。

主鍵是表的一個特殊字段,該字段能唯一標(biāo)識該表中的每條信息。例如,學(xué)生信息表中的學(xué)號是唯一的。

2)外鍵約束

外鍵約束經(jīng)常和主鍵約束一起使用,用來確保數(shù)據(jù)的一致性。

例如,一個水果攤,只有蘋果、桃子、李子、西瓜 4 種水果,那么,你來到水果攤要買水果只能選擇蘋果、桃子、李子和西瓜,不能購買其它的水果。

3)唯一約束

唯一約束與主鍵約束有一個相似的地方,就是它們都能夠確保列的唯一性。與主鍵約束不同的是,唯一約束在一個表中可以有多個,并且設(shè)置唯一約束的列是允許有空值的,雖然只能有一個空值。

例如,在用戶信息表中,要避免表中的用戶名重名,就可以把用戶名列設(shè)置為唯一約束。

4)檢查約束

檢查約束是用來檢查數(shù)據(jù)表中,字段值是否有效的一個手段。

例如,學(xué)生信息表中的年齡字段是沒有負(fù)數(shù)的,并且數(shù)值也是有限制的。如果是大學(xué)生,年齡一般應(yīng)該在 18~30 歲之間。在設(shè)置字段的檢查約束時要根據(jù)實際情況進行設(shè)置,這樣能夠減少無效數(shù)據(jù)的輸入。

5)非空約束

非空約束用來約束表中的字段不能為空。例如,在學(xué)生信息表中,如果不添加學(xué)生姓名,那么這條記錄是沒有用的。

6)默認(rèn)值約束

默認(rèn)值約束用來約束當(dāng)數(shù)據(jù)表中某個字段不輸入值時,自動為其添加一個已經(jīng)設(shè)置好的值。

例如,在注冊學(xué)生信息時,如果不輸入學(xué)生的性別,那么會默認(rèn)設(shè)置一個性別或者輸入一個“未知”。

默認(rèn)值約束通常用在已經(jīng)設(shè)置了非空約束的列,這樣能夠防止數(shù)據(jù)表在錄入數(shù)據(jù)時出現(xiàn)錯誤。

以上 6 種約束中,一個數(shù)據(jù)表中只能有一個主鍵約束,其它約束可以有多個。

操作表的約束

1、給一張表添加主鍵約束

一張表的只能有一個主鍵,添加主鍵有兩種方式。

       單一主鍵:使用一個列作為主鍵列,當(dāng)該列的值有重復(fù)時,則違反唯一約束。

       聯(lián)合主鍵:使用多個列作為主鍵列,當(dāng)多個列的值都相同時,則違反唯一約束。指的是:使用多個列的組合形式來確定主鍵,當(dāng)出現(xiàn)組合重復(fù)就無效,如00,01,10,11,12,22這樣的組合形式。

使用DDL語句添加主鍵約束。示例:

ALTER TABLE 表名 ADD PRIMARY KEY(列名);
alter table emp add primary key(employee_id);//選取employee_id作為主鍵
alter table emp add primary key(employee_id,shenfen_id);//聯(lián)合主鍵

2、給一張表添加自增長主鍵約束

auto_increment。數(shù)據(jù)庫管理系統(tǒng)自動維護表時自動加上的主鍵,利用自然數(shù)自增的方式確定主鍵。同樣的,自增長主鍵也是把某一列用作主鍵。當(dāng)表中添加了主鍵的字段增加了數(shù)據(jù),則主鍵自動加1。

自增長主鍵和一般主鍵約束可以相互轉(zhuǎn)化。

1, 一個表中只能有一個列為自動增長。2,自動增長的列的類型必須是整數(shù)類型。3,自動增長只能添加到具備主鍵約束唯一性約束的列上。4,刪除主鍵約束或唯一性約束,如果該列擁有自動增長能力,則需要先去掉自動增長然后在刪除約束。

       注意點:如果之前給某個字段添加了自增長屬性,則刪除這個字段時要先刪除自增長屬性。

alter table 表名 modify 主鍵 類型 auto_increment;
alter table emp modify employee_id int auto_increment;

或者在Navicat中添加主鍵:

mysql中restrict的含義是什么

3、刪除一張表中的主鍵約束

使用DDL語句刪除主鍵。

ALTER TABLE 表名 DROP PRIMARY KEY;
alter table emp drop primary key;

       注意:刪除主鍵時,如果主鍵列具備自動增長能力,需要先去掉自動增長,然后在刪除主鍵。

alter table emp modify employee_id int;//去掉自增長,與添加自增長代碼地區(qū)別就是沒有auto_increament
alter table emp drop primary key;

4、給一張表添加外鍵約束

使用DDL語句添加外鍵約束??梢越o一張表設(shè)置多個外鍵。

ALTER  TABLE 表名 ADD CONSTRAINT 約束名 FOREIGN  KEY(列名) REFERENCES 參照的表名(參照的列名);
alter table emp add constraint emp_fk
foreign key(dept_id) references
departments(department_id);

或在在Navicat中添加外鍵。外鍵名稱常使用:表名_fk,表名_fk1表示。

mysql中restrict的含義是什么

5、刪除一張表的外鍵約束

       使用DDL 語句刪除外鍵約束?;蛘咴贜avicat中主動刪除外鍵。

ALTER TABLE 表名 DROP FOREIGN KEY 約束名;
alter table emp drop foreign key emp_fk;

mysql中restrict的含義是什么

6、給表中某字段添加唯一性約束

使用DDL語句添加唯一性約束。或在在Navicat中添加唯一性約束。

ALTER TABLE 表名 ADD CONSTRAINT 約束名 UNIQUE(列名);
alter table emp add constraint emp_uk unique(name);

mysql中restrict的含義是什么

7、刪除表中某字段的唯一性約束

使用DDL語句刪除唯一性約束。刪除之前需要弄清楚刪除的約束名是對哪一個字段進行約束的。

ALTER TABLE 表名 DROP KEY 約束名;
alter table emp drop key emp_uk;

8、給表中某個字段添加非空約束

使用DDL語句添加非空約束?;蛘逳avicat。

ALTER TABLE 表名 MODIFY 列名 類型 NOT NULL;
alter table emp modify salary float(8,2) not NULL;

mysql中restrict的含義是什么

9、刪除表中某個字段的非空約束

使用DDL語句刪除非空約束。

ALTER TABLE 表名 MODIFY 列名 類型 NULL;
alter table emp modify salary float(8,2) NULL;

mysql中restrict的含義是什么

創(chuàng)建表的時候添加約束

上面介紹了當(dāng)一張表已經(jīng)存在之后如何添加約束。下面介紹在一開始新建表的時候如何添加約束。

1、查詢表中加了哪些約束?

 SHOW KEYS FROM 表名;

2、創(chuàng)建表時添加約束

       創(chuàng)建 depts 表包含 department_id 該列為主鍵且自動增長,department_name 列不允許重復(fù),location_id 列不允含有空值。

create table depts
(
department_id int primary key auto_increment,
department_name varchar(30) unique,
location_id int not null;
);

“mysql中restrict的含義是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI