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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVAWEB学习笔记--Day3

發(fā)布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVAWEB学习笔记--Day3 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

約束

數(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è)計的步驟

  • 需求分析(數(shù)據(jù)庫是什么,數(shù)據(jù)庫具有哪些屬性,數(shù)據(jù)與屬性的特點是什么)
  • 邏輯分析(通過ER圖對數(shù)據(jù)庫進行邏輯建模,不需要考慮我們所玄同的數(shù)據(jù)庫管理系統(tǒng))
  • 物理設(shè)計(根據(jù)數(shù)據(jù)庫自身的特點把邏輯設(shè)計轉(zhuǎn)換為物理設(shè)計)
  • 維護設(shè)計(1.對新的需求進行建表;2.表優(yōu)化)
  • 表關(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 條件;

      案例

    -- 多表查詢案例: -- 查詢所有員工信息。查詢員工編號,員工姓名,工資,職務(wù)編號,職務(wù)描述 /* 分析: 1.員工編號,員工姓名,工資在員工表中 2.工資,職務(wù)編號,職務(wù)描述在job表中 3.職務(wù)表和員工表是一對多的關(guān)系 emp.job_id = job.id */ -- 隱式內(nèi)連接 SELECTemp3.id,emp3.ename,emp3.salary,job.jname,job.description FROMemp3,job WHEREemp3.job_id = job.id;-- 顯式內(nèi)連接 SELECTemp3.id,emp3.ename,emp3.salary,job.jname,job.description FROMemp3 INNER JOIN job ON emp3.job_id = job.id;-- 2.查詢員工編號,員工姓名,工資,職務(wù)名稱,職務(wù)描述,部門名稱,部門位置 /* 分析: 1.員工編號,員工姓名,工資信息在員工表中 2.職務(wù)名稱,職務(wù)描述在job表中 3.職務(wù)表和員工表是一對多的關(guān)系 emp.job_id = job.id 4.部門名稱,部門位置來自于部門表dept3 5.dept3和emp一對多關(guān)系 dept3.id = emp3.dept_id */ -- 隱式內(nèi)連接 SELECTemp3.id,emp3.ename,emp3.salary,job.jname,job.description,dept3.dname,dept3.loc FROMemp3,job,dept3 WHEREemp3.job_id = job.id AND dept3.id = emp3.dept3_id;-- 顯式內(nèi)連接 SELECTemp3.id,emp3.ename,emp3.salary,job.jname,job.description,dept3.dname,dept3.loc FROMemp3 INNER JOIN job ON emp3.job_id = job.id INNER JOIN dept3 ON dept3.id = emp3.dept3_id;-- 查詢員工姓名,工資,工資等級 /* 分析: 1.員工編號,員工姓名,工資在員工表中 2.工資等級 信息在saralygrade表中 3.emp3.salary >= salarygrade.losalary and emp.salary <= salarygrade.hisalary */ SELECTemp3.ename,emp3.salary,s.* FROMemp3,salarygrade s WHEREemp3.salary >= s.losalary AND emp3.salary <= s.hisalary;-- 4.查詢員工姓名,工資,職務(wù)名稱,部門名稱,部門位置,工資等級 /* 分析: 1.員工編號,員工姓名,工資信息在員工表中 2.職務(wù)名稱,職務(wù)描述在job表中 3.職務(wù)表和員工表是一對多的關(guān)系 emp.job_id = job.id 4.部門名稱,部門位置來自于部門表dept3 5.dept3和emp3一對多關(guān)系 dept3.id = emp3.dept_id 6.工資等級 信息在saralygrade表中 7.emp3.salary >= salarygrade.losalary and emp.salary <= salarygrade.hisalary */ -- 顯式內(nèi)連接 SELECTemp3.id,emp3.ename,emp3.salary,job.jname,job.description,dept3.dname,dept3.loc,s.grade FROMemp3 INNER JOIN job ON emp3.job_id = job.id INNER JOIN dept3 ON dept3.id = emp3.dept3_id INNER JOIN salarygrade s ON emp3.salary BETWEEN s.losalary AND s.hisalary;-- 5.查詢出部門編號、部門名稱、部門位置、部門人數(shù) /* 分析: 1.部門編號、部門名稱、部門位置 來自于部門dept表 2.部門人數(shù):在emp3表中 按照dept3_id進行分組,人后count(*)統(tǒng)計數(shù)量 3.使用子查詢讓部門表和分組后的表進行內(nèi)連接 */ SELECTdept3_id,count(*) FROMemp3 GROUP BYdept3_id;SELECTdept3.id,dept3.dname,dept3.loc,t1.count FROMdept3,(SELECTdept3_id,count(*) countFROMemp3GROUP BYdept3_id) t1 WHEREdept3.id = t1.dept3_id;

    總結(jié)

    以上是生活随笔為你收集整理的JAVAWEB学习笔记--Day3的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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