您好,登錄后才能下訂單哦!
本篇內(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)值約束。
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中添加主鍵:
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表示。
5、刪除一張表的外鍵約束
使用DDL 語句刪除外鍵約束?;蛘咴贜avicat中主動刪除外鍵。
ALTER TABLE 表名 DROP FOREIGN KEY 約束名; alter table emp drop foreign key emp_fk;
6、給表中某字段添加唯一性約束
使用DDL語句添加唯一性約束。或在在Navicat中添加唯一性約束。
ALTER TABLE 表名 ADD CONSTRAINT 約束名 UNIQUE(列名); alter table emp add constraint emp_uk unique(name);
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;
9、刪除表中某個字段的非空約束
使用DDL語句刪除非空約束。
ALTER TABLE 表名 MODIFY 列名 類型 NULL; alter table emp modify salary float(8,2) NULL;
上面介紹了當(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ì)量的實用文章!
免責(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)容。