<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
由於增刪改了emp表中的記錄,因此這裡重新建立了一個指令碼並使用
create database bjpowernnode; use bjpowernode; source C:UsersAdministratorDesktopbjpowernode.sql;
1.什麼是約束?
2. 約束的分類
not null
unique
primary key
foreign key
not null約束的欄位,不能為null值,必須給具體的資料
建立表,給欄位新增 非空約束【使用者的郵箱地址不能為空】
drop table if exists t_user; create table t_user( id int(10), name varchar(32) not null, email varchar (32) );
建立表,保證郵箱地址唯一
create table t_user( id int(10), name varchar(32) not null, email varchar(128) unique );
unique約束的欄位不能重複,但是可以為null
以上的約束屬於列級約束
表級約束:
create table t_user( id int(10), name varchar(32), email varchar(128), unique(email) );
1.使用表級約束給多個欄位新增約束
create table t_user( id int(10), name varchar(32), email varchar(128), unique(name,email) );
2.表級約束可以給約束起名,以後通過這個名字來刪除約束
create table t_user( id int(10), name varchar(32), email varchar(128), constraint t_user_email_unique unique(email) );
not null 和unique可以聯合使用
1.主鍵涉及到的術語:
2.以上三者之間的關係:
3.給某個欄位新增主鍵約束以後,該欄位不能重複,也不能為空
4. 一張表應給有主鍵欄位,如果沒有,表示這張表是無效的
5.無論是單一主鍵還是複合主鍵,一張表的主鍵約束只能有一個
6.主鍵根據性質分類:
單一主鍵,列級約束
create table t_user( id int(10) primary key, name varchar(32) );
單一主鍵,表極約束
create table t_user( id int(10), name varchar(32), primary key(id) );
複合主鍵:只能用表級約束
mysql> create table t_user( -> id int(10), -> name varchar(32), -> primary key(id,name) -> );
auto_increment:主鍵自增
MySQL資料管理系統中提供了一個自增的數位,專門用來自動生成主鍵值
主鍵值不需要使用者維護,也不需要使用者提供了,自動生成的,
這個自增的數位預設從1開始以1遞增:1,2,3,4,....
mysql> create table t_user( -> id int(10) primary key auto_increment, -> name varchar(32) -> );
1.外來鍵約束涉及到的術語:
2.以上三者之間的關係:
3.外來鍵分為單一外來鍵和複合外來鍵
4.一張表中可以有多個外來鍵欄位
設計一個資料庫表,用來儲存學生和班級資訊,給出兩種解決方案:
學生資訊和班級資訊之間的關係:一個班級對應多個學生,這是典型的一對多的關係
在多的一方加外來鍵
第一種設計方案:將學生資訊和班級資訊儲存到一張表中
第二種設計方案:將學生資訊和班級資訊分開兩張表儲存,學生表+班級表
sno(主鍵約束) | sname | classno(外來鍵約束) |
---|---|---|
1 | jack | 100 |
2 | lucy | 100 |
3 | kk | 100 |
4 | smith | 200 |
5 | frank | 300 |
6 | jhh | 300 |
cno(主鍵約束) | cname |
---|---|
100 | 高三1班 |
200 | 高三2班 |
300 | 高三3班 |
為了保證t_student 表中的classno欄位中的資料必須來自於t_class表中的cno欄位中的資料,有必要給t_student表中的classno欄位新增外來鍵約束,classno稱為外來鍵欄位,該欄位中的值稱為外來鍵值。
注意:
1.外來鍵值可以為空
2.外來鍵欄位必須得參照這張表中的主鍵嗎?
3.班級表為父表,學生表為子表
DROP TABLE IF EXISTS t_student; DROP TABLE IF EXISTS t_class; CREATE TABLE t_class( cno INT(3) PRIMARY KEY, cname VARCHAR(128) NOT NULL UNIQUE ); CREATE TABLE t_student( sno INT(3) PRIMARY KEY, sname VARCHAR(32) NOT NULL, classno INT(3),-- 外來鍵 CONSTRAINT t_student_class_fk FOREIGN KEY(classno) REFERENCES t_class(cno) ); INSERT INTO t_class(cno,cname) VALUES(100,'高三1班'); INSERT INTO t_class(cno,cname) VALUES(200,'高三2班'); INSERT INTO t_class(cno,cname) VALUES(300,'高三3班'); INSERT INTO t_student(sno,sname,classno) VALUES(1,'jack',100); INSERT INTO t_student(sno,sname,classno) VALUES(2,'lucy',100); INSERT INTO t_student(sno,sname,classno) VALUES(3,'hh',100); INSERT INTO t_student(sno,sname,classno) VALUES(4,'frank',200); INSERT INTO t_student(sno,sname,classno) VALUES(5,'smith',300); INSERT INTO t_student(sno,sname,classno) VALUES(6,'jhh',300); SELECT * FROM t_student; SELECT * FROM t_class; -- 新增失敗,因為有外來鍵約束 INSERT INTO t_student(sno,sname,classno) VALUES(8,'kk',500);
重點:典型的一對多關係,設計時在多的一方加外來鍵
在刪除父表中的資料的時候,級聯刪除子表中的資料
在更新父表中的資料的時候,級聯更新子表中的資料
以上的級聯更新和級聯刪除謹慎使用,
因為級聯操作會使資料資料改變或刪除,資料是無價的。
語法:
on update cascase
on delete cascase
MySQL中對於有些約束的修改比較麻煩,所以應該先刪除約束,再新增約束
刪除外來鍵約束:
alter table t_student drop foreign key t_student_class_fk
新增外來鍵約束並級聯更新:
alter table t_student add constraint t_student_class_fk foreign key(classno) references t_class(no) on delete cascade;
新增外來鍵約束並級聯刪除:
alter table t_student add constraint t_student_class_fk foreign key(classno) references t_class(no) on update cascade;
級聯刪除
級聯更新
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45