MySQL資料庫教程-數據表欄位約束

2021-01-11 編程技術棧
MySQL資料庫教程-數據表欄位約束

為保證資料庫中存儲數據的規範化,一般需要在定義欄位時進行欄位規範與約束的定義。保證在進行數據錄入時,資料庫能夠通過這個規則、約束、規範檢查所錄入的數據,防止錯誤及不符合要求數據的錄入。本文主要介紹數據表欄位約束類型及其基本語法,為下一步創建數據表提供基礎與依據。

01數據表基本結構

MySQL是主流關係型資料庫管理系統之一,我們之所以指出關係型數據主要目的在於關係型數據管理系統存儲的是結構化數據,即採用二維表格實現數據的存儲。如我們要存儲學生基本信息,主要包括學生學號、姓名、出生日期等相關信息,採用二維表格存儲形式描述如下:

二維存儲數據表結構

數據表基本結構描述如上圖所示,使用二維表格實現數據存儲。在上圖中每一列稱為一個屬性或者欄位。其中第一行的每一列為欄位(屬性)名稱。第一行下面的每一行稱為記錄,即一條記錄。記錄是存儲結構化數據的基本單元。在實際進行欄位設置及值存儲過程中,需要結合實際情況確定每一個欄位存儲數據的格式,規範與要求。這些規範格式等即為欄位的約束。如學生的聯繫電話不允許出現重複,就需要定義與之對應的欄位約束。

02MySQL數據表欄位約束

MySQL資料庫管理系統數據表欄位約束主要包括主鍵約束、外鍵約束、默認值約束、唯一約束、空值約束、自動增長約束等。主要約束概念及語法說明如下:

1、主鍵約束 Primary Key

主鍵的概念:記錄的唯一標識,能夠通過該標識確定唯一一條記錄。如上表中唯一能夠確定學生記錄的只能是學號,因此學號是主鍵。主鍵是不允許為空,不允許出現重複。可以在定義數據表欄位時給欄位添加主鍵約束。語法結構為 :

//欄位名稱 數據類型 主鍵約束

id varchar(14) primary key

如上表所示,定義學生學號欄位名稱為id ,數據類型為可變長度字符串,長度為14 ,設置其為主鍵。

在定義主鍵時需要注意多欄位組合形式主鍵的定義,在很多情況下我們的主鍵需要由多個欄位所組成,如學生成績信息表,主要欄位包括學號、課程編號、成績。針對該表主鍵為學號與課程編號組合。

primary key(id,cid)

//id指學號

//cid指課程編號

2、外鍵約束 Foreign Key

外鍵約束主要針對多個表之間的關係進行描述,外鍵的定義描述如下:

對於欄位F在表A中不是主鍵,但在另外一個表B中表示主鍵,這個時候欄位F對於表A可稱為外鍵,在定義過程中需指明F在哪個表中是主鍵。另外需要注意,兩個表中並不需要都是用F作為欄位名,只要兩者存儲數據含義與類型一致即可。為說明外鍵約束,我們使用學生基本信息表與班級信息表進行說明,表結構存儲數據描述如下圖:

外鍵約束實例表示例

如上表所示,學生信息表與班級信息表中均存在一個班級編號欄位,在學生信息表中,該欄位不表示任何鍵,但在班級信息表中編輯編碼為主鍵,因此相對於學生信息表,班級編號為外鍵。實現語法描述如下:

constraint stu_class_fk foreign key (class_id) references classinfor(class_id)

//由於存在外鍵關係需要首先定義班級信息表classinfor,再定義學生信息表

// 在定義學生信息表stuinfor中定義外鍵約束

//stu_class_fk表示外鍵名稱

//references表示外鍵依賴關係

3、默認值約束 default

默認值約束主要用於實現為欄位提供統一的默認值,如學生信息表中,所有的班級編號欄位都取值1,為簡化操作,我們可以直接為班級編號定義默認值約束,取值為1,在後期錄入數據時,可直接去掉對該欄位的數據錄入。在定義欄位時可直接指明默認值,基本語法:

欄位名稱 數據類型 默認值

class_id varchar(4) default 「1」;

//設置學生信息表中學號欄位默認值為1

4、唯一約束unique

唯一約束主要用於約束欄位取值的唯一性,有些情況下需要在錄入數據時保存數據的唯一性,如在上表學生信息表中,需要學生的聯繫電話唯一,即該欄位不允許輸入重複的值。示例代碼如下:

欄位名稱 數據類型 unique

stu_tel varchar(14) unique

//設置學生電話欄位名稱為stu_tel

//類型為長度14字符串

//唯一約束

5、空值約束 NULL

欄位允許取空值則可使用空值約束,默認情況下,欄位是允許為空的。如我們創建一個學生成績表,在錄入成績之前需要將學號,課程編號寫入數據表,但是允許成績為空時,對成績欄位設置允許為空。代碼說明如下:

欄位名稱 數據類型 null | not null

stu_score float(4) null

//設置學生成績欄位名稱為stu_score

//類型為浮點型

//設置允許為空

6、自動增長約束 auto_increment

自動增長可以理解為一種約束,也可以理解為一種數據類型。是指某一個欄位值依次增長,且不重複,(序號)在這種情況下可以將其設置為自動增長類型。如我們可以將班級信息表中的班級編號設置為自動增長欄位:

class_id int auto_increment primary key;

//班級編號 class_id

//數據類型 int整數

//自動增長,默認初始值1,增量1

//主鍵 primary key

本百家條號長期關注編程資訊分享;編程課程、素材、代碼分享及編程培訓。如果您對以上方面有興趣或代碼錯誤、建議與意見,可在評論區回復。更多程序設計相關教程及實例分享,期待大家關注與閱讀!

相關焦點

  • MySQL資料庫常見的出錯代碼及出錯信息
    詳細內容請大家參考下文: 1005:創建表失敗 1006:創建資料庫失敗 1007:資料庫已存在,創建資料庫失敗 1008:資料庫不存在,刪除資料庫失敗 1009:不能刪除資料庫文件導致刪除資料庫失敗 1010:不能刪除數據目錄導致刪除資料庫失敗 1011:刪除資料庫文件失敗 1012:不能讀取系統表中的記錄
  • 將mysql數據導入access資料庫
    mysql資料庫表sqltable 欄位id,name,sex,email access資料庫表accesstable id,name,sex,email ?
  • 0064 關係資料庫的概念和安裝使用MySQL
    關係資料庫就是資料庫中的表採用二維表格來存儲數據,是一種按行與列排列的具有相關信息的邏輯組,它類似於Excle工作表。表和表之間可以通過數據關係進行關聯。關係資料庫有以下關鍵名詞:資料庫服務程序:實現資料庫機制並對外提供數據訪問和存儲服務的程序。資料庫客戶端程序:用來訪問和管理資料庫結構和數據的程序。
  • 如何向mysql導入數據
    一、導入.sql文件1.mysql命令導入數據基本語法:mysql -h伺服器地址 -u用戶名 -p 資料庫名< 要導入的資料庫文件路徑例:導入G:2.mysqlimport導入數據基本語法:mysqlimport -h伺服器地址 -u 用戶名 -p [--local] 資料庫名 文件路徑 [options]options常用選項:
  • 簡單學資料庫:什麼是外鍵約束,以及什麼是表關係?
    今天我們和大家分享的是什麼是外鍵約束,以及什麼是表的結構。我們廢話不多說,馬上開始我們今天的分享。開發工具:IDLE (Python 3.7 64-bit或者32-bit) , pycharm(professional的版本), Ubuntu,xshell6(註:不需要3.7版本的也行,只需要Python3的版本都可以)1.什麼是MySQL(資料庫)?
  • mysql/mariadb資料庫在查詢結果中再次查詢篩選的操作方法
    大家好,這是由義縣遊學電子科技提供的關於編程開發和嵌入式方面的實用教程,其中有一些技術方案和一些處理問題的解決方法,希望可以為您提供參考依據.今天是2020年4月9日,我跟大家分享一個二次操作mysql資料庫查詢結果的方法.我以資料庫 mariadb為例進行說明.因為它有個heidiSQL圖形管理工具,比較好操作.資料庫 mariadb為例進行說明.因為它有個heidiSQL圖形管理工具,比較好操作.
  • oracle資料庫表的約束和主子表詳解
    先看下單個表的情況下,什麼是表的約束。一、 表的約束條件 約束條件是施加在表的欄位上的一組限制條件,它使得只有符合限制條件要求的數據才能輸入表。刪除約束條件ALTER TABLE table_name DROP CONSTRAINT constraint_name;二 、表的主鍵就是一種約束類型,表中定義一個主鍵來唯一確定表中每一行數據的標識符。主鍵有如下特點:1. 包括一個或多個欄位,各欄位不許為null。2. Primary key不許重複。
  • 一千行MySQL學習筆記
    MySQL中,可以對InnoDB引擎使用外鍵約束:    語法:    foreign key (外鍵欄位) references 主表名 (關聯欄位) [主表記錄刪除時的動作] [主表記錄更新時的動作]    此時需要檢測一個從表的外鍵需要約束為主表的已存在的值。外鍵在沒有關聯的情況下,可以設置為null.前提是該外鍵列,沒有not null。
  • mysql 版本號解釋_mysql workbench查詢mysql版本號 - CSDN
    在設計資料庫結構的時候,要儘量遵守三範式,如果不遵守,必須有足夠的理由。比如性能。事實上我們經常會為了性能而妥協資料庫的設計。mysql有關權限的表都有哪幾個MySQL伺服器通過權限表來控制用戶對資料庫的訪問,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。
  • Mysql(Mariadb)資料庫主從複製
    Mysql主從複製的實現原理圖大致如下:MySQL之間數據複製的基礎是以二進位日誌文件(binary log file)來實現的,一臺MySQL資料庫一旦啟用二進位日誌後,其作為master,它資料庫中所有操作都會以「事件」的方式記錄在二進位日誌中,其他資料庫作為slave通過一個I/O線程與主伺服器保持通信,並監控master的二進位日誌文件的變化,如果發現
  • mysql 矩陣類型專題及常見問題 - CSDN
    資料庫是為了方便對數據進行存儲以及管理的。:資料庫是一些關聯表的集合數據表:表是數據的矩陣。持久性是指事務的操作,一旦提交,對於資料庫中數據的改變是永久性的,即使資料庫發生故障也不能丟失已提交事務所完成的改變。
  • 如何把Access的數據導入到Mysql中
    在Mysql資料庫中,一般有兩種方法來處理數據的導出:1. 使用select * from table_name into outfile 「file_name」; 2. 使用mysqldump實用程序 下面我們來舉例說明: 假設我們的資料庫中有一個庫為samp_db,一個表為samp_table。現在要把samp_table的數據導出。
  • MySQL8.0窗口函數做數據排名統計詳細教程
    MySQL8.0新增了窗口函數,大大的方便了做數據排名統計的人,很多朋友還不清楚怎麼用MySQL8.0做數據統計排名,下面就來為大家分享一篇心得文章。
  • mysql查詢前一周的數據_mysql查詢當天的數據 - CSDN
    mysql 昨天 一周前 一月前 一年前的數據 這裡主要用到了DATE_SUB,參考如下代碼如下:SELECT * FROM
  • MySQL 8.0 正式版 8.0.11 發布:比 MySQL 5.7 快 2 倍
    該項功能消除了對獨立的 NoSQL 文檔資料庫的需求,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的 ACID 合規性。我們可以使用這個特性用於性能調試,例如我們先隱藏一個索引,然後觀察其對資料庫的影響。如果資料庫性能有所下降,說明這個索引是有用的,然後將其「恢復顯示」即可;如果資料庫性能看不出變化,說明這個索引是多餘的,可以考慮刪掉。5. 降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。
  • 基於MySQL資料庫應用開發實現嵌入式數控系統的設計
    具體創建過程如下: % mysql –uroot mysql; //進入資料庫 mysql》 SET PASSWORD=PASSWORD(『lyw00001』); //為根用戶分配一個口令 mysql》 CREATE DATABASE work ; //創建work資料庫 mysql》 GRANT ALL ON work.* to lyw@localhost
  • MySQL 8.0 正式版 8.0.11 發布:比 MySQL 5.7 快 2 倍 - OS...
    該項功能消除了對獨立的 NoSQL 文檔資料庫的需求,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的 ACID 合規性。我們可以使用這個特性用於性能調試,例如我們先隱藏一個索引,然後觀察其對資料庫的影響。如果資料庫性能有所下降,說明這個索引是有用的,然後將其「恢復顯示」即可;如果資料庫性能看不出變化,說明這個索引是多餘的,可以考慮刪掉。5. 降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。
  • 多表組合查詢——Python操作Mysql資料庫
    前面我們介紹了單張表的查詢,包括模糊查詢、分組、排序、各種篩選條件等等操作,在實際應用中,查詢的數據往往不止局限在一張表裡,通常需要多張表在一起進行組合查詢,今天我們將會對Mysql當中的多張有關聯的表進行組合查詢,本節內容涉及到的幾個關鍵點有:等值和非等值連接查詢;
  • python3.8操作(插入,刪除)mysql/MariaDB資料庫
    = mysql.connector.connect(host="localhost", # 資料庫主機地址user="root", # 資料庫用戶名passwd="root", # 資料庫密碼database="test1" #資料庫名)mycursor = mydb.cursor()a=0while True:time.sleep(1)try:# 查詢資料庫的表格table1mycursor.execute
  • 2020 年資料庫高頻面試題|原力計劃
    事實上我們經常會為了性能而妥協資料庫的設計。5、MySQL有關權限的表都有哪幾個MySQL伺服器通過權限表來控制用戶對資料庫的訪問,權限表存放在mysql資料庫裡,由mysql_install_db腳本初始化。這些權限表分別user,db,table_priv,columns_priv和host。