MySQL | 數據庫的六種約束、表的關系、三大范式

文章目錄

  • 數據庫約束
    • NOT NULL(非空約束)
    • UNIQUE(唯一約束)
    • DEFAULT(缺省約束)
    • PRIMARY KEY(主鍵約束)
    • AUTO_INCREMENT 自增
    • FOREIGN KEY(外鍵約束)
    • CHECK(檢查約束)
  • 表的設計
    • 表的關系
      • 一對一
      • 一對多
      • 多對多
    • 三大范式
      • 第一范式
      • 第二范式
      • 第三范式


數據庫約束

數據庫中主要有六種約束:

  • NOT NULL(非空約束) - 指示某列不能存儲 NULL 值。
  • UNIQUE(唯一約束) - 保證某列的每行必須有唯一的值。
  • DEFAULT(缺省約束) - 規定沒有給列賦值時的默認值。
  • PRIMARY KEY(主鍵約束) - NOT NULLUNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助于更容易更快速地找到表中的一個特定的記錄。
  • FOREIGN KEY(外鍵約束) - 保證一個表中的數據匹配另一個表中的值的參照完整性。
  • CHECK(檢查約束) - 保證列中的值符合指定的條件。對于 MySQL 數據庫,對 CHECK 子句進行分析,但是忽略 CHECK 子句。

NOT NULL(非空約束)

指示某列不能存儲 NULL 值。

mysql> create table book(-> id int,-> name varchar(12),-> price double,-> publish date,-> num int NOT NULL-> );
Query OK, 0 rows affected (0.02 sec)// 可以看到 num 的 NULL 屬性已經變為 NO(不允許)
mysql> DESC book;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int         | YES  |     | NULL    |       |
| name    | varchar(12) | YES  |     | NULL    |       |
| price   | double      | YES  |     | NULL    |       |
| publish | date        | YES  |     | NULL    |       |
| num     | int         | NO   |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)// 嘗試一下插入一個 num 為 NULL 的數據
mysql> INSERT INTO book VALUES(2, "C++", 13.6, "2000-08-02", NULL);
ERROR 1048 (23000): Column 'num' cannot be null// 可以發現會報錯: num 列不可以為 NULL

UNIQUE(唯一約束)

保證某列的每行必須有唯一的值,即對于添加了唯一約束的數據項不能有重復。

mysql> create table book(-> id int UNIQUE,-> name varchar(12),-> price double,-> publish date,-> num int-> );
Query OK, 0 rows affected (0.03 sec)// 可以看到 id 的 key 屬性已經被標記為 UNI
mysql> desc book;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int         | YES  | UNI | NULL    |       |
| name    | varchar(12) | YES  |     | NULL    |       |
| price   | double      | YES  |     | NULL    |       |
| publish | date        | YES  |     | NULL    |       |
| num     | int         | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
5 rows in set (0.00 sec)mysql> INSERT INTO book VALUES(1, "C++", 13.5, NULL, 10);
Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO book VALUES(1, "JAVA", 3.5, "2000-08-02", 5);
ERROR 1062 (23000): Duplicate entry '1' for key 'book.id'
// 雖然第二條數據除了 id,其他列的值都不同于第一條數據,然而還是會報錯:重復輸入“1”作為“book.id”的值

DEFAULT(缺省約束)

規定沒有給列賦值時的默認值。

mysql> create table book(-> id int,-> name varchar(12),-> price double,-> publish date DEFAULT "2000-08-02",-> num int-> );
Query OK, 0 rows affected (0.02 sec)// 可以看到 publish 的 Default 屬性被設置為 2000-08-02
mysql> desc book;
+---------+-------------+------+-----+------------+-------+
| Field   | Type        | Null | Key | Default    | Extra |
+---------+-------------+------+-----+------------+-------+
| id      | int         | YES  |     | NULL       |       |
| name    | varchar(12) | YES  |     | NULL       |       |
| price   | double      | YES  |     | NULL       |       |
| publish | date        | YES  |     | 2000-08-02 |       |
| num     | int         | YES  |     | NULL       |       |
+---------+-------------+------+-----+------------+-------+
5 rows in set (0.01 sec)// 指定列插入,不包含 publish 列
mysql> INSERT INTO book(id, name, price, num) VALUES(3, "C++", 13.5, 15);
Query OK, 1 row affected (0.00 sec)mysql> SELECT * FROM book;
+------+------+-------+------------+------+
| id   | name | price | publish    | num  |
+------+------+-------+------------+------+
|    3 | C++  |  13.5 | 2000-08-02 |   15 |
+------+------+-------+------------+------+
1 rows in set (0.00 sec)

PRIMARY KEY(主鍵約束)

NOT NULLUNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標識,有助于更容易更快速地找到表中的一個特定的記錄。

主鍵(primary key)的特性即 非空且唯一,如果在沒有指定主鍵的時候,如果某一列(或一組列)具有非空且唯一的特性,他就會被暫定為主鍵,但是主鍵只能有一個。

表中的任何列都可以作為主鍵,只要它滿足以下條件:

  • 任意兩行都不具有相同的主鍵值;
  • 每個行都必須具有一個主鍵值(主鍵列不允許NULL值)。

上面提到多個列也可以作為主鍵。在使用多列作為主鍵時,上述條件必須應用到構成主鍵的所有列,所有列值的 組合 必須是唯一的(但單個列的值可以不唯一)。

除MySQL強制實施的規則外,應該堅持的幾個普遍認可的最好習慣為:

  • 不更新主鍵列中的值;
  • 不重用主鍵列的值;
  • 不在主鍵列中使用可能會更改的值。(例如,如果使用一個名字作為主鍵以標識某個供應商,當該供應商合并和更改其名字時,必須更改這個主鍵。)
// 使用  NOT NULL UNIQUE
mysql> CREATE TABLE pen(-> id int NOT NULL UNIQUE,-> name varchar(12),-> price double,-> num int-> );
Query OK, 0 rows affected (0.06 sec)// id 的 KEY 屬性變為 PRI
mysql> DESC pen;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(12) | YES  |     | NULL    |       |
| price | double      | YES  |     | NULL    |       |
| num   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)// 使用 PRIMARY KEY 
mysql> CREATE TABLE clothes(-> id int PRIMARY KEY,-> name varchar(12),-> price double,-> num int-> );
Query OK, 0 rows affected (0.02 sec)// id 的 KEY 屬性變為 PRI
mysql> DESC clothes;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(12) | YES  |     | NULL    |       |
| price | double      | YES  |     | NULL    |       |
| num   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

但是 非空且唯一 并不一定就是主鍵,如果有多個非空不唯一,則只有第一個是主鍵。

// 將 id 和 num 都設置為非空且唯一
mysql> CREATE TABLE pen(-> id int NOT NULL UNIQUE,-> name varchar(12),-> price double,-> num int UNIQUE NOT NULL-> );
Query OK, 0 rows affected (0.02 sec)// 只有 id 是 PRI
mysql> DESC pen;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(12) | YES  |     | NULL    |       |
| price | double      | YES  |     | NULL    |       |
| num   | int         | NO   | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

但我們之前也提到過,是允許 多個列 組成主鍵的,那么怎么實現呢?

mysql> CREATE TABLE pen(-> id int PRIMARY KEY,-> name varchar(12) PRIMARY KEY,-> price double,-> num int-> );
ERROR 1068 (42000): Multiple primary key defined

通過報錯我們發現,如果在兩個列后分別聲明主鍵的話會被認為 定義了多個主鍵。

// 正確做法是在聲明完所有列之后,再聲明主鍵是由哪些列構成的
mysql> CREATE TABLE pen(-> id int,-> name varchar(12),-> price double,-> num int,-> PRIMARY KEY(id, name)-> );
Query OK, 0 rows affected (0.03 sec)mysql> DESC pen;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | NO   | PRI | NULL    |       |
| name  | varchar(12) | NO   | PRI | NULL    |       |
| price | double      | YES  |     | NULL    |       |
| num   | int         | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)

AUTO_INCREMENT 自增

添加自增屬性的項必須為數字,并且必須為主鍵,并且只有缺省的時候才會使用自增。

  • 如果插入的 AUTO_INCREMENT 屬性的列值為缺省,則賦值為上一條記錄的值 +1 ,沒有上一條記錄,則賦值為 1
  • 如果刪除了表中數據,序號并不會重置,而是繼續從刪除的位置自增。
mysql> CREATE TABLE pen(-> id int PRIMARY KEY AUTO_INCREMENT,-> name varchar(12),-> price double,-> num int-> );
Query OK, 0 rows affected (0.02 sec)// 可以看到 id 的 Extra 屬性變成了 auto_increment
mysql> DESC pen;
+-------+-------------+------+-----+---------+----------------+
| Field | Type        | Null | Key | Default | Extra          |
+-------+-------------+------+-----+---------+----------------+
| id    | int         | NO   | PRI | NULL    | auto_increment |
| name  | varchar(12) | YES  |     | NULL    |                |
| price | double      | YES  |     | NULL    |                |
| num   | int         | YES  |     | NULL    |                |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)// 加入一條未設 id 的數據
mysql> INSERT INTO pen(name, price, num) VALUES("A", 2.34, 5);
Query OK, 1 row affected (0.01 sec)// id 被自動設置為 1
mysql> SELECT * FROM pen;
+----+------+-------+------+
| id | name | price | num  |
+----+------+-------+------+
|  1 | A    |  2.34 |    5 |
+----+------+-------+------+
1 row in set (0.00 sec)// 增加兩條數據,一條設置 id
mysql> INSERT INTO pen VALUES(3, "B", 3.45, 7);
Query OK, 1 row affected (0.00 sec)
// 一條不設 id
mysql> INSERT INTO pen(name, price, num) VALUES("C", 6.34, 10);
Query OK, 1 row affected (0.00 sec)// 未設 id 的數據其 id 會變成上一條記錄的 id+1
mysql> SELECT * FROM pen;
+----+------+-------+------+
| id | name | price | num  |
+----+------+-------+------+
|  1 | A    |  2.34 |    5 |
|  3 | B    |  3.45 |    7 |
|  4 | C    |  6.34 |   10 |
+----+------+-------+------+
3 rows in set (0.00 sec)// 刪掉所有 id<=4 的數據
mysql> DELETE FROM pen WHERE id <= 4;
Query OK, 3 rows affected (0.00 sec)// 增加兩條數據,都沒有設置 id 值
mysql> INSERT INTO pen(name, price, num) VALUES("D", 7.34, 1);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO pen(name, price, num) VALUES("E", 12.34, 13);
Query OK, 1 row affected (0.00 sec)// 新增的兩條數據的 id 并不是從 1 開始,而是根據上一條記錄(雖然它已經不存在了)的 id 自增
mysql> SELECT * FROM pen;
+----+------+-------+------+
| id | name | price | num  |
+----+------+-------+------+
|  5 | D    |  7.34 |    1 |
|  6 | E    | 12.34 |   13 |
+----+------+-------+------+
2 rows in set (0.00 sec)

FOREIGN KEY(外鍵約束)

外鍵:外鍵為表中的某一列,包含了另一個表的主鍵,定義了兩個表之間的關系。例如學生表中存儲了班級的信息,但是在班級表中并沒有這個班級存在,就會導致數據出現沖突,所以必須將兩個表關聯起來。

語法

FOREIGN KEY (外鍵項) REFERENCES 關聯表名(關聯表中的對應項)

示例

// 創建班級表
mysql> CREATE TABLE class(-> id int PRIMARY KEY AUTO_INCREMENT-> );
Query OK, 0 rows affected (0.03 sec)
// 創建學生表
mysql> CREATE TABLE student(-> id int PRIMARY KEY AUTO_INCREMENT,-> num int,-> name varchar(10),-> classid int,-> FOREIGN KEY (classid) REFERENCES class(id)-> );
Query OK, 0 rows affected (0.03 sec)
// 創建兩個班級
mysql> INSERT INTO class VALUES(181);
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO class VALUES(182);
Query OK, 1 row affected (0.00 sec)
// 插入三條學生數據
mysql> INSERT INTO student(name, classid) VALUES("李四", 182);
Query OK, 1 row affected (0.03 sec)
mysql> INSERT INTO student(name, classid) VALUES("陳六", 181);
Query OK, 1 row affected (0.00 sec)
// 第三條失敗,原因在于沒有186班
mysql> INSERT INTO student(name, classid) VALUES("張三", 186);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`classid`) REFERENCES `class` (`id`))

CHECK(檢查約束)

保證列中的值符合指定的條件。對于MySQL數據庫,對CHECK子句進行分析,但是忽略CHECK子句。

mysql> CREATE TABLE stu(-> id int,-> age int,-> name varchar(10),-> CHECK(id < 5)-> );
Query OK, 0 rows affected (0.03 sec)mysql> INSERT INTO stu(id) VALUES(3);
Query OK, 1 row affected (0.01 sec)mysql> INSERT INTO stu(id) VALUES(8);
ERROR 3819 (HY000): Check constraint 'stu_chk_1' is violated.
mysql> SELECT * FROM stu;
+------+------+------+
| id   | age  | name |
+------+------+------+
|    3 | NULL | NULL |
+------+------+------+
1 row in set (0.00 sec)

值得一提的是,在 MySQL 8.0.16 版本之前的 CHECK 約束,能被解析但是被忽略掉了,就是 不符合CHECK的數據依然可以被加入到表中。 而在之后的版本上,支持 CHECK約束,但仍有缺陷!想要 INSER INTO 一個不滿足 CHECK 的數據時確實不能通過(詳見上面的示例中),但是如果 INSERT INTO 時,未設置被 CHECK 約束的 ,那么 即使這個列的默認值不符合 CHECK約束 ,也還是可以創建成功。
在這里插入圖片描述
可以看到 主動賦值 不滿足 CHECK 的語句會報錯,而 默認值 不滿足 CHECK 的語句卻可以成功插入。


表的設計

表的關系

一對一

例如人和身份證的關系,每個人都對應有著只屬于自己的身份證:
在這里插入圖片描述


一對多

例如學生和班級的關系,一個班級擁有多個學生,但是一個學生只能屬于一個班級:
在這里插入圖片描述


多對多

例如學生、課程、選課表的關系。一個學生可以選擇多門課程,一個課程也可以被多個學生選擇:
在這里插入圖片描述


三大范式

表的關系只是設計的最基礎的一項,考慮好關系,確認好數據項,將數據填進去即可。
但是那樣的設計并不合理,可能會存在 數據冗余、傳輸性能、查詢性能 等問題,所以需要用到三大范式來規范數據庫表的設計,減少數據庫的冗余性。

范式是針對數據庫表設計的幾種方案,目前關系數據庫有六種范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式)。

通常我們使用的都是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),所以又將他們稱為三大范式。

第一范式

要求數據庫表的每一列都是不可分割的原子數據項。

在這里插入圖片描述
在這個表中,家庭信息和學校信息并不是原子的,例如家庭信息中包含了家庭組成和所在地,學校信息包含了年級和學位。

對于第一范式,需要確保每一項數據都是不可分割的原子性數據,不能是一個集合。因此要做出如下調整:

在這里插入圖片描述


第二范式

在第一范式的基礎上,非主鍵數據必須完全依賴主鍵,不能部分依賴(針對組合主鍵)。

拿下面這個表來說,相同 訂單號訂單時間和訂單金額一樣 的,但是相同 產品號訂單時間和訂單金額不一樣 。這說明訂單時間和訂單金額 部分依賴主鍵 —— 只依賴了組合主鍵中的訂單號而沒有依賴產品號 。
在這里插入圖片描述
所以需要將其分割出去單獨建立一個表:
在這里插入圖片描述


第三范式

在第二范式的基礎上,每一個非主鍵數據都必須要和主鍵直接依賴而非間接依賴,即不能依賴非主鍵數據。旨在體現依賴關系不可傳遞性。

如下圖,班主任性別班主任年齡 直接依賴于班主任姓名(非主鍵數據),而與 主鍵——學號 并沒有直接的依賴關系,而是間接,這就是依賴傳遞:
在這里插入圖片描述

所以需要將這兩項分割出去單獨建表:
在這里插入圖片描述

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

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

相關文章

哈希 :哈希沖突、負載因子、哈希函數、哈希表、哈希桶

文章目錄哈希哈希&#xff08;散列&#xff09;函數常見的哈希函數字符串哈希函數哈希沖突閉散列&#xff08;開放地址法&#xff09;開散列&#xff08;鏈地址法/拉鏈法&#xff09;負載因子以及增容對于閉散列對于開散列結構具體實現哈希表&#xff08;閉散列&#xff09;創建…

C++ 泛型編程(一):模板基礎:函數模板、類模板、模板推演成函數的機制、模板實例化、模板匹配規則

文章目錄泛型編程函數模板函數模板實例化隱式實例化顯式實例化函數模板的匹配規則類模板類模板的實例化泛型編程 泛型編程旨在削減重復工作&#xff0c;如&#xff1a; 將一個函數多次重載不如將他寫成泛型。 void Swap(int& left, int& right) {int temp left;lef…

你真的了解靜態變量、常量的存儲位置嗎?

文章目錄引言C對內存的劃分如何落實在Linux上自由存儲區和堆之間的問題棧常量區靜態存儲區靜態局部變量靜態局部變量、靜態全局變量、全局變量的異同macOS系統的測試結果總結引言 在動態內存的博客中&#xff0c;我提到&#xff1a; 在Linux 內存管理的博客中&#xff0c;我提…

C++ 泛型編程(二):非類型模板參數,模板特化,模板的分離編譯

文章目錄非類型模板參數函數模板的特化類模板的特化全特化偏特化部分參數特化參數修飾特化模板分離編譯解決方法非類型模板參數 模板的參數分為兩種&#xff1a; 類型參數&#xff1a; 則是我們通常使用的方式&#xff0c;就是在模板的參數列表中在 class 后面加上參數的類型…

Java操作——獲取文件擴展名,去掉文件擴展名

昨天收郵件&#xff0c;得知要參加一個產品部的會議&#xff0c;猜想&#xff0c;也許是因為我做的這個產品demo問題。于是昨天忙活到凌晨3點半&#xff0c;結果早上一來才知道又被調戲了。發郵件的MM把郵件誤發給我了。悲催啊有木有&#xff0c;困啊有木有&#xff01;自己還是…

數據結構 | B樹、B+樹、B*樹

文章目錄搜索結構B樹B樹的插入B樹的遍歷B樹的性能B樹B樹的插入B樹的遍歷B*樹B*樹的插入總結搜索結構 如果我們有大量的數據需要永久存儲&#xff0c;就需要存儲到硬盤之中。但是硬盤的訪問速度遠遠小于內存&#xff0c;并且由于數據量過大&#xff0c;無法一次性加載到內存中。…

MySQL 索引 :哈希索引、B+樹索引、全文索引

文章目錄索引引言常見的索引哈希索引自適應哈希索引B樹索引聚集索引非聚集索引使用方法聯合索引最左前綴匹配規則覆蓋索引全文索引使用方法索引 引言 為什么需要索引&#xff1f; 倘若不使用索引&#xff0c;查找數據時&#xff0c;MySQL必須遍歷整個表。而表越大&#xff0c;…

服裝店怎么引流和吸引顧客 服裝店鋪收銀系統來配合

實體店的同城引流和經營是實體經濟的一個重要的一環&#xff0c;今天我們來分享服裝行業的實體店鋪怎么引流和吸引、留住顧客&#xff0c;并實現復購。大家點個收藏&#xff0c;不然劃走就再也找不到了&#xff0c;另外可以點個關注&#xff0c;下次有新的更好的招&#xff0c;…

約瑟夫環(丟手絹問題)

文章目錄問題描述思路代碼實現問題描述 有 1~N 個數字&#xff0c;從 1~m 依次報數&#xff0c;數到 m 的數字要被刪掉&#xff0c;求最后剩下的數字是&#xff1f; 思路 第一次報數第二次報數1n-m12n-m2……m-2n-2m-1n-1m被刪掉了m11m22……n-1n-1-mnn-m 通過上面的表格&…

MySQL 鎖的相關知識 | lock與latch、鎖的類型、簡談MVCC、鎖算法、死鎖、鎖升級

文章目錄lock與latch鎖的類型MVCC一致性非鎖定讀&#xff08;快照讀&#xff09;一致性鎖定讀&#xff08;當前讀&#xff09;鎖算法死鎖鎖升級lock與latch 在了解數據庫鎖之前&#xff0c;首先就要區分開 lock 和 latch。在數據庫中&#xff0c;lock 和 latch 雖然都是鎖&…

Hibernate使用原生SQL適應復雜數據查詢

HQL盡管容易使用&#xff0c;但是在一些復雜的數據操作上功能有限。特別是在實現復雜的報表統計與計算&#xff0c;以及多表連接查詢上往往無能為力&#xff0c;這時可以使用SQL&#xff08;Native SQL&#xff09;實現HQL無法完成的任務。 1、使用SQL查詢 使用SQL查詢可以通過…

MySQL 存儲引擎 | MyISAM 與 InnoDB

文章目錄概念innodb引擎的4大特性索引結構InnoDBMyISAM區別表級鎖和行級鎖概念 MyISAM 是 MySQL 的默認數據庫引擎&#xff08;5.5版之前&#xff09;&#xff0c;但因為不支持事務處理而被 InnoDB 替代。 然而事物都是有兩面性的&#xff0c;InnoDB 支持事務處理也會帶來一些…

MySQL 事務 | ACID、四種隔離級別、并發帶來的隔離問題、事務的使用與實現

文章目錄事務ACID并發帶來的隔離問題幻讀&#xff08;虛讀&#xff09;不可重復讀臟讀丟失更新隔離級別Read Uncommitted (讀未提交)Read Committed (讀已提交)Repeatable Read (可重復讀)Serializable (可串行化)事務的使用事務的實現Redoundo事務 事務指邏輯上的一組操作。 …

MySQL 備份與主從復制

文章目錄備份主從復制主從復制的作用備份 根據備份方法的不同&#xff0c;備份可劃分為以下幾種類型&#xff1a; 熱備(Hot Backup) &#xff1a; 熱備指的是在數據庫運行的時候直接備份&#xff0c;并且對正在運行的數據庫毫無影響&#xff0c;這種方法在 MySQL 官方手冊中又…

C++ 流的操作 | 初識IO類、文件流、string流的使用

文章目錄前言IO頭文件iostreamfstreamsstream流的使用不能拷貝或對 IO對象 賦值條件狀態與 iostate 類型輸出緩沖區文件流fstream類型文件模式文件光標函數tellg() / tellp()seekg() / seekp()向文件存儲內容/讀取文件內容string流istringstreamostringstream前言 我們在使用 …

Hibernate 更新部分更改的字段 hibernate update

Hibernate 中如果直接使用 Session.update(Object o);或則是Session.updateOrUpdate(Object o); 會把這個表中的所有字段更新一遍。 如&#xff1a; ExperClass4k e new ExperClass4k(); e.setTime(time); e.setQ_num(q_num); e.setK(k); if (str "finch_fix")…

C++ 類的行為 | 行為像值的類、行為像指針的類、swap函數處理自賦值

文章目錄概念行為像值的類行為像指針的類概念引用計數動態內存實現計數器類的swap概念swap實現自賦值概念 行為像值的類和行為像指針的類這兩種說法其實蠻拗口的&#xff0c;這也算是 《CPrimer》 翻譯的缺點之一吧。。。 其實兩者的意思分別是&#xff1a; 行為像值的類&am…

C++ 右值引用 | 左值、右值、move、移動語義、引用限定符

文章目錄C11為什么引入右值&#xff1f;區分左值引用、右值引用move移動語義移動構造函數移動賦值運算符合成的移動操作小結引用限定符規定this是左值or右值引用限定符與重載C11為什么引入右值&#xff1f; C11引入了一個擴展內存的方法——移動而非拷貝&#xff0c;移動較之拷…

且談關于最近軟件測試的面試

前段時間有新的產品需要招人&#xff0c;安排和參加了好幾次面試&#xff0c;下面就談談具體的面試問題&#xff0c;在面試他人的同時也面試自己。 面試問題是參與面試同事各自設計的&#xff0c;我也不清楚其他同事的題目&#xff0c;就談談自己設計的其中2道題。 過去面試總是…

C++ 多態 | 虛函數、抽象類、虛函數表

文章目錄多態虛函數重寫重定義&#xff08;參數不同&#xff09;協變&#xff08;返回值不同&#xff09;析構函數重寫&#xff08;函數名不同&#xff09;final和override重載、重寫、重定義抽象類多態的原理虛函數常見問題解析虛函數表多態 一種事物&#xff0c;多種形態。換…