JAVAWEB学习笔记--Day3
目錄
約束
數(shù)據(jù)庫設(shè)計
案例
約束
1.約束的概念和分類:
- 約束是作用于表中列上的規(guī)則,用于限制加入表的數(shù)據(jù)
- 約束得遜在保證了數(shù)據(jù)庫中數(shù)據(jù)的正確性,有效性和完整性
2.約束的分類
| 約束名稱 | 描述 | 關(guān)鍵字 |
| 非空約束 | 保證列中所有數(shù)據(jù)不能有null值 | NOT NULL |
| 唯一約束 | 保證列中所有數(shù)據(jù)各不相同 | UNIQUE |
| 主鍵約束 | 主鍵是一行數(shù)據(jù)的唯一標(biāo)識,要求非空且唯一 | PRIMARY KEY |
| 檢查約束 | 保證列中的值滿足某一條件 | CHECK |
| 默認(rèn)約束 | 保存數(shù)據(jù)是,未指定值采用默認(rèn)值 | DEFAULT |
| 外鍵約束 | 外鍵用來讓兩個表的數(shù)據(jù)之間建立鏈接,保證數(shù)據(jù)的一致性和完整性 | FOREIGN KEY |
tips:MySQL不支持檢查約束
CREATE TABLE emp (id INT PRIMARY KEY auto_increment, -- 員工id,主鍵且自增長ename VARCHAR (20) NOT NULL UNIQUE, -- 員工姓名,非空且唯一joindate DATE NOT NULL, -- 入職日期,非空salary DOUBLE (7, 2) NOT NULL, -- 工資,非空bonus DOUBLE (7, 2) DEFAULT 0 -- 獎金,如果沒有默認(rèn)是0 );外鍵約束
語法:
? ? ? ? 1.添加約束
-- 創(chuàng)建表時添加外鍵約束 create table 表名(列名 數(shù)據(jù)類型,…[constraint] [外鍵名稱] foreign key (外鍵列名) references 主表(主表列名); );-- 建完表后添加外鍵約束 alter table 表名 add constraint 外鍵名稱 foreign key (外鍵字段名稱) references 主表名稱(主表列名稱);? ? ? ? 2.刪除外鍵
alter table 表名 drop foreign key 外鍵名稱;數(shù)據(jù)庫設(shè)計
1.軟件研發(fā)步驟:
需求分析 --> 設(shè)計 --> 編碼 --> 測試 --> 安裝部署
?2.數(shù)據(jù)庫設(shè)計概念:
- 數(shù)據(jù)庫設(shè)計就是根據(jù)業(yè)務(wù)系統(tǒng)的具體需求,結(jié)合我們所選用的DBMS,為這個業(yè)務(wù)系統(tǒng)構(gòu)造出最優(yōu)的數(shù)據(jù)存儲模型
- 建立數(shù)據(jù)庫中的表結(jié)構(gòu)以及表與表之間的關(guān)聯(lián)關(guān)系的過程
- 有哪些表,表里有哪些字段,表和表之間有什么關(guān)系
3.數(shù)據(jù)庫設(shè)計的步驟
表關(guān)系:
- 一對一:如用戶和用戶詳情
- 一對多(多對一):如部門和員工
- 多對多:如商品和訂單
表關(guān)系之一對多:
實現(xiàn)方式:在多的一方建立外鍵,指向一的一方的主鍵
表關(guān)系之多對多:
一個商品對應(yīng)多個訂單,一個訂單包含多個商品
實現(xiàn)方式:建立第三張中間表,中間表至少包含兩個外鍵,分別關(guān)聯(lián)兩方主鍵
代碼實現(xiàn):
-- 訂單表 CREATE TABLE tb_order (id INT PRIMARY KEY auto_increment,payment DOUBLE (10, 2),payment_type TINYINT,STATUS TINYINT );-- 商品表 CREATE TABLE tb_goods (id INT PRIMARY KEY auto_increment,title VARCHAR (100),price DOUBLE (10, 2) );-- 訂單商品中間表 CREATE TABLE tb_order_goods (id INT PRIMARY KEY auto_increment,order_id INT,goods_id INT,count INT );-- 添加外鍵 ALTER TABLE tb_order_goods add CONSTRAINT fk_order_id FOREIGN KEY(order_id) REFERENCES tb_order(id); ALTER TABLE tb_order_goods add CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);表關(guān)系之一對一:
一對一關(guān)系多用于表拆分,將一個實體中經(jīng)常使用的字段放一張表,不經(jīng)常使用的字段放另一張表,用于提升查詢性能
多表查詢:
笛卡爾積:取A,B集合所有組合情況
多表查詢:從多張表查詢數(shù)據(jù)
? ? ? ? 連接查詢:
????????????????內(nèi)連接:相當(dāng)于查詢A B交際數(shù)據(jù)
? ? ? ? ? ? ? ? 外連接:
? ? ? ? ? ? ? ? ? ? ? ? 左外連接:相當(dāng)于查詢A表所有數(shù)據(jù)和交集部分?jǐn)?shù)據(jù)
? ? ? ? ? ? ? ? ? ? ? ? 右外連接:相當(dāng)于查詢B表所有數(shù)據(jù)和交集部分?jǐn)?shù)據(jù)
? ? ? ? ?子查詢:
1.概念:查詢中嵌套查詢,稱嵌套查詢?yōu)樽硬樵?/p>
2.子查詢根據(jù)查詢結(jié)果不同,作用不同:
- 單行單列:作為條件值,使用 = ! = > <?等進行條件判斷 SELECT 字段列表 FROM 表 WHERE 字段名 = (子查詢);
- 多行單列:作為條件值,使用in等關(guān)鍵字進行條件判斷 SELECT 字段列表 FROM 表 WHERE 字段名 IN (子查詢);
- 多行多列:作為虛擬表 SELECT 字段列表 FROM (子查詢) WHERE 條件;
案例
總結(jié)
以上是生活随笔為你收集整理的JAVAWEB学习笔记--Day3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动驾驶公司Torc与NXP达成合作,研
- 下一篇: 轿子vs.小汽车和电话vs.跟班