欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL?數據庫的約束及數據表的設計原理

 更新時間:2022年01月24日 16:23:49   作者:吞吞吐吐大魔王  
這篇文章主要介紹了MySQL?數據庫的約束及數據表的設計原理,數據庫中的約束即是對插入數據庫中的數據進行限定,為了保證數據的有效性和完整性,下面一起來了解具體的詳細內容,需要的小伙伴可以參考一下

1. 數據庫的約束

1.1 介紹

數據庫中的約束 ,顧名思義即是對插入數據庫中的數據進行限定,這么做的目的是為了保證數據的有效性和完整性。 這樣就大幅度地提高了數據庫中數據的質量,節(jié)省了數據庫的空間和調用數據的時間。

之前介紹過 MySQL 中的數據類型,數據類型其實就能夠對一部分數據進行校驗。約束也一樣,同樣能夠對一些數據進行校驗工作。這樣就可以盡量避免出現一些非法的數據

1.2 約束類型

常見約束的類型有以下幾種:

  • not null: 指示某列不能存儲 null 值
  • unique: 保證某列的每行必須是唯一值,不能有重復
  • default: 規(guī)定沒有給列賦值時的默認值
  • primary key: 表示主鍵,是 not null unique 的結合。確保某列(或多個列的結合)有唯一標識,有助于更容易更快速的找到表中的一個特定的記錄
  • foreign key: 保證一個表中的數據匹配另一個表中的值的參照完整性
  • check: 保證列中的值符合指定的條件。對于 MySQL 數據庫,可以使用 check,但是其使用結果忽略

1.3 not null

如果不使用 not null,即表示默認情況下可以插入 null(即這列的值可以不填)

但是例如做一些調查問卷時,就有必填項,此時這些選項就不能為空,就可以使用 not null

示例:

1.4 unique

如果不使用 unique,那么某列不同行的值是可以重復的。

但實際生活中,例如身份證號碼、電話號碼等等其實是一個唯一值,此時就可以使用 unique

示例:

注意:

當列有 unique 約束時,進入插入前,就先會查找,如果要插入的值不存在,才會進行插入,因此使用 unique 其實會影響效率,但總的來說利大于弊。

1.5 default

當我們不使用 default 去指定列的默認值時,該默認值就為 null,如果你想改變某列的默認值,就可以使用 default

示例:

1.6 primary key

primary key 是主鍵,表示了一個記錄的身份標識,相當于同時使用 not null 和 unique

示例:

注意:

  • 一張表中只能有一個主鍵
  • 主鍵可以由多個列聯合形成

補充: 自動增量 —— auto_increment

MySQL 可以自動的為每個行分配下一個可用的編號,不用在添加一行時手動分配唯一值(可以手動分配唯一值)。但是必須用在 create 創(chuàng)建表的時候,例如:

注意:當使用自動增量和手動分配混搭時,這個唯一值就不一定是有序的了

1.7 foreign key

foreign key 是外鍵約束,可用于關聯其它表的主鍵或唯一值

例如淘寶購物的話,一個數據庫中可以有商品表和訂單表兩個數據表,而這兩個表都可以包含商品編號。而訂單表里面的商品編號一定是商品表里面有的前提下才可以出現。因此就可以使用外鍵來約束,防止非正常數據出現

示例:

作用:

外鍵約束將兩張表綁定起來,其中被約束的表可以叫做子表,約束別人的表叫做父表,如果子表中的列要插入的值在父表中關聯的主鍵或唯一值中沒有,那么將插入將會失敗

注意: 外鍵約束會導致父表中的記錄不能直接刪,那么想要刪除父表的記錄該怎么做呢?(例如要下架某個商品,該商品的編號也就沒了)

解決思路: 邏輯刪除(不直接刪除數據庫的記錄,沒有打破外鍵約束)

在商品表中引入一個新的字段,通過這個字段表示該記錄是有效還是無效的??梢粤钸@個字段默認值為1,即表示有效,如果要刪除這個商品,就把這個字段改為0,此時該商品就無效了。

1.8 check

check 約束是可以指定某列可以填入的數據,例如性別,就只能填入男或者女

注意:

MySQL 中現在還不支持該約束,即使用了,也會忽略該約束的影響

示例:

2. 數據庫表的設計

當我們掌握了基本的數據庫的操作方法后,如果我們要面對一個從零開始建表的操作,勢必要對我們需要的實體和它們之間的關系有一個很好的把握。

實體之間的關系主要存在以下四種:

  • 無關系
  • 一對一關系
  • 一對多關系
  • 多對多關系

2.1 一對一關系

例如一個學生對應著有一個系統(tǒng)的用戶身份,我們就可以有兩種設計方式

將學生信息和用戶信息放到一個表中

 

學號學生姓名用戶名用戶密碼
2001張三三娃***
2002李四四娃***
2003王五五娃***

將學生放到 A 表中,用戶信息放到 B 表中,在 B 表中可以插入學生學號來將學生和用戶進行關聯

A 表:

 

學號學生姓名
2001張三
2002李四
2003王五

B 表:

用戶名用戶密碼學生學號
三娃***2001
四娃***2002
五娃***2003

2.2 一對多關系

例如一般一個中學學生和班級之間是一對多的關系,一個學生只能有一個班級,一個班級里面可以有多個學生。

我們通??梢栽O計兩張表,存放學生信息的 A 表,和班級信息的 B 表,在學生信息中添加班級來進行關聯

A表:

學號學生姓名班級id
2001張三1
2002李四1
2003王五2

B 表:

班級id班級名稱
1高三(1)班
2高三(2)班

2.3 多對多關系

例如大學生和課程之間,就是一個多對多的關系,一個學生可能有不同的多個課程,一個課程也有很多個學生來選擇。

這時我們設計三個表,分別為存放學生信息的 A 表、存放課程信息的 B 表和將學生與課程聯系起來的中間表 C 表

A表:

學號學生姓名
2001張三
2002李四
2003王五

B 表:

課程id課程名
1高等數學
2大學物理
3數據庫理論

C 表:

學號課程id
20011
20012
20021
20023
20031

到此這篇關于MySQL 數據庫的約束及數據表的設計原理的文章就介紹到這了,更多相關MySQL 數據庫的約束及數據表設計內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql中的保留字段產生的問題

    mysql中的保留字段產生的問題

    我們在使用mysql的時候要注意這方面的問題,一個因為數據庫字段命名不當造成的問題檢查起來還是相當麻煩的,今天遇到這種問題,花費了很長時間才找到問題所在,這是無語
    2015-04-04
  • MYSQL速度慢的問題 記錄數據庫語句

    MYSQL速度慢的問題 記錄數據庫語句

    Web程序慢,首先的一個檢測對象就是數據庫,寫過幾年程序的都知道?,F在想追蹤MySQL中那些拖累服務器性能的SQL語句,怎么辦
    2012-06-06
  • mysql 8.0.11 安裝步驟詳解

    mysql 8.0.11 安裝步驟詳解

    這篇文章主要為大家詳細介紹了mysql 8.0.11 安裝步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 數據庫報錯:Unknown column 'xxx' in 'where clause'問題的解決過程

    數據庫報錯:Unknown column 'xxx' in 

    但凡寫過sql語句的人估計都曾經碰到過類似于Unknown column ‘xxx’ in ‘where clause’的問題,這篇文章主要給大家介紹了關于數據庫報錯:Unknown column 'xxx' in 'where clause'問題的解決過程,需要的朋友可以參考下
    2023-03-03
  • mysql 字段定義不要用null的原因分析

    mysql 字段定義不要用null的原因分析

    這篇文章主要介紹了mysql 字段定義不要用null的原因分析,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • mysql alter table命令修改表結構實例

    mysql alter table命令修改表結構實例

    這篇文章主要介紹了mysql alter table命令修改表結構實例的相關資料,需要的朋友可以參考下
    2016-10-10
  • MySQL中使用序列Sequence的方式總結

    MySQL中使用序列Sequence的方式總結

    序列是一組整數如1,2,3,...為了在需要時生成的,這篇文章主要給大家介紹了關于MySQL中使用序列Sequence的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Mysql中Json相關的函數使用

    Mysql中Json相關的函數使用

    本文主要介紹了Mysql當中Json相關的函數使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • Ubuntu 18.04配置mysql以及配置遠程連接的步驟

    Ubuntu 18.04配置mysql以及配置遠程連接的步驟

    這篇文章主要給大家介紹了關于Ubuntu 18.04配置mysql以及配置遠程連接的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • MySQL日志的詳細分析實例

    MySQL日志的詳細分析實例

    MySQL日志記錄了MySQL數據庫日常操作和錯誤信息,下面這篇文章主要給大家介紹了關于MySQL日志的詳細分析,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論