国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL數(shù)據(jù)庫——約束

這篇具有很好參考價值的文章主要介紹了MySQL數(shù)據(jù)庫——約束。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

前言

MySQL約束是用于在關(guān)系型數(shù)據(jù)庫中定義和實施數(shù)據(jù)完整性規(guī)則的規(guī)范。它們定義了數(shù)據(jù)庫表中數(shù)據(jù)的限制條件,確保數(shù)據(jù)的一致性和有效性。

今天我將為大家分享以下約束:

  1. 主鍵約束(primary key)
  2. 自增長約束(auto_incremnet)
  3. 非空約束(not null)
  4. 唯一性約束(unique)
  5. 默認約束(default)
  6. 零填充約束(zerofill)
  7. 外鍵約束(foreign key)

主鍵約束

MySQL主鍵約束是一種用于保證表中數(shù)據(jù)唯一性和完整性的約束類型。主鍵是一個或多個列的組合,用于標(biāo)識表中的唯一記錄。主鍵約束要滿足以下條件:

  1. 唯一性:主鍵的值在整個表中必須是唯一的。任意兩個記錄都不能具有相同的主鍵值。

  2. 非空性:主鍵的值不能為空。每個記錄都必須具有一個非空的主鍵值。

  3. 唯一標(biāo)識:主鍵作為表中每個記錄的唯一標(biāo)識。它可以用來在表中查找、更新和刪除記錄。

當(dāng)創(chuàng)建主鍵約束時,系統(tǒng)默認會在所在的列和列組合上建立對應(yīng)的唯一索引。

創(chuàng)建主鍵

主鍵有兩種形式,一種是單列主鍵,第二種是聯(lián)合主鍵。

單列主鍵

MySQL中創(chuàng)建單列主鍵有兩種方式:一種是在我們創(chuàng)建表的時候,在對應(yīng)列的后面指定主鍵,另外一種就是我們在創(chuàng)建完列之后指定主鍵

在創(chuàng)建表的時候指定主鍵

create table student1(id int primary key,name varchar(20));

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

在創(chuàng)建列之后指定主鍵

create table student1(id int,name varchar(20),constraint pk1 primary key(id));

這里 contrain pk1 可以省略,這種是 primary key 的完整寫法,pk1 是約束名,可以自定義。

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

聯(lián)合主鍵

聯(lián)合主鍵是指將表中的多個列共同當(dāng)作主鍵,可以出現(xiàn)某個列相同,但不允許所有對應(yīng)的列都相同,并且不能含有null。

創(chuàng)建聯(lián)合主鍵只有一種方法:
create table 表名(列名1 類型,列名2 類型,列名3 類型,constraint pk2 primary key(列名1,列名2));

create table student1(id int,name varchar(20),constraint pk1 primary key(id,name));

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

當(dāng)出現(xiàn)某一列重復(fù)的時候,可以插入數(shù)據(jù),但是當(dāng)聯(lián)合主鍵的對應(yīng)列都相同的時候就插入失敗。

insert into studen1 values(1,'張三');
insert into studen1 values(1,'李四');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

insert into student1 values(2,'王五');
insert into student1 values(2,'王五');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

任何一列都不能出現(xiàn)null

insert into student1 values(3,null);

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

通過修改表結(jié)構(gòu)來指定主鍵

我們可以在創(chuàng)建完成表之后再指定主鍵 alter table 表名 add primary key(列名);
alter table 表名 add primary key(列名1,列名2)

create table student1(id int,name varchar(20));
alter table student1 add primary key(id);

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

create table student1(id int,name varchar(20));
alter table student1 add primary key(id,name);

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

刪除主鍵約束

當(dāng)不想使用主鍵的時候,可以使用 alter table 表名 drop primary key; 刪除主鍵。
MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql
刪除主鍵的時候,不管你是單列主鍵還是聯(lián)合主鍵都使用 alter table 表名 drop primary key;

自增主鍵約束

MySQL自增主鍵是一種特殊類型的主鍵約束,它使用自動遞增的值為每個新插入的記錄生成唯一的標(biāo)識符。自增主鍵允許無需手動指定主鍵值即可向表中插入記錄,并確保每個記錄都具有唯一的標(biāo)識符。

使用自增主鍵具有以下優(yōu)點:

  1. 簡化數(shù)據(jù)插入:無需手動指定主鍵值,數(shù)據(jù)庫會自動為每個新插入的記錄分配一個唯一的主鍵值。這簡化了插入操作的編碼工作,并減少了出現(xiàn)沖突的可能性。

  2. 唯一性保證:自增主鍵的值在表中是唯一的,避免了手動管理主鍵沖突的問題。

  3. 快速訪問:自增主鍵的值按順序遞增,這有助于提高基于主鍵的查詢和索引操作的性能。

自增主鍵的特點:

  • 默認情況下, auto_increment 的初始值是 1 ,每新增一條記錄,字段值自動加 1
  • 一個表中只能有一個字段使用 auto_increment 約束,且該字段必須有唯一索引,以避免序號重復(fù)(即為主鍵或主鍵的一部分)。
  • auto_increment 約束的字段必須具備 NOT NULL 屬性。
  • auto_increment 約束的字段只能是整數(shù)類型( TINYINT 、 SMALLINT 、 INT 、 BIGINT 等。
  • auto_increment 約束字段的最大值受該字段的數(shù)據(jù)類型約束,如果達到上限, auto_increment 就會失效。

創(chuàng)建自增主鍵

因為自增主鍵是特殊的主鍵,所以主鍵和自增主鍵需要指定到同一列中。

create table 表名 (列名1 類型 primary key auto_increment,列名2 類型);

create table student1(id int primary key auto_increment,name varchar(20));

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql
當(dāng)某一列被設(shè)置為自增主鍵時,我們插入數(shù)據(jù)的時候,可以傳入null,該列數(shù)據(jù)會被默認為從1開始的自增數(shù)據(jù)(在沒有定義自增初值的時候)。

insert into student1 values(null,'張三');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

為自增主鍵賦初值
我們可以指定自增數(shù)據(jù)從哪開始,為自增數(shù)據(jù)指定初值。

create table student1(id int primary key auto_increment,name varchar(20)) auto_increment=值;

create table student1(id int primary key auto_increment,name varchar(20)) auto_increment=100;
insert into student1 values(null,'張三');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

在創(chuàng)建表之后為自增主鍵賦初值

alter table 表名 auto_increment=初始值;

create table student1(id int primary key auto_increment,name varchar(20));
alter table student1 auto_increment=100;
insert into student1 values(null,'張三');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

delete 和 truncate 在刪除后自增列的變化

  • delete 數(shù)據(jù)之后自動增長從斷點開始
  • truncate 數(shù)據(jù)之后自動增長從默認起始值開始
insert into student1 values(null,'張三');
insert into student1 values(null,'李四');
delete from student1;
insert into student1 values(null,'王五');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

truncate student1;
insert into student1 values(null,'李華');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

非空約束

MySQL非空約束是一種用于確保表中某列不允許包含空值(NULL)的約束類型。非空約束要求在插入或更新數(shù)據(jù)時,該列必須包含有效的值。非空約束可以應(yīng)用于單個列或多個列。

創(chuàng)建非空約束

MySQL創(chuàng)建非空約束有兩種方式:第一種是我們在創(chuàng)建表的時候指定非空約束
create table 表名(列名1 類型 not null,列名2 類型); 第二種就是我們創(chuàng)建完成表之后指定非空約束 alter table 表名 modify 列名 類型 not null;

create table student1(id int not null,name varchar(20));
desc student1;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

create table student1(id int,name varchar(20));
alter table student1 modify id int not null;
desc student1;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

insert into student1 values(null,'張三');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

刪除非空約束

alter table 表名 modify 列名 類型;

alter table student1 modify id int;
desc student1;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

唯一約束

MySQL唯一約束是一種用于確保表中某列或多列的數(shù)據(jù)是唯一的約束類型。唯一約束保證了列中的值都是互不相同的,但允許包含一個或多個空值(NULL)。

創(chuàng)建唯一約束

MySQL中創(chuàng)建唯一約束同樣有兩種方法:創(chuàng)建表時指定唯一約束:create table 表名(列名1 類型 unique,列名2 類型); 創(chuàng)建表之后指定唯一約束:alter table 表名 add constraint unique_pn unique(列名); 這里constraint 約束名 不省略,為后面的刪除唯一約束做準(zhǔn)備。

create table student1(id int constraint unique_pn unique,name varchar(20));
insert into student1 values(1,'張三');
insert into student1 values(1,'李四');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

create table student1(id int,name varchar(20));
alter table student1 add constraint unique_pn unique(id);
insert into student1 values(1,'張三');
insert into student1 values(1,'李四');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

刪除唯一性約束

刪除唯一性約束的時候需要用到我們前面定義的約束名。
alter table 表名 drop index 唯一約束名

alter table student1 drop index unique_pn;

如果你前面沒有定義唯一約束名,那么默認就是你設(shè)置唯一約束的列名。

默認約束

MySQL默認約束是在創(chuàng)建表時,為表中的某個列定義的一個默認值規(guī)則。當(dāng)插入新的記錄時,如果未顯式提供該列的值,MySQL會自動將默認值應(yīng)用于該列。默認約束可以是一個具體的值,也可以是一個表達式、函數(shù)或系統(tǒng)變量。

創(chuàng)建默認約束

我們MySQL默認的默認約束是null,那么我們也可以自己設(shè)置默認值。在創(chuàng)建表的同時指定默認約束: create table 表名(id int default 默認值,name varchar(20) default 默認值); 在創(chuàng)建表之后指定默認約束 alter table 表名 modify 列名 default 默認值;

create table student1(id int,name varchar(20) default '無名氏');
desc student1;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

alter table student1 modify name default '無名氏';

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

刪除默認約束(改為null為默認值)

alter table 表名 類型 modify 列名 default null;

alter table student1 varchar(20) modify name default null;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

零填充約束

MySQL零填充約束是一種用于整型數(shù)據(jù)列的約束,它定義了在插入或更新數(shù)據(jù)時如何處理數(shù)值長度不足的情況。當(dāng)一個整型數(shù)據(jù)列的數(shù)值長度小于定義的長度時,MySQL會使用零填充方式來補足。

  • 插入數(shù)據(jù)時,當(dāng)該字段的值的長度小于定義的長度時,會在該值的前面補上相應(yīng)的 0
  • zerofill 默認為 int(10)
  • 當(dāng)使用 zerofill 時,默認會自動加 unsigned (無符號)屬性,使用 unsigned 屬性后,數(shù)值范圍是原值的 2 倍,例如,有符號為 -128 ~ +127 ,無符號為 0 ~ 256

創(chuàng)建零填充約束

create table 表名(列名1 類型(指定寬度) zerofill,列名2 類型);

create table student1(id int(5) zerofill,name varchar(20));
insert into student1 values(1,'張三')

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

刪除零填充約束

alter table 表名 modify 列名 類型;

alter table student1 modify id int;
insert into student1 values(2,'李四');

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql
零填充約束只是顯示的時候是用0填充的,但是加上表中的內(nèi)容沒有變化。

外鍵約束

在學(xué)校中,我們都知道每個學(xué)生都有對應(yīng)的班級,同樣在MySQL中也可以將這種類似的關(guān)系體現(xiàn)出來。

外鍵用于關(guān)聯(lián)其他表的主鍵或唯一鍵

創(chuàng)建外鍵約束

create table 表名 (列名 類型 foreign key (列名) references 另一個表名(關(guān)聯(lián)的列名));
create table class (classId int primary key auto_increment,name varchar(20));
create table student (studentId int primary key auto_increment,name varchar(20),classId int,
     foreign key (classId) references class(classId));
desc student;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

既然是學(xué)生,那么肯定要先有班級然后學(xué)生才能進入班級,并且學(xué)生不能進入不存在的班級。

insert into class (null,'高三1班');
insert into class values (null,'高三2班');
insert into class values (null,'高三3班');
insert into student values (null,'張三',1);
insert into student values (null,'李四',4);

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql
MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql

刪除外鍵約束

當(dāng)插入的數(shù)據(jù)在外鍵對應(yīng)的列中不含有時,就會報錯。并且在以上的外鍵關(guān)系中,class為父表,student為子表,子表的插入和刪除都受到父表的約束,同時父表的刪除也受到子表的約束。

update student set classId = 5;
delete from class where classId = 1;

MySQL數(shù)據(jù)庫——約束,MySQL,數(shù)據(jù)庫,mysql
子表的修改,對應(yīng)的列修改后的數(shù)據(jù)還是需要在父表中存在。父表刪除的時候,如果子表與其有關(guān)聯(lián),那么就刪除不了,只能先刪除掉子表的對應(yīng)行,然后再刪除父表。文章來源地址http://www.zghlxwxcb.cn/news/detail-623837.html

到了這里,關(guān)于MySQL數(shù)據(jù)庫——約束的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【MySQL】數(shù)據(jù)庫的約束

    【MySQL】數(shù)據(jù)庫的約束

    哈嘍,大家好!我是保護小周?,本期為大家?guī)淼氖?MySQL 數(shù)據(jù)庫中對表的約束, 主要有null (空約束),unique(唯一約束),primary key(主鍵約束),default(默認值約束), forelgn key(外鍵約束),check(檢查約束),超多實例講解,通俗易懂。 更多相關(guān)知識敬請期待:保護小周? *★,°*:

    2023年04月09日
    瀏覽(22)
  • MySQL:數(shù)據(jù)庫的約束

    MySQL:數(shù)據(jù)庫的約束

    目錄 1.數(shù)據(jù)庫約束 1.1 非空:not null 1.2 唯一:unique ????????????????1.3 默認值:default 1.4 列描述:comment 1.5?主鍵約束:primary key 1.6?外鍵約束 1.7 綜合案例 2.插入查詢結(jié)果 3.聚合函數(shù) 4.group by(分組查詢) 關(guān)系型數(shù)據(jù)庫的一個重要功能,就是需要保證數(shù)據(jù)的完整性

    2024年02月05日
    瀏覽(18)
  • 【MySQL數(shù)據(jù)庫 | 第十二篇】:約束

    【MySQL數(shù)據(jù)庫 | 第十二篇】:約束

    在MySQL中, 約束是一種限制數(shù)據(jù)表中列值的規(guī)定 。保證數(shù)據(jù)庫中的數(shù)據(jù)正確,有效性和完整性。MySQL中的約束有以下幾種: 1. 主鍵約束(Primary Key Constraint) :主鍵是用于唯一標(biāo)識表中每行記錄的列。主鍵約束要求 每個主鍵列的值都是唯一的,且不能為NULL 。一個表只能有一

    2024年02月08日
    瀏覽(18)
  • MySQL數(shù)據(jù)庫:數(shù)據(jù)庫的約束以及數(shù)據(jù)的聚合、聯(lián)合查詢

    MySQL數(shù)據(jù)庫:數(shù)據(jù)庫的約束以及數(shù)據(jù)的聚合、聯(lián)合查詢

    目錄 一.關(guān)系模型的簡要概述 二.數(shù)據(jù)庫的約束? 2.1約束類型 ? ? ? ??2.2NULL約束 2.3?UNIQUE:唯一約束 2.4 默認約束 2.5 PRIMARY KEY:主鍵約束 2.6 FOREIGN KEY:外鍵約束 2.7 CHECK約束 三.高效率查詢 3.1高效率查詢的分類 3.2聚合查詢 3.2.1聚合函數(shù) 3.2.2 GROUP BY子句 3.2.3HAVING 3.3.聯(lián)合查詢

    2024年02月10日
    瀏覽(51)
  • MySQL數(shù)據(jù)庫基礎(chǔ)(九):SQL約束

    MySQL數(shù)據(jù)庫基礎(chǔ)(九):SQL約束

    文章目錄 SQL約束 一、主鍵約束 二、非空約束 三、唯一約束 四、默認值約束 五、外鍵約束(了解) 六、總結(jié) PRIMARY KEY 約束唯一標(biāo)識數(shù)據(jù)庫表中的每條記錄。 主鍵必須包含唯一的值。 主鍵列不能包含 NULL 值。 每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵。 遵循原

    2024年02月19日
    瀏覽(25)
  • 【數(shù)據(jù)庫】MySQL數(shù)據(jù)約束和表關(guān)系詳解

    【數(shù)據(jù)庫】MySQL數(shù)據(jù)約束和表關(guān)系詳解

    目錄 1.數(shù)據(jù)庫約束 1.1約束類型 1.2NULL約束 1.3UNIQUE:唯一約束 1.4DEFAULT:默認值約束 1.5PRIMARY:主鍵約束 1.6FOREIGH KEY:外鍵約束 2.表的關(guān)系 2.1一對一 2.2一對多 2.3多對多 數(shù)據(jù)庫中的數(shù)據(jù)保存在數(shù)據(jù)表中,在表中為了更加準(zhǔn)確的存儲數(shù)據(jù),保證數(shù)據(jù)的正確有效,可以在創(chuàng)建表的時候

    2024年02月04日
    瀏覽(21)
  • 【MySQL】一文帶你了解數(shù)據(jù)庫約束

    【MySQL】一文帶你了解數(shù)據(jù)庫約束

    作用: 數(shù)據(jù)庫約束是用于限制數(shù)據(jù)輸入或數(shù)據(jù)更新的規(guī)則。數(shù)據(jù)庫約束確保在表中只能插入符合規(guī)則的數(shù)據(jù),以確保數(shù)據(jù)的完整性和一致性。 常見的數(shù)據(jù)庫約束包括: 主鍵約束:用于唯一標(biāo)識表中的每一行數(shù)據(jù),確保數(shù)據(jù)唯一性和完整性。 外鍵約束:用于確保表之間數(shù)據(jù)的

    2024年02月08日
    瀏覽(92)
  • MySQL的約束類型、數(shù)據(jù)庫操作、數(shù)據(jù)表操作大全(簡述)

    目錄 一.數(shù)據(jù)庫的操作語法 二.MySQL數(shù)據(jù)庫約束 三.數(shù)據(jù)類型 四.數(shù)據(jù)表操作 作者簡介: ?tq02,一個想成為編程高手的夢中人 作者主頁: ?tq02的博客_CSDN博客-C語言,Java,Java數(shù)據(jù)結(jié)構(gòu)領(lǐng)域博主 學(xué)習(xí)專欄:? ??? MySQL基礎(chǔ)? ? ? ? ? ?? ?JavaSE??????????????? ?? ??C語言 本

    2024年02月12日
    瀏覽(93)
  • {MySQL} 數(shù)據(jù)庫約束& 表的關(guān)系& 新增&&刪除& 修改& 查詢

    {MySQL} 數(shù)據(jù)庫約束& 表的關(guān)系& 新增&&刪除& 修改& 查詢

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 提示:這里可以添加本文要記錄的大概內(nèi)容: 承接上文,繼續(xù)講一下MySQL 提示:以下是本篇文章正文內(nèi)容,下面案例可供參考 NOT NULL - 指示某列不能存儲 NULL 值。 UNIQUE - 保證某列的每行必須有唯一的值

    2024年02月03日
    瀏覽(90)
  • MySQL數(shù)據(jù)庫干貨_11—— MySQL中的非空約束(Not Null)

    非空約束(Not Null) 添加非空約束 使用DDL語句添加非空約束。 示例: 向 emp 表中的 salary 添加非空約束。 刪除非空約束 使用DDL語句刪除非空約束。 示例: 刪除emp表中salary 的非空約束。 創(chuàng)建表時添加約束 查詢表中的約束信息: 示例: 創(chuàng)建 depts 表包含 department_id 該列為主鍵且

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包