您好,登錄后才能下訂單哦!
這篇“MySQL創建表時的條件有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“MySQL創建表時的條件有哪些”文章吧。
由于增刪改了emp表中的記錄,因此這里重新創建了一個腳本并使用
create database bjpowernnode; use bjpowernode; source C:\Users\Administrator\Desktop\bjpowernode.sql;
1.什么是約束?
約束就是表中的限制條件
約束的關鍵字是:constraint
2. 約束的分類
非空約束 not null
唯一性約束 unique
主鍵約束 primary key
外鍵約束 foreign key
檢查約束 MySQL數據庫不支持,Oracle數據庫支持
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.給某個字段添加主鍵約束以后,該字段不能重復,也不能為空
主鍵約束效果和''not null unique'' 相同,但是本質不同,
主鍵約束除了可以做到''not null unique''之外
主鍵字段還會默認添加''索引-index''
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.一張表中可以有多個外鍵字段
設計一個數據庫表,用來存儲學生和班級信息,給出兩種解決方案:
學生信息和班級信息之間的關系:一個班級對應多個學生,這是典型的一對多的關系
在多的一方加外鍵
第一種設計方案:將學生信息和班級信息存儲到一張表中
第二種設計方案:將學生信息和班級信息分開兩張表存儲,學生表+班級表
學生表 t_student
sno(主鍵約束) | sname | classno(外鍵約束) |
---|---|---|
1 | jack | 100 |
2 | lucy | 100 |
3 | kk | 100 |
4 | smith | 200 |
5 | frank | 300 |
6 | jhh | 300 |
班級表t_calss
cno(主鍵約束) | cname |
---|---|
100 | 高三1班 |
200 | 高三2班 |
300 | 高三3班 |
為了保證t_student 表中的classno字段中的數據必須來自于t_class表中的cno字段中的數據,有必要給t_student表中的classno字段添加外鍵約束,classno稱為外鍵字段,該字段中的值稱為外鍵值。
注意:
1.外鍵值可以為空
2.外鍵字段必須得引用這張表中的主鍵嗎?
外鍵字段引用一張表的字段的時候,被引用的字段必須具備唯一性
即具有unique約束,不一定非是主鍵
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;
級聯刪除
級聯更新
以上就是關于“MySQL創建表時的條件有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。