MySQL數(shù)據(jù)庫之約束簡析
概述
約束是作用于表中字段上的規(guī)則,用于限制存儲在表中的數(shù)據(jù)。保證數(shù)據(jù)庫中數(shù)據(jù)的正確、有效性和完整性。
分類:
常見約束操作
現(xiàn)在我們有一個建表需求,里面包含一些約束。
create table user( id int primary key auto_increment comment '主鍵', name varchar(10) not null unique comment '姓名', age int check ( age >0 && age <= 110 ) comment '年齡', status char(1) default '1' comment '狀態(tài)', gender char(1) comment '性別' ) comment '用戶表';
注意,check語句只有MySQL18以上的版本才有。新的數(shù)據(jù)表建立完成,我們現(xiàn)在該輸入數(shù)據(jù)了。
這里要說的是我們之后還是使用命令語句操作數(shù)據(jù)庫而不是借用像Navicat等工具操作數(shù)據(jù)庫。
因為我們之后要學習Java web的開發(fā),里面的JDBC需要用java語言操作數(shù)據(jù)庫,這時你就要輸入sql命令了。
--還記得怎么插入數(shù)據(jù)嗎 insert into user(name,age,status,gender) values ('Tom1',19,'1','男'),('Tom2',25,'0','男');
這時查看我的表,數(shù)據(jù)已經導入了,這時我們看id的變化,我們并沒有輸入id相關數(shù)據(jù),但是它自動給我們按照輸入順序排好序了,而且從1開始,這就是我們設置的約束語句語句起作用了。
這里我們口頭測試一下其他的約束語句:
1,如果輸入相同的數(shù)據(jù),會報錯。
2,輸入不符合規(guī)定年齡的數(shù)據(jù)會報錯。
3,雖然數(shù)據(jù)沒有成功寫入,但當你寫進去下一個合規(guī)數(shù)據(jù)時,id會變成4,這是因為輸入失敗但系統(tǒng)依然申請了一個id值。
外鍵約束
概念
外鍵讓兩個表的數(shù)據(jù)建立聯(lián)系,從而保證數(shù)據(jù)的一致性和完整性。
案例
假如員工表的其中一列數(shù)據(jù)是部門id,可知一列數(shù)據(jù)只存儲的id;另一張部門表有兩列數(shù)據(jù)是id,和部門名稱,那么我們邏輯上把部門id和id聯(lián)系起來,并把部門的表稱為父表,而員工表為子表。
操作
建立上述兩個表并插入數(shù)據(jù):
create table dept( id int auto_increment comment 'ID ' primary key, name varchar(50) not null comment '部門名稱' )comment '部門表'; INSERT IMTO dept (id,name) VALOES (1,'研發(fā)部'),(2,'市場部'),(3,'財務部'),(4,'銷售部'),(5,'總經辦');
create table emp ( id int auto_increment comment 'ID' primary key, name varchar(50) not null comment '姓名', age int comment '年齡', job varchar(20) comment '職位', salary int comment '薪資', entrydate date comment '入職時間', managerid int comment '直屬領導ID', dept_id int comment '部門ID' )comment '員工表'; INSERT INTO emp (id,name,age,job,salary,entrydate,managerid,dept_id) VALUES (1,'金庸',66,'總裁',20000,'2000-01-01',null,5),(2,'張無忌',20,'項目經理',12500, '2005-12-05',1,1);
廢了老大勁還是建完表了?,F(xiàn)在我們設置外鍵,將這兩個表建立數(shù)據(jù)連接。
--語法: ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名) REFERENCES 主表 (主表列名);
我們怎么確定兩個表的數(shù)據(jù)已經相連了?我們試試刪除附表里第一行數(shù)據(jù),結果報錯了:
這就表面連接成功了。
到此這篇關于MySQL數(shù)據(jù)庫之約束簡析的文章就介紹到這了,更多相關MySQL約束內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
windows 安裝解壓版 mysql5.7.28 winx64的詳細教程
這篇文章主要介紹了windows 安裝解壓版 mysql5.7.28 winx64的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12前端傳參數(shù)進行Mybatis調用mysql存儲過程執(zhí)行返回值詳解
這篇文章主要介紹了前端傳參數(shù)進行Mybatis調用mysql存儲過程執(zhí)行返回值詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08MySQL查詢字段為NULL、不為NULL的數(shù)據(jù)問題
介紹了MySQL查詢字段為NULL和不為NULL的數(shù)據(jù)時需要注意的幾點,包括查詢語句的編寫和NULL與其他字符的操作,通過實際操作對比,指出使用IS NOT NULL可以正確查詢到非NULL字段的數(shù)據(jù)2025-02-02Mysql中substring_index函數(shù)實現(xiàn)字符分割一行變多行
在MySQL中,字符串分割是一個常見的操作,本文主要介紹了Mysql中substring_index函數(shù)實現(xiàn)字符分割一行變多行,具有一定的參考價值,感興趣的可以了解一下2023-12-12mysql5.7大量sleep進程常規(guī)處理方式及配置示例
這篇文章主要給大家介紹了關于mysql5.7大量sleep進程常規(guī)處理方式及配置的相關資料,sleep連接過多會嚴重消耗mysql服務器資源(主要是cpu,內存),并可能導致mysql崩潰,需要的朋友可以參考下2023-08-08一文帶你永久擺脫Mysql時區(qū)錯誤問題(idea數(shù)據(jù)庫可視化插件配置)
在MySQL啟動時會檢查當前系統(tǒng)的時區(qū)并根據(jù)系統(tǒng)時區(qū)設置全局參數(shù)system_time_zone的值,下面這篇文章主要給大家介紹了關于如何永久擺脫Mysql時區(qū)錯誤問題(idea數(shù)據(jù)庫可視化插件配置)的相關資料,需要的朋友可以參考下2022-08-08Ubuntu Server 16.04下mysql8.0安裝配置圖文教程
這篇文章主要為大家詳細介紹了Ubuntu Server 16.04下mysql8.0安裝配置圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05