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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql约束深入了解_MySQL 的约束

發(fā)布時間:2023/12/4 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql约束深入了解_MySQL 的约束 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

約束是添加在列上, 用來約束列的!

1. 主鍵約束(表中的某行的唯一標(biāo)識)

主鍵的特點:

非空

唯一

被引用

創(chuàng)建表時, 指定主鍵的兩種方式:

// 需求: 指定 sid 列為主鍵列, 即為 sid 列添加主鍵約束

// 第一種方式:

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;

2. 主鍵自增長

因為主鍵列的特性是: 必須唯一, 不能為空, 所以我們通常會指定主鍵類型為整型, 然后設(shè)置其自動增長,

這樣可以保證在插入數(shù)據(jù)時, 主鍵列的唯一和非空特性.

創(chuàng)建表時,指定主鍵自增長

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20),

age INT,

gender VARCHAR(10)

);

修改表時, 設(shè)置主鍵自增長: ALTER TABLE stu CHANGE sid sid INT AUTO_INCREMENT;

修改表時, 刪除主鍵自增長: ALTER TABLE stu CHANGE sid sid INT;

3. 非空約束

因為某些列不能設(shè)置為 NULL 值, 所以可以對列添加非空約束.

// 示例: 對 sname 列設(shè)置非空約束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) NOT NULL,

age INT,

gender VARCHAR(20)

);

4. 唯一約束

數(shù)據(jù)庫某些值不能設(shè)置重復(fù)的值, 所以可以對列添加唯一約束.

// 示例: 對 sname 列設(shè)置唯一約束

CREATE TABLE stu(

sid INT PRIMARY KEY AUTO_INCREMENT,

sname VARCHAR(20) UNIQUE,

age INT,

gender VARCHAR(20)

);

5. 概念模型

當(dāng)我們要完成一個軟件體統(tǒng)時, 需要把系統(tǒng)中的實體抽取出來, 形成概念模型.

例如部門, 員工都是系統(tǒng)中的實體. 概念模型中的實體最終都會稱為 JAVA 中的 domain類(對象模型), 數(shù)據(jù)庫中的表(關(guān)系模型).

5.1 實體之間的關(guān)系有三種:

1 對多: 例如每個員工都從屬一個部門, 而一個部門可以有多個員工, 其中員工是多方, 而部門是一方;

1 對 1 : 例如老公和老婆就是一對一的關(guān)系.(不常見)

多對多 : 老師和學(xué)生的關(guān)系就是多對多, 一個老師可以有多個學(xué)生, 一個學(xué)生可以有多個老師.

5.2 對象模型和關(guān)系模型

對象模型(Java 中的類): 可以雙向關(guān)聯(lián), 而且引用的是對象, 而不是一個主鍵!

關(guān)系模型(數(shù)據(jù)庫中的表): 只能多方引用一方, 而且引用的只是主鍵, 而不是一整行記錄.

java 中的類,使用成員變量來完成關(guān)系, 一般都是雙向關(guān)聯(lián)!!

// 實體之間的關(guān)系, java 代碼體現(xiàn)

// 多對一關(guān)系:

class Employee{ // 多方關(guān)聯(lián)一方, 即員工關(guān)聯(lián)部門

...

private Department department;

}

class Department{ // 一方關(guān)聯(lián)多方, 即部門關(guān)聯(lián)員工

...

private List employee;

}

// 多對多

class Student{ // 學(xué)生關(guān)聯(lián)老師

...

private List teacher;

}

class Teacher{

...

private List student;

}

6. 外鍵約束

外鍵特點:

外鍵必須是另一張表的主鍵的值(即外鍵要引用主鍵)

外鍵可以重復(fù)

外鍵可以為空

一張表中可以有多個外鍵!!

創(chuàng)建表時, 指定外鍵約束:

CREATE TABLE emp(

empno INT PRIMARY KEY AUTO_INCREMENT,

ename VARCHAR(50),

dno INT,

CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno)

)

// fk_emp_dept : 約束名稱

// fk, 表示 foreign key;

// emp, 表示從表, 即多方;

// dept, 表示主表, 即一方

// dno: 表示本表中作為外鍵的列

// dept(deptno): 表示引用的是 dept表的 deptno列

修改表時, 添加外鍵約束:

ALTER TABLE emp ADD CONSTRAINT fk_emp_dept FOREIGN KEY(dno) REFERENCES dept(deptno);

修改表時, 刪除外鍵約束:

ALTER TABLE emp DROP FOREIGN KEY fk_emp_deptno;

7. 數(shù)據(jù)庫中一對一關(guān)系

// 在表中建立一對一關(guān)系比較特殊, 需要讓從表的主鍵, 也是外鍵.

CREATE TABLE husband(

hid INT PRIMARY KEY,

...

);

CREATE TABLE wife(

wid INT PRIMARY KEY,

...

CONSTRAINT fk_wife_hid FOREIGN KEY(wid) REFERENCES husband(hid)

);

/*

* 其中, wife 表的 wid 鍵既是主鍵,又是相對 husband 表的外鍵!

* husband.hid 是主鍵, 不能重復(fù)!

* wife.wid 是主鍵,不能重復(fù), 又是外鍵, 必須來自 husband.hid.

* 所以如果 wife 表中有一條記錄的 wid 為 1, 那么 wife 表中的其他記錄的 wid 就不能再是1了,因為它是主鍵.

* 同時, 在 husband.hid 中必須存在 1 這個值, 因為 wid 是外鍵, 這就完成了一對一關(guān)系.

*/

8. 數(shù)據(jù)庫中多對多關(guān)系

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

CREATE TABLE student( // 學(xué)生表

sid INT PRIMARY KEY,

...

);

CREATE TABLE teacher( // 教師表

tid INT PRIMARY KEY,

...

);

CREATE TABLE stu_tea(

sid INT,

tid INT,

CONSTRAINT fk_student FOREIGN KEY(sid) REFERENCES student(sid),

CONSTRAINT fk_teacher FOREIGN KEY(tid) REFERENCES teacher(tid)

);

// 這時, 在 stu_tea 這個中間表中的每條記錄都是說明 student 和 teacher 表的關(guān)系.

// 例如, stu_tea 表中的記錄: sid 為100, tid 為 201, 說明編號為 100 的學(xué)生有一個編號為 201 的老師.

參考資料:

總結(jié)

以上是生活随笔為你收集整理的mysql约束深入了解_MySQL 的约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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