MySQL學習——約束

来源:https://www.cnblogs.com/shamao/archive/2019/09/05/11468174.html
-Advertisement-
Play Games

MySQL學習——約束 摘要:本文主要學習了資料庫的約束。 primary key(主鍵) 定義 主鍵約束是一個列或者多個列,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可以強製表的實體完整性。 主鍵約束相當於唯一約束和非空約束的組合,主鍵約束列不允許重覆,也不允許出現空值。 ...


MySQL學習——約束

摘要:本文主要學習了資料庫的約束。

primary key(主鍵)

定義

主鍵約束是一個列或者多個列,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵,通過它可以強製表的實體完整性。

主鍵約束相當於唯一約束和非空約束的組合,主鍵約束列不允許重覆,也不允許出現空值。

每個表最多只允許一個主鍵,建立主鍵約束可以在列級別創建,也可以在表級別創建。

當創建主鍵的約束時,系統預設會在所在的列和列組合上建立對應的唯一索引。

主鍵自增

MySQL資料庫提供了一個自增的數字,專門用來自動生成主鍵值,主鍵值不用用戶維護,自動生成,自增數從1開始,以1遞增。

使用方式是在主鍵後面添加 auto_increment 選項。

實例

在創建表時添加單列主鍵約束,主鍵自增:

1 create table test (
2   id int(11) primary key auto_increment,
3   phone int(11),
4   name varchar(50)
5 );

在創建表時添加複合主鍵約束:

1 mysql> create table test (
2     ->   id int(11),
3     ->   phone int(11),
4     ->   name varchar(50),
5     ->   primary key(id, phone)
6     -> );
7 Query OK, 0 rows affected (0.00 sec)
8 
9 mysql> 

在修改表時添加主鍵約束:

1 mysql> alter table test add primary key(id, phone);
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

在修改表時刪除主鍵約束:

1 mysql> alter table test drop primary key;
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

foreign key(外鍵)

定義

外鍵約束用來在兩個表的數據之間建立鏈接,它可以是一列或者多列。一個表可以有一個或多個外鍵。

外鍵對應的是參照完整性,一個表的外鍵可以為空值,若不為空值,則每一個外鍵的值必須等於另一個表中主鍵的某個值。

外鍵是表的一個欄位,不是本表的主鍵,但對應另一個表的主鍵。定義外鍵後,不允許刪除另一個表中具有關聯關係的行。

外鍵的主要作用是保持數據的一致性、完整性。

主表和子表

主表(父表):對於兩個具有關聯關係的表而言,相關聯欄位中主鍵所在的表就是主表。

從表(子表):對於兩個具有關聯關係的表而言,相關聯欄位中外鍵所在的表就是從表。

實例

創建父表並定義主鍵約束:

1 mysql> create table man (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50)
5     -> );
6 Query OK, 0 rows affected (0.01 sec)
7 
8 mysql> 

在創建表時添加外鍵約束:

 1 mysql> create table child (
 2     ->   id int(11) primary key,
 3     ->   manid int(11),
 4     ->   phone int(11),
 5     ->   name varchar(50),
 6     ->   constraint fk_man_id foreign key(manid) references man(id)
 7     -> );
 8 Query OK, 0 rows affected (0.00 sec)
 9 
10 mysql> 

在修改表時添加外鍵約束:

1 mysql> alter table child add constraint fk_man_id foreign key(manid) references man(id);
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

在修改表時刪除外鍵約束:

1 mysql> alter table child drop foreign key fk_man_id;
2 Query OK, 0 rows affected (0.00 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

unique key(唯一)

定義

唯一約束要求該列唯一,允許為空,但只能出現一個空值。唯一約束可以確保一列或者幾列不出現重覆值。

實例

在創建表時添加單列唯一約束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11) unique,
4     ->   name varchar(50)
5     -> );
6 Query OK, 0 rows affected (0.00 sec)
7 
8 mysql> 

在創建表時添加多列唯一約束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50),
5     ->   unique(phone, name)
6     -> );
7 Query OK, 0 rows affected (0.00 sec)
8 
9 mysql> 

在修改表時添加唯一約束:

1 mysql> alter table test add constraint uk_test_phone unique(phone);
2 Query OK, 0 rows affected (0.00 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

在修改表時刪除唯一約束:

1 mysql> alter table test drop index uk_test_phone;
2 Query OK, 0 rows affected (0.00 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

default constraint(預設值)

定義

預設值約束用來指定某列的預設值。

實例

在創建表時添加預設值:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50) default 'Test'
5     -> );
6 Query OK, 0 rows affected (0.01 sec)
7 
8 mysql> 

在修改表時修改預設值:

1 mysql> alter table test change column name name varchar(30) default 'none';
2 Query OK, 1 row affected (0.00 sec)
3 Records: 1  Duplicates: 0  Warnings: 0
4 
5 mysql> 

not null constraint(非空)

定義

非空約束可以用來約束該列的取值不能為空,對於使用了非空約束的欄位,如果用戶在添加數據時沒有指定值,資料庫系統就會報錯。

實例

在創建表時添加非空約束:

1 mysql> create table test (
2     ->   id int(11) primary key,
3     ->   phone int(11),
4     ->   name varchar(50) not null
5     -> );
6 Query OK, 0 rows affected (0.00 sec)
7 
8 mysql> 

在修改表時修改非空約束:

1 mysql> alter table test change column name name varchar(30) null;
2 Query OK, 0 rows affected (0.01 sec)
3 Records: 0  Duplicates: 0  Warnings: 0
4 
5 mysql> 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 容器命令: 更多更全面的Docker命令大全 ...
  • openldap 之 客戶端部署 [root@client ~]# cat /etc/yum.repos.d/base.repo[os]name=osbaseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/enabled=1gp ...
  • 由於在微信之前,多年使用QQ的緣故,已經習慣了使用Ctrl+Alt+A進行截圖,雖然QQ後來還專門提供了TIM(Office QQ),但仍然漸漸的以微信為主,TIM甚至已經很少登錄,之前登錄也僅僅是為了使用截圖,所以當時覺得可以找個替代者,沒必要因為個截圖小工具每天登錄它,便強迫自己使用Win10自 ...
  • 目錄 1. 系統服務管理 1. 文件管理 1. 查看日誌 1. 壓縮與解壓 1. 磁碟和網路管理 1. 防火牆 1. ftp操作 1. 軟體的安裝與管理 1. 其他 系統服務管理 systemctl 輸出系統中各個服務的狀態: systemctl list units type=service 查看 ...
  • 背景以 Jenkins 伺服器為例,在構建內部的這個項目時,CE 每部署一次服務,最快 6 分鐘,最慢將近 13 分鐘左右。遇到多個項目併發打包會因為資源占用等問題時間會延長,甚至出現過幾次 20 分鐘以上的情況。 所以經常收到一些友情提示:比如像這樣的截圖,往往對方只發一張圖,卻什麼都不說: 原因 ...
  • 本文簡單描述CentOS源碼安裝MySQL5.7,所有步驟都經過測試完成,在安裝的過程中最容易遇到的問題一般都是路徑和許可權導致的,所有需要安裝的時候思考和記錄路徑和許可權,這裡需要善於使用linux系統的指令查找路徑和許可權。 ...
  • 錯誤號碼1045 Access denied for user 'root'@xx.xxx.xxx.xx(using password:YES) 遠程登錄被拒絕的非正常解決辦法 ...
  • 解決mongodb 啟動告警 /sys/kernel/mm/transparent_hugepage/enabled is 'always'. /sys/kernel/mm/transparent_hugepage/defrag is 'always' soft rlimits too lo... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...