中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL——約束(constraint)詳細解釋

發布時間:2020-06-07 17:56:26 來源:網絡 閱讀:896 作者:loserone 欄目:MySQL數據庫
  1. 約束是什么用來干嘛?
    約束實際上就是表中數據的限制條件
    作用:表在設計的時候加入約束的目的就是為了保證表中的記錄完整和有效
    比如一些字段的唯一性,將一些字段約束成外鍵

  2. 約束種類:
    非空約束(not null)
    唯一性約束(unique)
    主鍵約束(primary key) PK
    外鍵約束(foreign key) FK
    檢查約束(目前MySQL不支持、Oracle支持)

A、非空約束
用not null約束的字段不能為null值,必須給定具體的數據
創建表,給字段添加非空約束(創建用戶表,用戶名不能為空)

create table blog (
id int(12) not null;
)
insert插入數據時如果插入id為null直接報錯

B、唯一性約束
unique約束的字段,具有唯一性,不可重復,但可以為null
創建表,保證郵箱地址唯一(列級約束)
create table blog (
id int(12) not null UNIQUE;
)
表級約束
create table blog (
id int(12) not null;
UNIQUE(id);
)
如果插入相同 id 會報錯
使用表級約束,給多個字段聯合約束
聯合約束,表示兩個或以上的字段同時與另一條記錄相等,則報錯
create table blog (
id int(12) not null;
name varchar(20) not null;
unique(id,name);
)
如果與聯合字段都相同,則報錯
表級約束可以給約束起名字(方便以后通過這個名字來刪除這個約束)
create table blog (
id int(12) not null;
name varchar(20) not null;
CONSTRAINT t_id_name unique(id,name);
)
constraint是約束關鍵字,t_user_email_unique自己取的名字

C、主鍵約束(primary key)PK
表設計時一定要有主鍵
主鍵約束
主鍵字段
主鍵值
表中的某個字段添加主鍵約束后,該字段為主鍵字段,主鍵字段中出現的每一個數據都稱為主鍵值
主鍵約束與“not null unique”區別:給某個字段添加主鍵約束之后,該字段不能重復也不能為空,效果和”not null unique”約束相同,但是本質不同。
主鍵約束除了可以做到”not null unique”之外,還會默認添加”索引——index”
一張表應該有主鍵字段,如果沒有,表示該表無效
主鍵值:是當前行數據的唯一標識、是當前行數據的身份
即使表中兩行記錄相關數據相同,但由于主鍵值不同,所以也認為是兩行不同的記錄
按主鍵約束的字段數量分類:無論是單一主鍵還是復合主鍵,一張表主鍵約束只能有一個(約束只能有一個,但可以作用到好幾個字段)
單一主鍵:給一個字段添加主鍵約束
復合主鍵:給多個字段聯合添加一個主鍵約束(只能用表級定義)
1)單一主鍵(列級定義)
mysql> create table t_user(
-> id int(10) primary key,
-> name varchar(30)
-> );
Query OK, 0 rows affected (0.07 sec)
2)單一主鍵(表級定義)
mysql> create table t_user(
-> id int(10),
-> name varchar(30) not null,
-> constraint t_user_id_pk primary key(id)
-> );
Query OK, 0 rows affected (0.01 sec)
3)復合主鍵(表級定義)
mysql> create table t_user(
-> id int(10),
-> name varchar(30) not null,
-> email varchar(128) unique,
-> primary key(id,name)
-> );
Query OK, 0 rows affected (0.05 sec)

在MySQL數據庫提供了一個自增的數字,專門用來自動生成主鍵值,主鍵值不用用戶維護,自動生成,自增數從1開始,以1遞增(auto_increment)
mysql> create table t_user(
-> id int(10) primary key auto_increment,
-> name varchar(30) not null
-> );
Query OK, 0 rows affected (0.03 sec)
插入兩行記錄,id主鍵值會自動增加
mysql> insert into t_user(name) values('jay');
Query OK, 1 row affected (0.04 sec)

mysql> insert into t_user(name) values('man');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_user;
+----+------+
| id | name |
+----+------+
| 1 | jay |
| 2 | man |
+----+------+
2 rows in set (0.00 sec)

D、外鍵約束(foreign key)FK
只能是表級定義
foreign key(classno) references t_class(cno)
外鍵約束主要用來維護兩個表之間數據的一致性
外鍵約束
外鍵字段
外鍵值

外鍵約束、外鍵字段、外鍵值之間的關系:某個字段添加外鍵約束之后,該字段稱為外鍵字段,外鍵字段中每個數據都是外鍵值

按外鍵約束的字段數量分類:a、單一外鍵:給一個字段添加外鍵約束
b、復合外鍵:給多個字段聯合添加一個外鍵約束

一張表可以有多個外鍵字段(與主鍵不同)

栗子:存儲學生班級 信k 息
mysql> drop table if exists t_student;
mysql> drop table if exists t_class;

mysql> create table t_class(
-> cno int(10) primary key,
-> cname varchar(128) not null unique
-> );

mysql> create table t_student(
-> sno int(10) primary key auto_increment,
-> sname varchar(30) not null,
-> classno int(3),
-> foreign key(classno) references t_class(cno)
-> );

mysql> insert into t_class(cno,cname) values(100,'aaaaaaxxxxxx');
mysql> insert into t_class(cno,cname) values(200,'oooooopppppp');
mysql> insert into t_student(sname,classno) values('jack',100);
mysql> insert into t_student(sname,classno) values('lucy',100);
mysql> insert into t_student(sname,classno) values('king',200);
班級表t_class:
mysql> select from t_class;
+-----+--------------+
| cno | cname |
+-----+--------------+
| 100 | aaaaaaxxxxxx |
| 200 | oooooopppppp |
+-----+--------------+
學生表t_student:
mysql> select
from t_student;
+-----+-------+---------+
| sno | sname | classno |
+-----+-------+---------+
| 1 | jack | 100 |
| 2 | lucy | 100 |
| 3 | king | 200 |
+-----+-------+---------+
上表中找出每個學生的班級名稱:
mysql> select s.,c. from t_student s join t_class c on s.classno=c.cno;
+-----+-------+---------+-----+--------------+
| sno | sname | classno | cno | cname |
+-----+-------+---------+-----+--------------+
| 1 | jack | 100 | 100 | aaaaaaxxxxxx |
| 2 | lucy | 100 | 100 | aaaaaaxxxxxx |
| 3 | king | 200 | 200 | oooooopppppp |
+-----+-------+---------+-----+--------------+
這就是數據實體的一對多關系模型:在多的那一方加外鍵來約束

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武功县| 卢氏县| 汾西县| 长泰县| 秭归县| 新兴县| 庆城县| 新河县| 板桥市| 文安县| 新宁县| 偏关县| 凯里市| 霍林郭勒市| 兴国县| 广州市| 三亚市| 缙云县| 余庆县| 贡觉县| 芜湖县| 明水县| 台中县| 开江县| 探索| 尚志市| 新邵县| 卢氏县| 高密市| 青河县| 岱山县| 长武县| 共和县| 柘城县| 玉环县| 鄂托克旗| 年辖:市辖区| 临沂市| 南昌县| 肇庆市| 获嘉县|