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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL数据库:完整性约束

發布時間:2025/4/16 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL数据库:完整性约束 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 完整性約束

完整性約束是為了表的數據的正確性!如果數據不正確,那么一開始就不能添加到表中。

2. 主鍵

當某一列添加了主鍵約束后,那么這一列的數據就不能重復出現。這樣每行記錄中其主鍵列的值就是這一行的唯一標識。例如學生的學號可以用來做唯一標識,而學生的姓名是不能做唯一標識的,因為姓名有可能同名。

主鍵列的值不能為NULL,也不能重復!指定主鍵約束使用PRIMARY KEY關鍵字

  • 創建表:定義列時指定主鍵:
CREATE TABLE stu(sid CHAR(6) PRIMARY KEY,sname VARCHAR(20),age INT,gender VARCHAR(10) );
  • 創建表:定義列之后獨立指定主鍵:
CREATE TABLE stu(sid CHAR(6),sname VARCHAR(20),age INT,gender VARCHAR(10),PRIMARY KEY(sid) );
  • 修改表時指定主鍵:
ALTER TABLE stu ADD PRIMARY KEY(sid);
  • 刪除主鍵(只是刪除主鍵約束,而不會刪除主鍵列):
ALTER TABLE stu DROP PRIMARY KEY;

3. 主鍵自增長

MySQL提供了主鍵自動增長的功能!這樣用戶就不用再為是否有主鍵是否重復而煩惱了。當主鍵設置為自動增長后,在沒有給出主鍵值時,主鍵的值會自動生成,而且是最大主鍵值+1,也就不會出現重復主鍵的可能了。

  • 創建表時設置主鍵自增長(主鍵必須是整型才可以自增長):
CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(20),age INT,gender VARCHAR(10) );
  • 修改表時設置主鍵自增長:
ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;
  • 修改表時刪除主鍵自增長:
ALTER TABLE stu CHANGE sid sid INT;

4. 非空

指定非空約束的列不能沒有值,也就是說在插入記錄時,對添加了非空約束的列一定要給值;在修改記錄時,不能把非空列的值設置為NULL。

  • 指定非空約束:
CREATE TABLE stu(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(10) NOT NULL,age INT,gender VARCHAR(10) );

當為sname字段指定為非空后,在向stu表中插入記錄時,必須給sname字段指定值,否則會報錯:

INSERT INTO stu(sid) VALUES(1);

插入的記錄中sname沒有指定值,所以會報錯!

5. 唯一

還可以為字段指定唯一約束!當為字段指定唯一約束后,那么字段的值必須是唯一的。這一點與主鍵相似!例如給stu表的sname字段指定唯一約束:

CREATE TABLE tab_ab(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(10) UNIQUE );INSERT INTO sname(sid, sname) VALUES(1001, 'zs'); INSERT INTO sname(sid, sname) VALUES(1002, 'zs');

當兩次插入相同的名字時,MySQL會報錯!

6. 概念模型

對象模型:在java中是domain,例如:User、Student,可以雙向關聯,而且引用的是對象,而不是一個主鍵

關系模型:在數據庫中的表,只能多方引用一方,而且引用的只是主鍵,而不是一整行記錄。

當我們要完成一個軟件系統時,需要把系統中的實體抽取出來,形成概念模型。例如部門、員工都是系統中的實體。概念模型中的實體最終會成為Java中的類、數據庫中的表。

實體之間還存在著關系,關系有三種:

  • 1對多:例如每個員工都從屬一個部門,而一個部門可以有多個員工,其中員工是多方,而部門是一方。
  • 1對1:例如老公和老婆就是一對一的關系,一個老公只能有一個老婆,而一個老婆只能有一個老公。
  • 多對多:老師與學生的關系就是多對多,一個老師可以有多個學生,一個學生可以有多個老師。

概念模型在Java中成為實體類(javaBean),類就使用成員變量來完成關系,一般都是雙向關聯!多對一雙向中關聯,即員工關聯部門,部門也關聯員工

class Employee {//多方關聯一方...private Department department;}class Department {//一方關聯多方...private List<Employee> employees;}class Husband {...private Wife wife;}class Wife {...private Husband}class Student {...private List<Teacher> teachers}class Teacher {...private List<Student> students;}

7. 外鍵

主外鍵是構成表與表關聯的唯一途徑!

  • 外鍵必須是另一表的主鍵的值(外鍵要引用主鍵!)
  • 外鍵可以重復
  • 外鍵可以為空
  • 一張表中可以有多個外鍵!

外鍵是另一張表的主鍵!例如員工表與部門表之間就存在關聯關系,其中員工表中的部門編號字段就是外鍵,是相對部門表的外鍵。

我們再來看BBS系統中:用戶表(t_user)、分類表(t_section)、帖子表(t_topic)三者之間的關系。

例如在t_section表中sid為1的記錄說明有一個分類叫java,版主是t_user表中uid為1的用戶,即zs!

例如在t_topic表中tid為2的記錄是名字為“Java是咖啡”的帖子,它是java版塊的帖子,它的作者是ww。

外鍵就是用來約束這一列的值必須是另一張表的主鍵值!!!

創建t_user表,指定uid為主鍵列:

CREATE TABLE t_user(uid INT PRIMARY KEY AUTO_INCREMENT,uname VARCHAR(20) UNIQUE NOT NULL );

創建t_section表,指定sid為主鍵列,u_id為相對t_user表的uid列的外鍵:

CREATE TABLE t_section(sid INT PRIMARY KEY AUTO_INCREMENT,sname VARCHAR(30),u_id INT,CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid) );

修改t_section表,指定u_id為相對t_user表的uid列的外鍵:

ALTER TABLE t_section ADD CONSTRAINT fk_t_user FOREIGN KEY(u_id) REFERENCES t_user(uid);

修改t_section表,刪除u_id的外鍵約束:

ALTER TABLE t_section DROP FOREIGN KEY fk_t_user;

8. 表與表之間的關系

8.1 一對一

例如t_person表和t_card表,即人和身份證。這種情況需要找出主從關系,即誰是主表,誰是從表。人可以沒有身份證,但身份證必須要有人才行,所以人是主表,而身份證是從表。設計從表可以有兩種方案:

  • 在t_card表中添加外鍵列(相對t_user表),并且給外鍵添加唯一約束;
  • 給t_card表的主鍵添加外鍵約束(相對t_user表),即t_card表的主鍵也是外鍵。

在表中建立一對一關系比較特殊,需要讓其中一張表的主鍵,即是主鍵又是外鍵。

create table husband(hid int PRIMARY KEY,...);create table wife(wid int PRIMARY KEY,...ADD CONSTRAINT fk_wife_wid FOREIGN KEY(wid) REFERENCES husband(hid));

其中wife表的wid即是主鍵,又是相對husband表的外鍵!
husband.hid是主鍵,不能重復!
wife.wid是主鍵,不能重復,又是外鍵,必須來自husband.hid。
所以如果在wife表中有一條記錄的wid為1,那么wife表中的其他記錄的wid就不能再是1了,因為它是主鍵。
同時在husband.hid中必須存在1這個值,因為wid是外鍵。這就完成了一對一關系。

8.2 一對多(多對一)

最為常見的就是一對多!一對多和多對一,這是從哪個角度去看得出來的。t_user和t_section的關系,從t_user來看就是一對多,而從t_section的角度來看就是多對一!這種情況都是在多方創建外鍵!

數據庫表中的多對一關系,只需要在多方使用一個獨立的列來引用1方的主鍵即可

/*員工表*/create talbe emp (empno int primary key,/*員工編號*/...deptno int/*所屬部門的編號*/);/*部門表*/create table dept (deptno int primary key,/*部門編號*/...);

emp表中的deptno列的值表示當前員工所從屬的部門編號。也就是說emp.deptno必須在dept表中是真實存在!但是我們必須要去對它進行約束,不然可能會出現員工所屬的部門編號是不存在的。這種約束就是外鍵約束。

我們需要給emp.deptno添加外鍵約束,約束它的值必須在dept.deptno中存在。外鍵必須是另一個表的主鍵!

語法:CONSTRAINT 約束名稱 FOREIGN KEY(外鍵列名) REFERENCES 關聯表(關聯表的主鍵)

/*創建表時指定外鍵約束*/create talbe emp (empno int primary key,...deptno int,CONSTRAINT fk_emp FOREIGN KEY(mgr) REFERENCES emp(empno) );/*修改表時添加外鍵約束*/ALERT TABLE empADD CONSTRAINT fk_emp_deptno FOREIGN KEY(deptno) REFERENCES dept(deptno);/*修改表時刪除外鍵約束*/ALTER TABLE empDROP FOREIGN KEY fk_emp_deptno;/*約束名稱*/

8.3 多對多

例如t_stu和t_teacher表,即一個學生可以有多個老師,而一個老師也可以有多個學生。這種情況通常需要創建中間表來處理多對多關系。例如再創建一張表t_stu_tea表,給出兩個外鍵,一個相對t_stu表的外鍵,另一個相對t_teacher表的外鍵。

在表中建立多對多關系需要使用中間表,即需要三張表,在中間表中使用兩個外鍵,分別引用其他兩個表的主鍵。

create table student(sid int PRIMARY KEY,...);create table teacher(tid int PRIMARY KEY,...);create table stu_tea(sid int,tid int,ADD CONSTRAINT fk_stu_tea_sid FOREIGN KEY(sid) REFERENCES student(sid),ADD CONSTRAINT fk_stu_tea_tid FOREIGN KEY(tid) REFERENCES teacher(tid));

這時在stu_tea這個中間表中的每條記錄都是來說明student和teacher表的關系

例如在stu_tea表中的記錄:sid為1001,tid為2001,這說明編號為1001的學生有一個編號為2001的老師

sid tid 101 201 /*編號為101的學生有一個編號為201的老師*/ 101 202 /*編號為101的學生有一個編號為202的老師*/ 101 203 /*編號為101的學生有一個編號為203的老師*/ 102 201 /*編號為102的學生有一個編號為201的老師*/ 102 204 /*編號為102的學生有一個編號為204的老師*/

總結

以上是生活随笔為你收集整理的MySQL数据库:完整性约束的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色av免费在线看 | 西西人体大胆4444ww张筱雨 | 2019天天干| 性色国产成人久久久精品 | 精品久久精品久久 | 午夜av一区二区 | 99综合| 韩日成人 | 福利片一区二区 | 337p日本大胆噜噜噜噜 | 蜜桃传媒| 欧美高清在线视频 | 少妇欧美激情一区二区三区 | 国产精品一区二区三区四区 | 男人的天堂日韩 | 国产精品美女久久 | 理论黄色片 | 亚洲男人的天堂网 | 亚洲av成人精品午夜一区二区 | 免费成人黄| 一本色道久久综合狠狠躁的推荐 | 国产又粗又黄又爽视频 | 日本在线视频播放 | 尤物视频在线观看国产性感 | 成人午夜视频在线观看 | 国产精品免费视频一区二区三区 | 亚洲午夜精品久久久久久人妖 | 96国产精品 | av在线入口 | 可以免费看黄的网站 | 国产精品夜色一区二区三区 | 中文字幕av一区二区三区人妻少妇 | 白俄罗斯毛片 | 免费国产一级 | 天天干天天插 | 国产片淫乱18一级毛片动态图 | 国产大片一区二区 | 青青草在线免费视频 | 激情春色网 | 欧美成人精品激情在线视频 | www.96av| 老妇女av | 亚洲AV无码一区二区三区蜜桃 | 国产精品一区二区电影 | 特黄特黄视频 | 国产精品中文 | 老司机久久 | 免费禁漫天堂a3d | 小箩莉末发育娇小性色xxxx | 69久久久| 天天综合久久综合 | 福利视频在线 | 久久精品伊人 | 老司机久久| 九九视频国产 | 97超视频| 亚洲日本中文 | 欧美日本一区二区三区 | 丰满的人妻hd高清日本 | 九九热这里都是精品 | 婷婷婷色 | 鲁一鲁av| 日本少妇b| 亚洲福利国产 | 日本少妇毛茸茸高潮 | 蜜桃视频在线观看一区 | www..com色| 日韩图色 | 丝袜国产一区 | 午夜污污 | 午夜三区 | 精品欧美一区二区久久久久 | 神马午夜888 | 夜夜爱爱 | 一区精品视频在线观看 | 亚洲激情短视频 | 91插视频 | 69堂免费视频 | 久久精品无码一区 | 久久一区二 | 重囗味sm一区二区三区 | www.久久久久久久久久 | 激情成人综合网 | 欧美自拍视频 | 久久99精品国产.久久久久 | 欧美高清视频一区 | 日本www网站 | 亚洲蜜桃视频 | 青青草福利| 精品动漫一区二区三区 | 丰满大乳国产精品 | av男女 | 欧美国产精品一二三 | 悠悠色在线 | 国产成人精品免高潮在线观看 | 欧美一区二区三区的 | 色婷婷亚洲综合 | 欧美整片在线观看 | 久久久久久中文 |