九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
Mysql基礎(chǔ)02-約束

約束與索引

概念

1、數(shù)據(jù)完整性(Data Integrity)是指數(shù)據(jù)的精確性(Accuracy)和可靠性(Reliability)。

  • 實(shí)體完整性(Entity Integrity):例如,同一個(gè)表中,不能存在兩條完全相同無(wú)法區(qū)分的記錄

  • 域完整性(Domain Integrity):例如:年齡范圍0-120,性別范圍“男/女”

  • 引用完整性(Referential Integrity):例如:?jiǎn)T工所在部門,在部門表中要能找到這個(gè)部門

  • 用戶自定義完整性(User-defined Integrity):例如:用戶名唯一、密碼不能為空等

2、約束

  • 鍵約束:主鍵約束、外鍵約束、唯一鍵約束

  • Not NULL約束:非空約束

  • Check約束:檢查約束

  • Default約束:默認(rèn)值約束

  • 自增約束

3、約束(CONSTRAINTS)與索引(INDEX)

約束是用來(lái)對(duì)數(shù)據(jù)業(yè)務(wù)規(guī)則和數(shù)據(jù)完整性進(jìn)行實(shí)施、維護(hù)。約束的作用范圍僅限在當(dāng)前數(shù)據(jù)庫(kù),是邏輯約束,不會(huì)因?yàn)樵O(shè)置約束而額外占用空間。

索引是一個(gè)單獨(dú)、物理的存儲(chǔ)在數(shù)據(jù)頁(yè)上的數(shù)據(jù)庫(kù)結(jié)構(gòu),它是表中一列或若干列值的集合和相應(yīng)的指向表中數(shù)據(jù)值的物理標(biāo)識(shí)數(shù)據(jù)頁(yè)的邏輯指針清單(類似于新華字典的目錄索引頁(yè))。可以大大提高查詢速度。應(yīng)該在鍵列、或其他經(jīng)常要查詢、排序、按范圍查找的列上建立索引。

Mysql會(huì)在主鍵、唯一鍵、外鍵列上自動(dòng)創(chuàng)建索引,其他列需要建立索引的話,需要手動(dòng)創(chuàng)建。

其中主鍵刪除,對(duì)應(yīng)的索引也會(huì)刪除

刪除唯一鍵的方式是通過(guò)刪除對(duì)應(yīng)的索引來(lái)實(shí)現(xiàn)的

刪除外鍵,外鍵列上的索引還在,如果需要?jiǎng)h除,需要單獨(dú)刪除索引

查看某個(gè)表的約束

SELECT * FROM information_schema.table_constraints WHERE table_name = '表名稱';
或
SHOW CREATE TABLE 表名;

查看某個(gè)表的索引

SHOW INDEX FROM 表名稱;

主鍵約束:primary key

主鍵分為單列主鍵和復(fù)合主鍵

主鍵的特點(diǎn)

(1)唯一并且非空(2)一個(gè)表只能有一個(gè)主鍵約束(3)主鍵約束名就叫做PRIMARY(4)創(chuàng)建主鍵會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的索引,同樣刪除主鍵對(duì)應(yīng)的索引也會(huì)刪除。

建表時(shí)指定主鍵約束

create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  ....
);
或
create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型,
  ....,
  primary key(字段名1)
);
或
create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型,
  字段名2 數(shù)據(jù)類型,
  ....,
  primary key(復(fù)合主鍵字段列表)  #如果是復(fù)合主鍵,那么就需要在所有字段列表后面使用這種形式指定,不能在字段后面直接加primary key
);

建表后指定主鍵約束

alter table 表名稱 add primary key (主鍵字段列表);

刪除主鍵約束

alter table 表名稱 drop primary key;

唯一鍵約束:unique key

唯一鍵約束特點(diǎn):

(1)同一個(gè)表可以有多個(gè)唯一約束。(2)唯一約束可以是某一個(gè)列的值唯一,也可以多個(gè)列組合值的唯一。(3)MySQL會(huì)給唯一約束的列上默認(rèn)創(chuàng)建一個(gè)唯一索引。(4)刪除唯一鍵只能通過(guò)刪除對(duì)應(yīng)索引的方式刪除,刪除時(shí)需要指定唯一鍵索引名

建表時(shí)指定唯一鍵約束

create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  字段名2 數(shù)據(jù)類型 unique key,
  ....
);

create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  字段名2 數(shù)據(jù)類型,
  字段名3 數(shù)據(jù)類型,
  ....,
  unique key(復(fù)合唯一字段列表)  #如果是復(fù)合唯一鍵,那么就需要在所有字段列表后面使用這種形式指定,不能在字段后面直接加unique key
);

建表后增加唯一鍵約束

alter table 表名稱 addconstraint 約束名】 uniquekey】 (字段名列表);

#如果沒(méi)有指定約束名,(字段名列表)中只有一個(gè)字段的,默認(rèn)是該字段名,如果是多個(gè)字段的默認(rèn)是字段名列表的第1個(gè)字段名。

刪除唯一鍵約束

ALTER TABLE 表名稱 DROP INDEX 唯一鍵約束名;

外鍵約束:foreign key

外鍵特點(diǎn):

  • 外鍵約束是保證一個(gè)或兩個(gè)表之間的參照完整性,外鍵是構(gòu)建于一個(gè)表的兩個(gè)字段或是兩個(gè)表的兩個(gè)字段之間的參照關(guān)系。

  • 在創(chuàng)建外鍵約束時(shí),如果不給外鍵約束名稱,默認(rèn)名不是列名,而是自動(dòng)產(chǎn)生一個(gè)外鍵名(例如 student_ibfk_1;),也可以指定外鍵約束名。

  • 當(dāng)創(chuàng)建外鍵約束時(shí),系統(tǒng)默認(rèn)會(huì)在所在的列上建立對(duì)應(yīng)的普通索引。但是索引名是列名,不是外鍵的約束名。

  • 刪除外鍵時(shí),關(guān)于外鍵列上的普通索引需要單獨(dú)刪除。

要求

  • 在從表上建立外鍵,而且主表要先存在。

  • 一個(gè)表可以建立多個(gè)外鍵約束

  • 從表的外鍵列,在主表中引用的只能是鍵列(主鍵,唯一鍵,外鍵),推薦引用主表的主鍵。

  • 從表的外鍵列與主表被參照的列名字可以不相同,但是數(shù)據(jù)類型必須一樣

約束關(guān)系:約束是針對(duì)雙方的

添加了外鍵約束后,主表的修改和刪除受約束

添加了外鍵約束后,從表的添加和修改受約束

5個(gè)約束等級(jí)

  • Cascade方式:在父表上update/delete記錄時(shí),同步update/delete掉子表的匹配記錄

  • Set null方式:在父表上update/delete記錄時(shí),將子表上匹配記錄的列設(shè)為null,但是要注意子表的外鍵列不能為not null

  • No action方式:如果子表中有匹配的記錄,則不允許對(duì)父表對(duì)應(yīng)候選鍵進(jìn)行update/delete操作

  • Restrict方式:同no action, 都是立即檢查外鍵約束

  • Set default方式(在可視化工具SQLyog中可能顯示空白):父表有變更時(shí),子表將外鍵列設(shè)置成一個(gè)默認(rèn)的值,但I(xiàn)nnodb不能識(shí)別

如果沒(méi)有指定等級(jí),就相當(dāng)于Restrict方式

建表時(shí)指定外鍵約束

create table 【數(shù)據(jù)名.】從表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  字段名2 數(shù)據(jù)類型 【unique key】,
  ....,
  【constraint 外鍵約束名】 foreign key (從表字段) references 主表名(主表字段) 【on update 外鍵約束等級(jí)】【on delete 外鍵約束等級(jí)】
);

#外鍵只能在所有字段列表后面單獨(dú)指定
#如果要自己命名外鍵約束名,建議 主表名_從表名_關(guān)聯(lián)字段名_fk

建表后指定外鍵約束

alter table 從表名稱 addconstraint 外鍵約束名】 foreign key (從表字段名) references 主表名(主表被參照字段名) 【on update xx】【on delete xx】;

刪除外鍵約束

ALTER TABLE 表名稱 DROP FOREIGN KEY 外鍵約束名;

#刪除外鍵約束不會(huì)刪除對(duì)應(yīng)的索引

刪除索引

ALTER TABLE 表名稱 DROP INDEX 索引名;

非空約束:not null

規(guī)定某個(gè)字段不能為空

建表時(shí)指定非空約束

create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  字段名2 數(shù)據(jù)類型 【unique key】 【not null】,
  字段名2 數(shù)據(jù)類型 【not null】,
  ....,
);

建表后指定非空約束

ALTER TABLE 表名稱 MODIFY 字段名 數(shù)據(jù)類型 NOT NULLdefault 默認(rèn)值】;

#如果該字段原來(lái)設(shè)置了默認(rèn)值約束,要跟著一起再寫一遍,否則默認(rèn)值約束會(huì)丟失

刪除非空約束

ALTER TABLE 表名稱 MODIFY 字段名 數(shù)據(jù)類型 【default 默認(rèn)值】;

#如果該字段原來(lái)設(shè)置了默認(rèn)值約束,要跟著一起再寫一遍,否則默認(rèn)值約束會(huì)丟失

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

建表時(shí)指定默認(rèn)約束

create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  字段名2 數(shù)據(jù)類型 【unique key】 【not null】 【default 默認(rèn)值】,
  字段名3 數(shù)據(jù)類型 【not null】 【default 默認(rèn)值】,
  ....,
);

建表后指定默認(rèn)值約束

ALTER TABLE 表名稱 MODIFY 字段名 數(shù)據(jù)類型 【default 默認(rèn)值】 【NOT NULL】;

#如果該字段原來(lái)設(shè)置了非空約束,要跟著一起再寫一遍,否則非空約束會(huì)丟失

刪除默認(rèn)值約束

ALTER TABLE 表名稱 MODIFY 字段名 數(shù)據(jù)類型 【NOT NULL】;

#如果該字段原來(lái)設(shè)置了非空約束,要跟著一起再寫一遍,否則非空約束會(huì)丟失

檢查約束,mysql暫不支持

自增約束:auto_increment

特點(diǎn):

  • 一個(gè)表最多只能有一個(gè)自增長(zhǎng)列

  • 自增長(zhǎng)列必須是鍵列(主鍵列,唯一鍵列,外鍵列),并且要求非空。

  • 自增列必須是整數(shù)類型

  • InnoDB表的自動(dòng)增長(zhǎng)列可以手動(dòng)插入,但是插入的值如果是空或者0,則實(shí)際插入的將是自動(dòng)增長(zhǎng)后的值。

建表時(shí)指定自增長(zhǎng)

create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key auto_increment,
  字段名2 數(shù)據(jù)類型 【unique key】 【not null】 【default 默認(rèn)值】,
  ....
);
或
create table 【數(shù)據(jù)名.】表名(
  字段名1 數(shù)據(jù)類型 primary key ,
  字段名2 數(shù)據(jù)類型 【unique key not null】 auto_increment,
  ....
);

建表后指定自增長(zhǎng)

alter table 【數(shù)據(jù)名.】表名 modify 自增字段名 數(shù)據(jù)類型 auto_increment;

刪除自增約束

alter table 【數(shù)據(jù)名.】表名 modify 自增字段名 數(shù)據(jù)類型;

添加數(shù)據(jù)時(shí),如果某列有自增約束,怎么添加該字段的值

insert into 【數(shù)據(jù)庫(kù)名.]表名稱 values(值列表);#在值列表中,對(duì)應(yīng)自增列可以賦值為null和0
insert into 【數(shù)據(jù)庫(kù)名.]表名稱(部分字段列表) values(值列表);#自增列在(部分字段列表)中不寫就可以

添加數(shù)據(jù)時(shí),如果某列有默認(rèn)值約束,怎么添加、修改該字段的值

insert into 【數(shù)據(jù)庫(kù)名.]表名稱 values(值列表);#在值列表中,對(duì)應(yīng)默認(rèn)值列,如果想用默認(rèn)值,用default

insert into 【數(shù)據(jù)庫(kù)名.]表名稱(部分字段列表) values(值列表);#對(duì)應(yīng)默認(rèn)值列,如果想用默認(rèn)值,在(部分字段列表)中不寫就可以

修改數(shù)據(jù)

update 【數(shù)據(jù)庫(kù)名.]表名稱 set 字段名1 = 值1, 字段名2 = 值2 。。。 【where 條件】; #對(duì)應(yīng)默認(rèn)值列,如果想用默認(rèn)值,寫字段名 = default就可以
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
MySql 表結(jié)構(gòu)修改、約束條件、表關(guān)系
MySQL 表約束
【第10天】SQL進(jìn)階-表的創(chuàng)建、修改與刪除(SQL 小虛竹)
數(shù)據(jù)庫(kù)
MySQL詳解
MySQL數(shù)據(jù)庫(kù)實(shí)操教程(07)——表的約束
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服