MYSQL:數據庫約束

文章目錄

  • MYSQL:數據庫約束:為你的數據上把“安全鎖”
    • 1. 約束的類型概覽
    • 2. `NOT NULL` 非空約束
    • 3. `DEFAULT` 默認值約束
    • 4. `UNIQUE` 唯一約束
    • 5. `PRIMARY KEY` 主鍵約束
      • 5.1 自增主鍵 `AUTO_INCREMENT`
      • 5.3 復合主鍵
    • 6. `FOREIGN KEY` 外鍵約束
    • 7. `CHECK` 約束
    • 總結

MYSQL:數據庫約束:為你的數據上把“安全鎖”

大家好!今天我們來聊一個數據庫中非常重要,但又常常被初學者忽視的概念——數據庫約束

想象一下,我們正在錄入一個班級的學生信息。如果有人不小心把“姓名”這一欄漏填了,或者把兩個同學的學號填成了一樣的,那數據不就亂套了嗎?為了保證存入數據庫的數據是準確、可靠的,我們就需要給表中的數據定一些“規矩”。這些規矩,就是我們今天要聊的“數據庫約束”。

簡單來說,約束就是作用于表中列的規則,用于限制存儲在列中的數據。它就像一把把安全鎖,能從源頭上防止“臟數據”的產生,確保數據的完整性和準確性。

1. 約束的類型概覽

數據庫提供了多種約束類型,來滿足不同的“規則”需求。我們先來看一個總覽,對它們有個初步印象:

類型說明
NOT NULL (非空約束)規定這一列的值不能是 NULL,必須得填點什么。
DEFAULT (默認約束)如果我們插入數據時沒有給這一列賦值,數據庫會自動使用一個預設的默認值。
UNIQUE (唯一約束)保證這一列中所有的值都是獨一無二的,不能有重復。
PRIMARY KEY (主鍵約束)它是 NOT NULLUNIQUE 的結合體,是表中每一行數據的唯一身份標識
FOREIGN KEY (外鍵約束)用于建立兩張表之間的關聯關系,確保引用的數據是真實存在的。
CHECK 約束一個更靈活的“檢查員”,可以自定義各種復雜的規則來限制列中的值。

接下來,我們就一個個地把這些“安全鎖”研究明白。

2. NOT NULL 非空約束

NOT NULL 是最簡單也最常用的約束。它的作用就是強制某一列在插入或更新數據時,不能接受 NULL 值。

比如,我們創建一個學生表,但暫時不加任何約束:

DROP TABLE IF EXISTS student;
CREATE TABLE student(id BIGINT,name VARCHAR(20)
);-- 嘗試插入一條名字為 NULL 的記錄
INSERT INTO student VALUES (1, NULL);-- 查詢結果,可以看到 name 是 NULL
SELECT * FROM student;

image-20250718114033826

一條沒有名字的學生記錄,這顯然是不合理的。所以,我們需要給 name 列加上非空約束,把它變成一個必填項。

DROP TABLE IF EXISTS student;
-- 在 name 列后面加上 NOT NULL 關鍵字
CREATE TABLE student (id BIGINT,name VARCHAR(20) NOT NULL
);-- 再次嘗試插入 NULL 值
INSERT INTO student VALUES (1, NULL);
-- 這次,數據庫會直接報錯,拒絕插入
-- ERROR 1048 (23000): Column 'name' cannot be null-- 插入正常值就可以成功
INSERT INTO student VALUES (1, '張三');
SELECT * FROM student;

image-20250718114033826

數據庫會幫我們自動進行了校驗,擋住了不合規的數據。我們可以通過 DESC 命令查看表結構,Null 這一列顯示 NO,就代表該列不允許為空。

DESC student;

image-20250718114307807

3. DEFAULT 默認值約束

DEFAULT 約束也很好理解,它提供了一個“默認選項”。當我們在插入新記錄時,如果沒有明確指定某一列的值,數據庫就會自動使用這個默認值。

我們給學生表加上 age 列:

ALTER TABLE student ADD COLUMN age INT;

image-20250718114706706

這時,如果我們只插入 idnameage 列就會是 NULL

INSERT INTO student(id, name) VALUES (1, '張三');
SELECT * FROM student;

image-20250718115010150

假設大部分學生的年齡都是18歲,我們就可以把18設為默認值,簡化插入操作。

DROP TABLE IF EXISTS student;
-- 在 age 列后使用 DEFAULT 關鍵字設置默認值
CREATE TABLE student (id BIGINT,name VARCHAR(20) NOT NULL,age INT DEFAULT 18
);-- 插入時,不指定 age
INSERT INTO student(id, name) VALUES (2, '李四');

image-20250718115109951

可以看到,李四的年齡被自動設為了18。

一個值得注意的點: 如果我們插入時明確地將 age 指定為 NULL,那么默認值約束就不會生效。用戶的明確指定優先級更高。

INSERT INTO student(id, name, age) VALUES (3, '王五', NULL);
SELECT * FROM student;

image-20250718115254993

4. UNIQUE 唯一約束

UNIQUE 約束確保了某列中的所有值都是獨一無二、不能重復的。比如學生的學號、用戶的身份證號,這些都應該是唯一的。

我們給學生表加上學號(sno)列,并為其設置唯一約束。

DROP TABLE IF EXISTS student;
CREATE TABLE student (id BIGINT,name VARCHAR(20) NOT NULL,age INT DEFAULT 18,sno VARCHAR(10) UNIQUE  -- 為 sno 列添加唯一約束
);-- 插入第一條記錄,成功
INSERT INTO student(id, name, sno) VALUES (1, '張三', '100001');-- 嘗試插入第二條記錄,使用相同的學號
INSERT INTO student(id, name, sno) VALUES (2, '李四', '100001');
-- 數據庫報錯,唯一約束生效
-- ERROR 1062 (23000): Duplicate entry '100001' for key 'student.sno'

image-20250718115254993

一個有趣的特例: 在大多數數據庫中,UNIQUE 約束的列是可以包含多個 NULL的。因為從邏輯上講,NULL 并不等于 NULL,它代表的是“未知”,所以多個“未知”并不算重復。

image-20250718120212788

查看表結構,Key 列顯示 UNI 就表示該列有唯一約束。

DESC student;

image-20250718115917940

5. PRIMARY KEY 主鍵約束

主鍵可以說是表中最重要的約束,它是每一行數據的唯一身份標識。我們可以把它想象成每個人的身份證號。

一個列如果被設置為主鍵,它將同時擁有兩個屬性:

  1. NOT NULL:不能為空。
  2. UNIQUE:必須唯一。

每個表最多只能有一個主鍵。這個主鍵可以由單個列構成,也可以由多個列共同構成(稱為復合主鍵)。

DROP TABLE IF EXISTS student;
-- 直接使用 PRIMARY KEY 關鍵字定義主鍵
CREATE TABLE student (id BIGINT PRIMARY KEY,name VARCHAR(20) NOT NULL,age INT DEFAULT 18,sno VARCHAR(10) UNIQUE
);

當我們把 id 設置為主鍵后,它就自動具備了非空和唯一的特性。如果我們嘗試插入重復的 id,就會觸發主鍵沖突。

INSERT INTO student(id, name, sno) VALUES (1, '張三', '100001');-- 嘗試插入 id 同樣為 1 的記錄
INSERT INTO student(id, name, sno) VALUES (1, '李四', '100002');
-- 報錯:主鍵沖突
-- ERROR 1062 (23000): Duplicate entry '1' for key 'student.PRIMARY'

image-20250718121418879

5.1 自增主鍵 AUTO_INCREMENT

在實際開發中,我們很少會手動去為每一條記錄分配主鍵,這太麻煩了。通常,我們會把主鍵列設置為“自動增長”,讓數據庫來幫我們管理。

DROP TABLE IF EXISTS student;
CREATE TABLE student (id BIGINT PRIMARY KEY AUTO_INCREMENT,  -- 設置 id 為自增主鍵name VARCHAR(20) NOT NULL,age INT DEFAULT 18,sno VARCHAR(10) UNIQUE
);

設置了 AUTO_INCREMENT 后,我們在插入數據時就可以完全不管 id 列,數據庫會自動為我們生成一個唯一的、遞增的值。

-- 插入時可以不寫 id 列,或者將其值設為 NULL
INSERT INTO student(name, sno) VALUES ('張三', '100001');
INSERT INTO student(id, name, sno) VALUES (NULL, '李四', '100002');SELECT * FROM student;

image-20250718121833030

一個需要注意的現象: 如果某次插入因為其他原因失敗了(比如學號重復),那么這次自增分配的主鍵值就會被“浪費”掉,不會被下一次插入使用。

-- 這次插入會因為學號 '100002' 重復而失敗,但數據庫內部已經為它準備好了 id=3
INSERT INTO student(name, sno) VALUES ('王五', '100002');
-- ERROR 1062 (23000): Duplicate entry '100002' for key 'student.sno'-- 修正學號后,再次插入
INSERT INTO student(name, sno) VALUES ('王五', '100003');-- 查詢結果會發現,王五的 id 是 4,而不是 3
SELECT * FROM student;

image-20250718122301938

另外,自增主鍵雖然是遞增的,但不保證一定是連續的。我們也可以手動插入一個更大的值,后續的自增會從這個新的最大值開始。

#手動指定一個值
insert into student(id,name,sno) values (100,'趙六','100004');
select * from student;

image-20250718122750537

# 下一次自增從主鍵的最大值開始
insert into student(name,sno) values ('錢七','100005');
select * from student;

image-20250718122811153

在分布式系統中,為了避免不同服務器生成相同的主鍵,常常會為每臺服務器預分配一個主鍵區間,這也是導致主鍵不連續的常見原因。
image-202507181232378105.2 主鍵沖突時的處理策略

當我們插入的數據與現有的主鍵或唯一鍵沖突時,除了報錯,MySQL還提供了兩種優雅的處理方式:

  1. ON DUPLICATE KEY UPDATE (存在則更新)

這個語法的意思是:嘗試插入,如果發生主鍵或唯一鍵沖突,那就別報錯了,改成執行更新操作。

-- 嘗試插入 id=100 的記錄,如果已存在,則更新它的 name 和 sno
INSERT INTO student(id, name, sno) VALUES (100, '趙六', '100100')ON DUPLICATE KEY UPDATE name = '趙六', sno = '100100';
-- Query OK, 2 rows affected... 這表示執行了“刪除舊記錄,插入新記錄”的操作

image-20250718123756078

  1. REPLACE INTO (存在則替換)

這個語法更“暴力”一些:如果記錄不存在,就插入;如果存在(根據主鍵或唯一鍵判斷),就先刪除舊的記錄,再插入新的記錄。

-- 如果 id=101 的記錄存在,就刪掉它,然后插入這條新的
REPLACE INTO student(id, name, sno) VALUES (101, '錢七', '100101');
-- Query OK, 2 rows affected...-- 如果 id=102 的記錄不存在,就直接插入
REPLACE INTO student(id, name, sno) VALUES (102, '吳八', '100102');
-- Query OK, 1 row affected...

image-20250718123756078
image-20250718124147203

5.3 復合主鍵

有時候,單個列不足以唯一標識一條記錄,我們就需要用多個列組合起來作為主鍵,這就是復合主鍵

DROP TABLE IF EXISTS student;
CREATE TABLE student (id BIGINT,name VARCHAR(20),PRIMARY KEY (id, name)  -- 指定 id 和 name 共同組成主鍵
);

image-20250718124439739

對于復合主鍵,只有當所有組成主鍵的列的值都完全相同時,才會被認為是主鍵沖突。

-- 插入成功
INSERT INTO student(id, name) VALUES (1, '張三');-- 再次插入,因為 (1, '張三') 這個組合已經存在,所以沖突
INSERT INTO student(id, name) VALUES (1, '張三');
-- ERROR 1062 (23000): Duplicate entry '1-張三' for key 'student.PRIMARY'-- 只改變其中一個列的值,就不算沖突,插入成功
INSERT INTO student(id, name) VALUES (2, '張三');

image-20250718124552974

6. FOREIGN KEY 外鍵約束

外鍵是體現數據庫“關系”的核心。它用于建立和加強兩張表數據之間的聯系,保證了數據的引用完整性

我們用一個經典的“班級表”和“學生表”的例子來理解。一個班級可以有多個學生,一個學生只屬于一個班級。在這里,班級表是“主表”,學生表是“從表”。

首先,創建主表 class

DROP TABLE IF EXISTS class;
CREATE TABLE class (id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL
);
-- 初始化一些班級數據
INSERT INTO class (name) VALUES ('java01'), ('java02'), ('java03'), ('C++01'), ('C++02');

image-20250718133513686

然后,創建從表 student,并在其中定義一個外鍵,讓它的 class_id 列引用 class 表的 id 列。

DROP TABLE IF EXISTS student;
CREATE TABLE student(id BIGINT PRIMARY KEY AUTO_INCREMENT,  name VARCHAR(20) NOT NULL,age INT DEFAULT 18,class_id BIGINT,-- 定義外鍵:本表的 class_id 列,引用 class 表的 id 列FOREIGN KEY (class_id) REFERENCES class(id)
);

這個外鍵約束建立后,會產生以下效果:

  1. 插入限制:你不能在 student 表中插入一個 class_idclass 表中不存在的值。比如,你不能給學生分配一個不存在的班級。

    -- 嘗試插入一個 class_id 為 100 的學生,因為 class 表中沒有 id=100 的班級,所以失敗
    INSERT INTO student(name, class_id) VALUES ('王五', 100);
    -- ERROR 1452 (23000): Cannot add or update a child row...
    

    image-20250718134041461

  2. 刪除限制:你不能從主表 class 中刪除一個已經被從表 student 引用的記錄。比如,如果 java01 班(假設id=1)里還有學生,你就不能直接刪除這個班級。

    -- 嘗試刪除 java01 班,因為有學生記錄引用了它,所以失敗
    DELETE FROM class WHERE name = 'java01';
    -- ERROR 1451 (23000): Cannot delete or update a parent row...
    

    image-20250718134507674

    這條規則保證了不會出現“學生所屬班級信息丟失”的情況。要想刪除主表記錄,必須先處理掉從表中所有依賴它的記錄。

  3. 刪表限制:不能直接刪除被外鍵引用的主表。必須先刪除從表,才能刪除主表。

    -- 直接刪主表,失敗
    DROP TABLE class;
    -- ERROR 3730 (HY000): Cannot drop table 'class' referenced by...-- 正確的順序
    DROP TABLE student; -- 先刪從表
    DROP TABLE class;   -- 再刪主表
    

外鍵就像一條牢固的鎖鏈,將相關的表緊密地聯系在一起,確保了數據之間邏輯關系的一致性和正確性。

7. CHECK 約束

CHECK 約束是一個通用的“校驗器”,你可以用它來定義更復雜的、自定義的數據驗證規則。

比如,我們要求學生的年齡必須大于等于16歲,性別只能是’男’或’女’。

DROP TABLE IF EXISTS student;
CREATE TABLE student(id BIGINT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(20) NOT NULL,age INT DEFAULT 18,gender CHAR(1),-- 定義 CHECK 約束CHECK (age >= 16),CHECK (gender = '男' OR gender = '女')
);-- 插入年齡小于16的記錄,失敗
INSERT INTO student(name, age, gender) VALUES ('張三', 15, '男');
-- ERROR 3819 (HY000): Check constraint 'student_chk_1' is violated.-- 插入性別不合規的記錄,失敗
INSERT INTO student(name, age, gender) VALUES ('張三', 17, '1');
-- ERROR 3819 (HY000): Check constraint 'student_chk_2' is violated.

image-20250718135916472

CHECK 約束甚至可以用于比較同一行中不同列之間的值。

CREATE TABLE t_check (c1 INT CHECK(c1 <> 0),c2 INT CHECK(c2 > 0),c3 INT,-- c3 必須大于等于 c2CHECK(c3 >= c2)
);

一點建議:
CHECK 約束雖然強大,但在 MySQL 8.0.16 版本之前并不被真正支持(語法能通過但不起作用),這導致了它的兼容性問題。在實際的項目中,更傾向于將這類復雜的業務邏輯校驗放在應用程序層面(比如Java、Python代碼中)來完成,而不是過度依賴數據庫的 CHECK 約束。這樣做能讓業務規則更清晰,也更容易維護和遷移。

總結

好了,今天我們把數據庫的幾種核心約束都過了一遍。它們就像是數據庫的“衛兵”,時刻守護著數據的準確性和一致性。

  • NOT NULL:保證數據不為空。
  • DEFAULT:提供省事的默認值。
  • UNIQUE:確保數據不重復。
  • PRIMARY KEY:每一行數據的唯一身份證。
  • FOREIGN KEY:連接不同表之間的關系紐帶。
  • CHECK:自定義的超級校驗器。

熟練掌握并合理使用這些約束,是每一個后端開發者的基本功。希望這篇筆記能幫助你更好地理解它們!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89925.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89925.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89925.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

網絡數據編碼技術及其應用場景的全面解析

網絡數據編碼技術全景圖?編碼類型??編碼原理??適用層??典型應用場景??優勢??缺陷??曼徹斯特編碼?電平跳變代表數據位&#xff08;高→低1&#xff0c;低→高0&#xff09;物理層10/100M以太網、RFID標簽自同步時鐘帶寬利用率僅50%?4B/5B編碼?4比特映射為5比特物…

RustDesk自建服務器完整部署指南:從零開始到成功連接。成功解決rustdesk報錯:未就緒,請檢查網絡連接

最近需要用到遠程工具解決用戶問題&#xff0c;todesk總是提示付費&#xff0c;干脆自己使用開源的。當然凡事都有代價。 話費了一個工作日的時間終于搞定了。 本文將詳細介紹如何從零開始部署RustDesk自建服務器&#xff0c;實現完全自主可控的遠程桌面解決方案。 踩坑 參考…

datasophon安裝doris問題排除記錄

datasophon安裝doris搞了好久才成功&#xff0c;特別記錄一下。 多災多難的安裝過程&#xff1a;FE安裝 首先&#xff0c;配置界面&#xff0c;要注意兩個參數一定要改成正確的網段&#xff0c;否則會被識別成127.0.0.1注意&#xff1a;兩個priority_networks 參數必須要改成你…

suricata新增Mysql告警規則處理

suricata新增Mysql告警規則處理協議解析后續處理內容新增規則規則解析關鍵字新增Setup用于初始化檢測項Free用于資源釋放AppLayerTxMatch用于協議解析完成后的規則檢測針對pcap文件進行檢測總結協議解析后續處理內容 經過Mysql協議解析處理流程 介紹&#xff0c;我們在suricat…

使用位運算優化 Vue.js 應用:高效狀態管理技巧

在 Vue.js 開發中&#xff0c;位運算&#xff08;Bitwise Operations&#xff09;是一種高效的工具&#xff0c;尤其適用于需要管理大量布爾狀態或優化性能的場景。位運算通過操作二進制位來實現狀態的存儲和檢查&#xff0c;相比傳統的數組或對象操作&#xff0c;內存占用更低…

【Java SE】Clonable接口和深拷貝

目錄 一.Clonable接口 實現步驟&#xff1a; 完整代碼&#xff1a; 二.深拷貝 實現步驟&#xff1a; 完整代碼&#xff1a; 淺拷貝與深拷貝的對比 使用場景建議 完 淺拷貝&#xff08;Shallow Copy&#xff09;和深拷貝&#xff08;Deep Copy&#xff09;是對象復制的兩…

accelerate 在Pycham中執行的設置方法

背景 使用 accelerate 進行分布式代碼訓練時&#xff0c;需要在pycharm中進行調試&#xff0c;此時需要在pycharm中運行。 終端執行命令 # *[Specify the config file path and the GPU devices to use] export CUDA_VISIBLE_DEVICES0# *[Specify the config file path] expo…

探索量子計算與法律理論的交叉領域

文章目錄 前言 一、引言 二、內容 (一)知識產權 (二)隱私與安全 (三)責任認定 (四)證據與證明 (五)法律推理與決策 三、結論 總結 前言 隨著量子計算技術的突破性發展,其引發的法律范式重構問題日益凸顯。烏茲別克斯坦學者伊索姆別克?阿卜迪哈基莫夫于2024年在《量…

js迭代器

文章目錄前言實現原理&#xff1a;調用迭代器自制迭代器前言 迭代器是 JSt 中一種特殊的對象&#xff0c;它提供了一種統一的、通用的方式遍歷個各種不同類型的數據結構。 可以遍歷的數據結構包括&#xff1a;數組、字符串、Set、Map 等可迭代對象。我們也可以自定義實現迭代器…

chainlink VRF中文教程(含mock),解決error: Arithmetic Underflow in createSubscription

?我使用的版本&#xff1a;chainlink-brownie-contracts version:1.3.0?1. Import 相關包 ,,, import {VRFConsumerBaseV2Plus} from "chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2PLUS.sol"; import {VRFV2PlusClient} from "chainlink/contract…

非線性優化框架CasADi工具箱求解最優控制問題OCP

CasADi是一個開源的Python/MATLAB庫&#xff0c;主要用于數值優化&#xff0c;特別是最優控制問題。它提供了一個易于使用的符號框架&#xff0c;用于處理和生成表達式&#xff0c;以及高效地生成導數信息。 https://web.casadi.org/get/https://web.casadi.org/get/ 所有OCP…

Type-C接口臺式顯示器:LDR6021引領新潮流

Type-C單口便攜顯示器LDR6021是市場上一種新興的顯示設備&#xff0c;以下是對其的詳細介紹一、主要特點 便攜性:LDR6021采用了Type-C接口作為數據傳輸和供電接口&#xff0c;這種設計使得它能夠與各種支持Type-C接口的設備無縫連接&#xff0c;如筆記本電腦、智能手機、平板電…

在翻譯語義相似度和會議摘要相似度評估任務中 ,分類任務 回歸任務 生成任務區別

在翻譯語義相似度&#xff08;Translation Semantic Similarity&#xff09;和會議摘要相似度&#xff08;Meeting Summary Similarity&#xff09;等任務中&#xff0c;通常會根據任務的目標和輸出形式&#xff0c;將其劃分為三類常見的任務類型&#xff1a;1. 分類任務定義&a…

UGUI 性能優化系列:第二篇——Canvas 與 UI 元素管理

UGUI 性能優化系列&#xff1a;第一篇——基礎優化與資源管理 UGUI 性能優化系列&#xff1a;第二篇——Canvas 與 UI 元素管理 UGUI 性能優化系列&#xff1a;第三篇——渲染與像素填充率優化 UGUI 性能優化系列&#xff1a;第四篇——高級優化與注意事項 在 UGUI 性能優化…

企業開發轉型 | 前端AI化數字化自動化現狀

文章目錄前端AI化數字化自動化發展現狀引言調研背景與目的調研范圍與方法前端AI化技術現狀與工具生態主流AI工具分類與能力矩陣工具能力對比分析關鍵能力指標深度解析大模型技術成熟度評估前端AI化核心應用場景與人力優化路徑代碼生成與自動化開發設計到代碼全鏈路自動化自動化…

Mysql(運維-日志)

黑馬mysql筆記 最好開兩個窗口&#xff0c;一個用于mysql命令&#xff0c;一個用于liunx命令 目錄 錯誤日志 二進制日志 介紹 日志格式 mysq默認二進制日志文件為ROW 日志查看 二進制日志查看命令 默認日志文件格式下查看日志內容 更改日志文件格式查看日志內容 日志…

RabbitMQ:解鎖高效消息傳遞的密碼[特殊字符]

目錄 一、RabbitMQ 核心概念 1.1整體框架 1.2元素詳解 1.2.1 生產者&#xff08;Producer&#xff09;&消費者&#xff08;Consumer&#xff09; 1.2.2 交換機&#xff08;Exchange&#xff09; ①fanout &#xff08;廣播型&#xff09; ②direct &#xff08;直連型…

StarRocks × MinIO:打造靈活高效的存算分離方案

“存算分離”&#xff08;Decoupled Storage and Compute&#xff09;是一種在現代數據系統中被廣泛采用的架構設計。它將計算和存儲解耦&#xff0c;使二者可以獨立擴展&#xff0c;提升資源利用率并降低運維成本。StarRocks 從 3.0 版本開始支持這一架構&#xff0c;允許用戶…

R語言的分位數回歸實踐技術高級應用

回歸是科研中最常見的統計學研究方法之一&#xff0c;在研究變量間關系方面有著極其廣泛的應用。由于其基本假設的限制&#xff0c;包括線性回歸及廣義線性回歸在內的各種常見的回歸方法都有三個重大缺陷&#xff1a;(1)對于異常值非常敏感&#xff0c;極少量的異常值可能導致結…

Tomcat的部署、單體架構、session會話、spring

一、Tomcat的部署①②③④⑤二.web項目在tomcat服務中如何運行&#xff1a;1.web項目源碼部署在服務器的webapps目錄里面2.將web項目打包(war),部署在服務器的webapps目錄里面。三 單體架構和前后端分離單體架構是將所有功能模塊&#xff08;包括前端界面、后端邏輯、數據庫交互…