日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MySQL八大约束

發(fā)布時(shí)間:2023/12/10 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL八大约束 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL約束

  • MySQL約束
    • 主鍵約束(primary key)
    • 自增長(zhǎng)約束(auto_increment)
    • 非空約束(not null)
    • 唯一約束(unique)
    • 默認(rèn)約束(default)
    • 零填充約束(zerofill)
    • 外鍵約束(foreign key)


MySQL約束

概念

  • 約束英文:constraint
  • 約束實(shí)際上就是表中數(shù)據(jù)的限制條件

作用

  • 表在設(shè)計(jì)的時(shí)候加入約束的目的就是為了保證表中的記錄完整性和有效性,比如用戶(hù)表有些列的值(手機(jī)號(hào))不能為空,有些列的值(身份證號(hào))不能重復(fù)。

分類(lèi)

  • 主鍵約束(primary key) PK
  • 自增長(zhǎng)約束(auto_increment)
  • 非空約束(not null)
  • 唯一性約束(unique)
  • 默認(rèn)約束(default)
  • 零填充約束(zerofill)
  • 外鍵約束(foreign key) FK

主鍵約束(primary key)

概念

  • MySQL主鍵約束是一個(gè)列或者多個(gè)列的組合,其值能唯一地標(biāo)識(shí)表中的每一行,方便在RDBMS中盡快的找到某一行。
  • 主鍵約束相當(dāng)于 唯一約束 + 非空約束 的組合,主鍵約束列不允許重復(fù),也不允許出現(xiàn)空值。
  • 每個(gè)表最多只允許一個(gè)主鍵
  • 主鍵約束的關(guān)鍵字是:primary key
  • 當(dāng)創(chuàng)建主鍵的約束時(shí),系統(tǒng)默認(rèn)會(huì)在所在的列和列組合上建立對(duì)應(yīng)的唯一索引。
  • 操作

    • 添加單列主鍵
      創(chuàng)建單列主鍵有兩種方式,一種是在定義字段的同時(shí)指定主鍵,一種是定義完字段之后指定主鍵

    方式1-語(yǔ)法

    -- 在 create table 語(yǔ)句中,通過(guò) PRIMARY KEY 關(guān)鍵字來(lái)指定主鍵。 --在定義字段的同時(shí)指定主鍵,語(yǔ)法格式如下: create table 表名(...<字段名> <數(shù)據(jù)類(lèi)型> primary key ... )

    方式1-實(shí)現(xiàn)

    create table emp1(eid int primay key,name VARCHAR(20),deptId int,salary double );

    方式2-語(yǔ)法

    --在定義字段之后再指定主鍵,語(yǔ)法格式如下: create table 表名(... [constraint <約束名>] primary key [字段名] );

    方式2-實(shí)現(xiàn)

    create table emp2(eid INT,name VARCHAR(20),deptId INT,salary double,constraint pk1 primary key(id) );
    • 添加多列聯(lián)合主鍵
      所謂的聯(lián)合主鍵,就是這個(gè)主鍵是由一張表中多個(gè)字段組成的。
      注意:
      當(dāng)主鍵是由多個(gè)字段組成時(shí),不能直接在字段名后面聲明主鍵約束。
      一張表只能有一個(gè)主鍵,聯(lián)合主鍵也是一個(gè)主鍵

    語(yǔ)法

    create table 表名(...primary key (字段1,字段2,…,字段n) );

    實(shí)現(xiàn)

    create table emp3( name varchar(20), deptId int, salary double, primary key(name,deptId) );
    • 通過(guò)修改表結(jié)構(gòu)添加主鍵
      主鍵約束不僅可以在創(chuàng)建表的同時(shí)創(chuàng)建,也可以在修改表時(shí)添加。

    語(yǔ)法

    create table 表名(... ); alter table <表名> add primary key(字段列表);

    實(shí)現(xiàn)

    -- 添加單列主鍵 create table emp4(eid int, name varchar(20), deptId int, salary double, ); alter table emp4 add primary key(eid);
    • 刪除主鍵
      一個(gè)表中不需要主鍵約束時(shí),就需要從表中將其刪除。刪除主鍵約束的方法要比創(chuàng)建主鍵約束容易的多。

    語(yǔ)法

    alter table <數(shù)據(jù)表名> drop primary key;

    實(shí)現(xiàn)

    -- 刪除單列主鍵 alter table emp1 drop primary key; -- 刪除聯(lián)合主鍵 alter table emp5 drop primary key;

    自增長(zhǎng)約束(auto_increment)

    概念

    • 在 MySQL 中,當(dāng)主鍵定義為自增長(zhǎng)后,這個(gè)主鍵的值就不再需要用戶(hù)輸入數(shù)據(jù)了,而由數(shù)據(jù)庫(kù)系統(tǒng)根據(jù)定義自動(dòng)賦值。每增加一條記錄,主鍵會(huì)自動(dòng)以相同的步長(zhǎng)進(jìn)行增長(zhǎng)。
    • 通過(guò)給字段添加 auto_increment 屬性來(lái)實(shí)現(xiàn)主鍵自增長(zhǎng)。

    特點(diǎn)

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

    操作

    • 指定自增字段初始值
      如果第一條記錄設(shè)置了該字段的初始值,那么新增加的記錄就從這個(gè)初始值開(kāi)始自增。例如,如果表中插入的第一條記錄的 id 值設(shè)置為 n,那么再插入記錄時(shí),id 值就會(huì)從 n 開(kāi)始往上增加。

    語(yǔ)法

    字段名 數(shù)據(jù)類(lèi)型 auto_increment

    方式1

    -- 方式1,創(chuàng)建表時(shí)指定 create table t_user2 ( id int primary key auto_increment, name varchar(20) )auto_increment=100;

    方式2

    -- 方式2,創(chuàng)建表之后指定 create table t_user3 ( id int primary key auto_increment, name varchar(20) ); alter table t_user2 auto_increment=100;

    知識(shí)點(diǎn):delete和truncate在刪除后自增列的變化

  • delete數(shù)據(jù)之后自動(dòng)增長(zhǎng)從斷點(diǎn)開(kāi)始
  • truncate數(shù)據(jù)之后自動(dòng)增長(zhǎng)從默認(rèn)起始值開(kāi)始

  • 非空約束(not null)

    概念

    • MySQL 非空約束(not null)指字段的值不能為空。對(duì)于使用了非空約束的字段,如果用戶(hù)在添加數(shù)據(jù)時(shí)沒(méi)有指定值,數(shù)據(jù)庫(kù)系統(tǒng)就會(huì)報(bào)錯(cuò)。

    操作

    語(yǔ)法

    方式1<字段名><數(shù)據(jù)類(lèi)型> not null; 方式2alter table 表名 modify 字段 類(lèi)型 not null;

    添加非空約束

    -- 方式1,創(chuàng)建表時(shí)指定 create table t_user6 ( id int , name varchar(20) not null, address varchar(20) not null ); -- 方式2,修改表時(shí)指定 create table t_user7 ( id int , name varchar(20) , -- 指定非空約束 address varchar(20) -- 指定非空約束 ); alter table t_user7 modify name varchar(20) not null; alter table t_user7 modify address varchar(20) not null;

    刪除非空約束

    -- alter table 表名 modify 字段 類(lèi)型 alter table t_user7 modify name varchar(20) ; alter table t_user7 modify address varchar(20) ;

    唯一約束(unique)

    概念

    • 唯一約束(Unique Key)是指所有記錄中字段的值不能重復(fù)出現(xiàn)。例如,為 id 字段加上唯一性約束后,每條記錄的 id
      值都是唯一的,不能出現(xiàn)重復(fù)的情況。

    操作

    語(yǔ)法

    方式1<字段名> <數(shù)據(jù)類(lèi)型> unique 方式2alter table 表名 add constraint 約束名 unique();

    添加唯一約束

    -- 方式一 create table t_user8 ( id int , name varchar(20) , phone_number varchar(20) unique -- 指定唯一約束 ); -- 方式二 create table t_user9 ( id int , name varchar(20) , phone_number varchar(20) -- 指定唯一約束 ); alter table t_user9 add constraint unique_ph unique(phone_number);

    刪除唯一約束

    -- alter table <表名> drop index <唯一約束名>; alter table t_user9 drop index unique_ph;

    默認(rèn)約束(default)

    概念

    • MySQL 默認(rèn)值約束用來(lái)指定某列的默認(rèn)值。

    操作

    語(yǔ)法

    方式1<字段名> <數(shù)據(jù)類(lèi)型> default <默認(rèn)值>; 方式2: alter table 表名 modify 列名 類(lèi)型 default 默認(rèn)值;

    添加默認(rèn)約束

    --方式一 create table t_user10 ( id int , name varchar(20) , address varchar(20) default ‘北京’ -- 指定默認(rèn)約束 ); -- alter table 表名 modify 列名 類(lèi)型 default 默認(rèn)值; create table t_user11 ( id int , name varchar(20) , address varchar(20) ); alter table t_user11 modify address varchar(20) default ‘北京’;

    刪除默認(rèn)約束

    -- alter table <表名> modify column <字段名> <類(lèi)型> default null; alter table t_user11 modify column address varchar(20) default null;

    零填充約束(zerofill)

    概念

    • 插入數(shù)據(jù)時(shí),當(dāng)該字段的值的長(zhǎng)度小于定義的長(zhǎng)度時(shí),會(huì)在該值的前面補(bǔ)上相應(yīng)的
    • zerofill默認(rèn)為int(10)
    • 當(dāng)使用zerofill
      時(shí),默認(rèn)會(huì)自動(dòng)加unsigned(無(wú)符號(hào))屬性,使用unsigned屬性后,數(shù)值范圍是原值的2倍,例如,有符號(hào)為-128+127,無(wú)符號(hào)為0256。

    操作

    create table t_user12 ( id int zerofill , -- 零填充約束name varchar(20) );

    刪除零填充約束

    alter table t_user12 modify id int;

    外鍵約束(foreign key)

    概念

    • 外鍵約束(FOREIGN KEY)是表的一個(gè)特殊字段,經(jīng)常與主鍵約束一起使用。對(duì)于兩個(gè)具有關(guān)聯(lián)關(guān)系的表而言,相關(guān)聯(lián)字段中主鍵所在的表就是主表(父表),外鍵所在的表就是從表(子表)。

    特點(diǎn)

    • 主表必須已經(jīng)存在于數(shù)據(jù)庫(kù)中,或者是當(dāng)前正在創(chuàng)建的表。
    • 必須為主表定義主鍵。
    • 主鍵不能包含空值,但允許在外鍵中出現(xiàn)空值。也就是說(shuō),只要外鍵的每個(gè)非空值出現(xiàn)在指定的主鍵中,這 個(gè)外鍵的內(nèi)容就是正確的。
    • 在主表的表名后面指定列名或列名的組合。這個(gè)列或列的組合必須是主表的主鍵或候選鍵。
    • 外鍵中列的數(shù)目必須和主表的主鍵中列的數(shù)目相同。
    • 外鍵中列的數(shù)據(jù)類(lèi)型必須和主表主鍵中對(duì)應(yīng)列的數(shù)據(jù)類(lèi)型相同。

    操作

    語(yǔ)法

    --方式一 [constraint <外鍵名>] foreign key 字段名 [,字段名2,…] references <主表名> 主鍵列1 [,主鍵列2,…] --方式二 alter table <數(shù)據(jù)表名> add constraint <外鍵名> foreign key(<列名>) >references <主表名> (<列名>);

    總結(jié)

    以上是生活随笔為你收集整理的MySQL八大约束的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。