【mysql】約束、外鍵約束、多對多關系

1、約束

DROP TABLE IF EXISTS emp;-- 員工表
CREATE TABLE emp (id INT PRIMARY KEY auto_increment, -- 員工id,主鍵且自增長ename VARCHAR(50) NOT NULL UNIQUE, -- 員工姓名,非空并且唯一joindate DATE NOT NULL, -- 入職日期,非空salary DOUBLE(7, 2) NULL, -- 工資,非空bonus DOUBLE(7, 2) DEFAULT 0 -- 獎金,如果沒有獎金默認為0
);INSERT INTO emp(id, ename, joindate, salary, bonus) values (1, '張三', '1999-11-11', 8800, 5000);show databases;show tables;select * from emp;-- 演示主鍵約束:非空且唯一
INSERT INTO emp(id, ename, joindate, salary, bonus) values (null, '張三', '1999-11-11', 8800, 5000);INSERT INTO emp(id, ename, joindate, salary, bonus) values (1, '張三', '1999-11-11', 8800, 5000);INSERT INTO emp(id, ename, joindate, salary, bonus) values (2, '李四', '1999-11-11', 8800, 5000);-- 演示	非空約束
INSERT INTO emp(id, ename, joindate, salary, bonus) values (3, null, '1999-11-11', 8800, 5000);-- 演示	非唯一約束
select * from emp;
INSERT INTO emp(id, ename, joindate, salary, bonus) values (3, '李四', '1999-11-11', 8800, 5000);-- 演示	默認約束
INSERT INTO emp(id, ename, joindate, salary) values (3, '王五', '1999-11-11', 8800);-- 演示	主鍵自增
INSERT INTO emp(ename, joindate, salary) values ('張三', '1999-11-11', 8800);
INSERT INTO emp(ename, joindate, salary) values ('李四', '1999-11-11', 8800);
INSERT INTO emp(ename, joindate, salary) values ('王五', '1999-11-11', 8800);
INSERT INTO emp(ename, joindate, salary) values ('趙六', '1999-11-11', 8800);

2、外鍵約束

DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS emp;-- 部門表
CREATE TABLE dept (id int primary key auto_increment,dep_name varchar(20),addr varchar(20)
);-- 員工表
CREATE TABLE emp (id int primary key auto_increment,name varchar(20),age int,dep_id int,-- 添加外鍵 dep_id, 關聯 dept 表的id主鍵CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)-- CONSTRAINT fk_emp_dept FOREIGN KEY (dep_id) REFERENCES dept(id)
);-- 添加 2 個部門
insert into dept (dep_name, addr) values
('研發部', '廣州'), ('銷售部', '深圳');-- 添加員工, dep_id 表示員工所在的部門
insert into emp (name, age, dep_id) values
('張三', 20, 1),
('李四', 20, 1),
('王五', 20, 1),
('趙六', 20, 2),
('孫七', 22, 2),
('周八', 18, 2);-- 查詢
select * from emp;
select * from dept;-- 直接刪不掉
delete from dept WHERE id = 1;-- 需要先刪除對外鍵的依賴才能刪除
delete from emp WHERE dep_id = 1;
delete from dept WHERE id = 1;-- 刪除外鍵
alter table emp drop foreign key fk_emp_dept;desc emp;-- 創建完成表后, 添加外鍵
alter table emp add constraint fk_emp_dept foreign key(dep_id) REFERENCES dept(id);

3、多對多的關系

DROP TABLE IF EXISTS tb_order;
DROP TABLE IF EXISTS tb_goods;-- 訂單表
CREATE TABLE tb_order (id int primary key auto_increment,payment double(10, 2),payment_type TINYINT,status TINYINT
);-- 商品表
CREATE TABLE tb_goods (id int primary key auto_increment,title varchar(100),price double(10, 2)
);-- 訂單商品中間表
CREATE TABLE tb_order_goods (id int primary key auto_increment,order_id int,goods_id int,count int
);-- 建表完后,添加外鍵
alter table tb_order_goods add constraint fk_order_id foreign key(order_id) REFERENCES tb_order(id);
alter table tb_order_goods add constraint fk_goods_id foreign key(goods_id) REFERENCES tb_goods(id);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250013.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250013.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250013.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSM+Netty項目結合思路

最近正忙于搬家,面試,整理團隊開發計劃等工作,所以沒有什么時間登陸個人公眾號,今天上線看到有粉絲想了解下Netty結合通用SSM框架的案例,由于公眾號時間限制,我不能和此粉絲單獨溝通,再此寫一篇…

[6]Windows內核情景分析 --APC

APC:異步過程調用。這是一種常見的技術。前面進程啟動的初始過程就是:主線程在內核構造好運行環境后,從KiThreadStartup開始運行,然后調用PspUserThreadStartup,在該線程的apc隊列中插入一個APC:LdrInitial…

THYMELEAF 如何用TH:IF做條件判斷

TestController 增加一個布爾值數據,并且放在model中便于視圖上獲取 package com.how2java.springboot.web; import java.util.ArrayList; import java.util.Date; import java.util.List;import org.springframework.stereotype.Controller; import org.springfr…

【mysql】多表查詢、左外連接、內連接、練習題

多表查詢 [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-FBdzXkoQ-1659581225088)(C:\Users\L00589~1\AppData\Local\Temp\1659337934641.png)] 左外連接&右外連接 -- 查詢emp表所有數據和對應的部門信息 select * from emp left join dept o…

noi2018

day0 筆試沒啥問題,基本都是100 day1 時間有點緊,念了2h題目,能寫80848,第一題不會可持久化所以只能暴力。第二題感覺沒第三個好做。第三題sa亂搞,隨機串只hash長度小于20的。 最后幾分鐘才改過了所有小樣例&#xff0…

Python自建collections模塊

本篇將學習python的另一個內建模塊collections,更多內容請參考:Python學習指南 collections是Python內建的一個集合模塊,提供了許多有用的集合類。 namedtuple 我們知道tuple可以表示不變集合,例如,一個點的二維左邊就可以表示成:…

Thymeleaf th:include、th:replace使用

最近做到頁面數據展示分頁的功能,由于每個模塊都需要分頁,所以每個頁面都需要將分頁的頁碼選擇內容重復的寫N遍,如下所示: 重復的代碼帶來的就是CtrlC,CtrlV ,于是了解了一下thymeleaf的fragment加載語法以及th:includ…

(OS X) OpenCV架構x86_64的未定義符號:錯誤(OpenCV Undefined symbols for architecture x86_64: error)...

原地址:http://www.it1352.com/474798.html 錯誤提示如下: Undefined symbols for architecture x86_64:"cv::_InputArray::_InputArray(cv::Mat const&)", referenced from:_main in test-41a30e.o"cv::namedWindow(std::__1::basic…

【算法】大根堆

const swap (arr, i, j) > {const tmp arr[i];arr[i] arr[j];arr[j] tmp; } const heapInsert (arr , i) > { // 插入大根堆的插入算法while(arr[i] > arr[Math.floor((i - 1) / 2]) {swap(arr, i, Math.floor((i - 1) / 2);i Math.floor((i - 1) / 2; } } cons…

[CF1082E] Increasing Frequency

Description 給定一個長度為 \(n\) 的數列 \(a\) ,你可以任意選擇一個區間 \([l,r]\) ,并給區間每個數加上一個整數 \(k\) ,求這樣一次操作之后數列中最多有多少個數等于 \(c\)。 \(n,c,a_i\leq 10^5\) Solution 假設當前選擇區間的右端點為 …

Thymeleaf select 使用 和多select 級聯選擇

1.使用select 并且回綁數據; 頁面&#xff1a; 狀態&#xff1a; <select name"status" th:field"*{status}" id"idstatus" class"input-select" th:value"*{status}"> <option value"">--請選擇-…

Switch語句的參數是什么類型的?

在Java5以前&#xff0c;switch(expr)中&#xff0c;exper只能是byte&#xff0c;short&#xff0c;char&#xff0c;int類型。 從Java5開始&#xff0c;java中引入了枚舉類型&#xff0c;即enum類型。 從Java7開始&#xff0c;exper還可以是String類型。 switch關鍵字對于多數…

【LOJ】#2184. 「SDOI2015」星際戰爭

題解 直接二分然后建圖跑網絡流看看是否合法即可 就是源點向每個激光武器連一條二分到的時間激光武器每秒攻擊值的邊 每個激光武器向能攻擊的裝甲連一條邊 每個裝甲向匯點連一條裝甲值的邊 代碼 #include <bits/stdc.h> #define fi first #define se second #define pii …

表達式符號

Thymeleaf對于變量的操作主要有$*#三種方式&#xff1a; 變量表達式&#xff1a; ${…}&#xff0c;是獲取容器上下文變量的值.選擇變量表達式&#xff1a; *{…}&#xff0c;獲取指定的對象中的變量值。如果是單獨的對象&#xff0c;則等價于${}。消息表達式&#xff1a; #{……

Java學習的快速入門:10行代碼學JQuery

生活在快速發展時代的我們&#xff0c;如果不提速可能稍不留神就被時代淘汰了。快節奏的時代成就了快餐&#xff0c;亦成就了速成教育。尤其是身處互聯網行業的我們&#xff0c;更新換代的速度更是迅速&#xff0c;快速掌握一門技術已經成為潮流趨勢。怎樣才能快速入門學習java…

項目管理

項目先后銜接的各個階段的全體被稱為項目管理流程。項目管理流程對于一個項目能否高效的執行起到事半功倍的效果。接下來我會利用36張的ppt&#xff08;當然了這里我只用部分圖片展示要不然就太多圖片了&#xff09;&#xff0c;介紹項目管理的整體流程。 1.項目管理的五大過程…

docker——三劍客之Docker Machine

Docker Machine是Docker官方三劍客項目之一&#xff0c;負責使用Docker的第一步&#xff0c;在多種平臺上快速安裝Docker環境。它支持多種平臺&#xff0c;讓用戶在很短時間內搭建一套Docker主機集群。Machine項目是Docker官方的開源項目&#xff0c;負責實現對Docker主機本身進…

egret:什么是臟矩形

臟矩形是2D圖形性能優化一個重要的概念。Egret2.5開始臟矩形完全可以由引擎自動計算&#xff0c;即大名鼎鼎的"自動臟矩形"。 簡單說臟矩形&#xff0c;就是畫面刷新時&#xff0c;產生變化而需要重繪的舞臺局部區域。 什么叫臟&#xff0c;即什么情況下會弄臟&#…

軟件項目管理(一)

首先軟件項目管理&#xff0c;什么是項目&#xff1f;什么是軟件項目&#xff1f; 項目是唯一的&#xff0c;臨時的&#xff0c;即在一定的時間內完成。 具體定義&#xff1a;項目是為了創造一個唯一的產品或提供一個唯一的服務而進行的臨時性的努力。 項目的特征&#xff1a; …

strace參數

strace參數 strace參數 -c 統計每一系統調用的所執行的時間,次數和出錯的次數等. -d 輸出strace關于標準錯誤的調試信息. -f 跟蹤由fork調用所產生的子進程. -ff 如果提供-o filename,則所有進程的跟蹤結果輸出到相應的filename.pid中,pid是各進程的進程號. -F 嘗試跟蹤vfork調…