mysql中常見約束

来源:https://www.cnblogs.com/deyo/archive/2020/07/15/13303760.html
-Advertisement-
Play Games

1 #常見約束 2 3 /* 4 5 6 含義:一種限制,用於限製表中的數據,為了保證表中的數據的準確和可靠性 7 8 9 分類:六大約束 10 NOT NULL:非空,用於保證該欄位的值不能為空 11 比如姓名、學號等 12 DEFAULT:預設,用於保證該欄位有預設值 13 比如性別 14 PR ...


  1 #常見約束
  2 
  3 /*
  4 
  5 
  6 含義:一種限制,用於限製表中的數據,為了保證表中的數據的準確和可靠性
  7 
  8 
  9 分類:六大約束
 10     NOT NULL:非空,用於保證該欄位的值不能為空
 11     比如姓名、學號等
 12     DEFAULT:預設,用於保證該欄位有預設值
 13     比如性別
 14     PRIMARY KEY:主鍵,用於保證該欄位的值具有唯一性,並且非空
 15     比如學號、員工編號等
 16     UNIQUE:唯一,用於保證該欄位的值具有唯一性,可以為空
 17     比如座位號
 18     CHECK:檢查約束【mysql中不支持】
 19     比如年齡、性別
 20     FOREIGN KEY:外鍵,用於限制兩個表的關係,用於保證該欄位的值必須來自於主表的關聯列的值
 21         在從表添加外鍵約束,用於引用主表中某列的值
 22     比如學生表的專業編號,員工表的部門編號,員工表的工種編號
 23     
 24 
 25 添加約束的時機:
 26     1.創建表時
 27     2.修改表時
 28     
 29 
 30 約束的添加分類:
 31     列級約束:
 32         六大約束語法上都支持,但外鍵約束沒有效果
 33         
 34     表級約束:
 35         
 36         除了非空、預設,其他的都支持
 37         
 38         
 39 主鍵和唯一的大對比:
 40 
 41         保證唯一性  是否允許為空    一個表中可以有多少個   是否允許組合
 42     主鍵    √        ×        至多有1個           √,但不推薦
 43     唯一    √        √        可以有多個          √,但不推薦
 44 外鍵:
 45     1、要求在從表設置外鍵關係
 46     2、從表的外鍵列的類型和主表的關聯列的類型要求一致或相容,名稱無要求
 47     3、主表的關聯列必須是一個key(一般是主鍵或唯一)
 48     4、插入數據時,先插入主表,再插入從表
 49     刪除數據時,先刪除從表,再刪除主表
 50 
 51 
 52 */
 53 
 54 CREATE TABLE 表名(
 55     欄位名 欄位類型 列級約束,
 56     欄位名 欄位類型,
 57     表級約束
 58 
 59 )
 60 CREATE DATABASE students;
 61 #一、創建表時添加約束
 62 
 63 #1.添加列級約束
 64 /*
 65 語法:
 66 
 67 直接在欄位名和類型後面追加 約束類型即可。
 68 
 69 只支持:預設、非空、主鍵、唯一
 70 
 71 
 72 
 73 */
 74 
 75 USE students;
 76 DROP TABLE stuinfo;
 77 CREATE TABLE stuinfo(
 78     id INT PRIMARY KEY,#主鍵
 79     stuName VARCHAR(20) NOT NULL UNIQUE,#非空
 80     gender CHAR(1) CHECK(gender='' OR gender =''),#檢查
 81     seat INT UNIQUE,#唯一
 82     age INT DEFAULT  18,#預設約束
 83     majorId INT REFERENCES major(id)#外鍵
 84 
 85 );
 86 
 87 
 88 CREATE TABLE major(
 89     id INT PRIMARY KEY,
 90     majorName VARCHAR(20)
 91 );
 92 
 93 #查看stuinfo中的所有索引,包括主鍵、外鍵、唯一
 94 SHOW INDEX FROM stuinfo;
 95 
 96 
 97 #2.添加表級約束
 98 /*
 99 
100 語法:在各個欄位的最下麵
101  【constraint 約束名】 約束類型(欄位名) 
102 */
103 
104 DROP TABLE IF EXISTS stuinfo;
105 CREATE TABLE stuinfo(
106     id INT,
107     stuname VARCHAR(20),
108     gender CHAR(1),
109     seat INT,
110     age INT,
111     majorid INT,
112     
113     CONSTRAINT pk PRIMARY KEY(id),#主鍵
114     CONSTRAINT uq UNIQUE(seat),#唯一鍵
115     CONSTRAINT ck CHECK(gender ='' OR gender  = ''),#檢查
116     CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外鍵
117     
118 );
119 
120 
121 
122 
123 
124 SHOW INDEX FROM stuinfo;
125 
126 
127 
128 #通用的寫法:★
129 
130 CREATE TABLE IF NOT EXISTS stuinfo(
131     id INT PRIMARY KEY,
132     stuname VARCHAR(20),
133     sex CHAR(1),
134     age INT DEFAULT 18,
135     seat INT UNIQUE,
136     majorid INT,
137     CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
138 
139 );
140 
141 
142 
143 #二、修改表時添加約束
144 
145 /*
146 1、添加列級約束
147 alter table 表名 modify column 欄位名 欄位類型 新約束;
148 
149 2、添加表級約束
150 alter table 表名 add 【constraint 約束名】 約束類型(欄位名) 【外鍵的引用】;
151 
152 
153 */
154 DROP TABLE IF EXISTS stuinfo;
155 CREATE TABLE stuinfo(
156     id INT,
157     stuname VARCHAR(20),
158     gender CHAR(1),
159     seat INT,
160     age INT,
161     majorid INT
162 )
163 DESC stuinfo;
164 #1.添加非空約束
165 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;
166 #2.添加預設約束
167 ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
168 #3.添加主鍵
169 #①列級約束
170 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
171 #②表級約束
172 ALTER TABLE stuinfo ADD PRIMARY KEY(id);
173 
174 #4.添加唯一
175 
176 #①列級約束
177 ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
178 #②表級約束
179 ALTER TABLE stuinfo ADD UNIQUE(seat);
180 
181 
182 #5.添加外鍵
183 ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); 
184 
185 #三、修改表時刪除約束
186 
187 #1.刪除非空約束
188 ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
189 
190 #2.刪除預設約束
191 ALTER TABLE stuinfo MODIFY COLUMN age INT ;
192 
193 #3.刪除主鍵
194 ALTER TABLE stuinfo DROP PRIMARY KEY;
195 
196 #4.刪除唯一
197 ALTER TABLE stuinfo DROP INDEX seat;
198 
199 #5.刪除外鍵
200 ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;
201 
202 SHOW INDEX FROM stuinfo;

 


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

-Advertisement-
Play Games
更多相關文章
  • DQL:查詢表中的記錄 * select * from 表名; 1. 語法: select 欄位列表 from 表名列表 where 條件列表 group by 分組欄位 having 分組之後的條件 order by 排序 limit 分頁限定 2. 基礎查詢 1. 多個欄位的查詢 select ...
  • 原文地址:https://www.citusdata.com/blog/2018/03/06/postgres-planner-and-its-usage-of-statistics/,本文統一將原文中的“planner”譯做“優化器” 如果您對Postgres進行了一些性能優化,則可能使用過EXP ...
  • 本文更新於2019-08-18,使用MySQL 5.7,操作系統為Deepin 15.4。 優化SQL語句的步驟 通過SHOW STATUS瞭解SQL語句的執行情況 操作的計數,是對執行次數進行計數,不論提交還是回滾都會累加。 Com_xxx形式的參數表示每個xxx語句執行的次數,對所有的存儲引擎都 ...
  • 數據表中有一列數據,如圖1所示: 圖1數據表 現在需要將該列數據分成三列。 SQL 代碼如下所示: 1、 select max(case when F1%3=1 then F1 else 0 end) a,max(case when F1%3=2 then F1 else 0 end) b,max( ...
  • DruidDataSource配置相容DBCP,但個別配置的語意有所區別。 配置 預設值 說明 name 配置這個屬性的意義在於,如果存在多個數據源,監控的時候可以通過名字來區分開來。如果沒有配置,將會生成一個名字,格式是:"DataSource-" + System.identityHashCod ...
  • mongodb的安裝非常簡單,官網有提供安裝版和綠色版的下載(外網,速度慢的一批,網速跟不上的同志建議從其他渠道下載),我本地裝的是安裝版的,目錄為預設目錄。再此不細聊如何安裝,直接進入主題,首先是如何啟動。 啟動步驟:方法1:命令行參數方式啟動服務 1.在mongodb安裝目錄下,與bin同級的目 ...
  • 一、InnoDB 體系架構 InnoDB 存儲引擎有多個記憶體塊,可以認為這些記憶體塊組成了一個大的記憶體池,負責如下工作: 維護所有進程/線程需要訪問的多個內部數據結構。 緩存磁碟上的數據,方便快速的讀取,同時對磁碟文件的數據修改之前在這裡進行緩存。 重做日誌(redo log)緩衝。 後臺線程的主要作 ...
  • 1 #標識列 2 /* 3 又稱為自增長列 4 含義:可以不用手動的插入值,系統提供預設的序列值 5 6 7 特點: 8 1、標識列必須和主鍵搭配嗎?不一定,但要求是一個key 9 2、一個表可以有幾個標識列?至多一個! 10 3、標識列的類型只能是數值型 11 4、標識列可以通過 SET auto ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...