mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作
1.外鍵: 用來建立兩張表之間的關系
- 一對多
- 多對多
- 一對一
研究表與表之間的關系:
1.定義一張 員工部門表
id, name, gender, dep_name, dep_desc
- 將所有數據存放在一張表中的弊端:
1.結構不清晰 ---> 不致命
2.浪費空間 ---> 不致命
3.可擴展性極差 ---> 不可忽視的弊端
- 類似于將所有python代碼存放在一個py文件中,強耦合到一起了----> 解耦合 ----> 拆分表
- 拆分表解決以上問題.
- 需要給兩張表之間,建立一種強有力的關系, 使用 “外鍵”
- !!!!! ****** 如何確認表與表之間的關系是 (一對多、多對多、一對一)
- 注意: 要確立兩張表之間的關系,必須站在兩個位置去思考:
- 站在員工表的位置: 多個員工能否對應一個部門? 能!!!
- 員工與部門: 多 對 一
- 員工表單向 多 對 一 部門表
- 站在部門表的位置: 多個部門能夠對應一個員工? 不能!!!
總結: 凡是單向 多 對 一 的表關系,稱之為 一對多 的外鍵關系。
- 外鍵: 語法: foreign key(當前表中建立關系的外鍵字段) references 被關聯表名(id)
- 一對多
# 創建兩張表
1.必須先建立被關聯表,再建立關聯表
# 被關聯表:
dep:
create table dep(
id int primary key auto_increment,
dep_name varchar(16),
dep_desc varchar(255)
);
# 關聯表:
emp:
create table emp(
id int primary key auto_increment,
name varchar(16),
age int,
gender enum('male', 'female', 'others') default 'male',
dep_id int not null,
foreign key(dep_id) references dep(id)
);
注:KEY中MUL代表外鍵
# 插入數據:
- 1.必須先插入被關聯表(dep)的數據,再插入關聯表(emp)的數據。
# dep:
insert into dep(dep_name, dep_desc) values('nb_外交部', '國際形象大使部門'),
('sb_教學部', '造程序員部門!!!!'),
('技術部', '技術有限部門');
# emp:
insert into emp(name, age, gender, dep_id)
values('tank', 17, 'male', 1),
('jason', 70, 'male', 2),
('sean', 50, 'male', 2),
('egon', 88, 'male', 2),
('owen', 95, 'female', 3);
# 報錯,
insert into emp(name, age, gender, dep_id) values('大餅', 100, 'others', 999);
-級聯更新與級聯刪除(把關聯數據一起變更)
- on update cascade
- on delete cascade
-創建表
#被關聯表:
dep2:
create table dep2(
id int primary key auto_increment,
dep_name varchar(16),
dep_desc varchar(255)
);
#關聯表:
emp2:
create table emp2(
id int primary key auto_increment,
name varchar(16),
age int,
gender enum('male','female','others') default 'male',
dep_id int not null,
foreign key(dep_id) references dep2(id)
on update cascade
on delete cascade
);
- 插入數據
#dep:
insert into dep2(dep_name,dep_desc)values('nb_外交部','國際形象大使部門'),
('sb_教學部','造程序員部門!!!!'),('技術部','技術有限部門');
#emp:
insert into emp2(name,age,gender,dep_id)
values('tank',17,'male',1),
('jason',70,'male',2),
('sean',50,'male',2),
('egon',88,'male',2),
('owen',95,'female',3);
#報錯
insert into emp(name,age,gender,dep_id)values('大餅',100,'others',999);
- 更新數據或刪除數據
-更新記錄
update dep2 set id=200 where id=1;
-刪除記錄
delete from dep2 where id=200;
因為級聯,關聯數據一起變更為200
注意:mysql中沒有多對一,只有一對多
- 多對多
也必須站在兩張表的位置去思考;
- 錯誤示范:
#- 創建book表
create table book(
id int primary key auto_increment,
title varchar(20),
price int,
book_content varchar(255),
author_id int,
foreign key(author_id) references author(id)
on update cascade
on delete cascade
);
#- 創建author表
create table author(
id int primary key auto_increment,
name varchar(16),
age int,
book_id int,
foreign key(book_id) references book(id)
on update cascade
on delete cascade
);
- 問題: 無法知道哪張表是被關聯表
- 利用第三張表,為兩張表建立“多對多外鍵關系”。
#-book:
create table book(
id int primary key auto_increment,
title varchar(20),
price int,
book_content varchar(255)
);
#-auther:
create table author(
id int primary key auto_increment,
name varchar(16),
age int
);
#-book2author:
create table book2author(
id int primary key auto_increment,
book_id int,
author_id int,
foreign key(book_id) references book(id)
on update cascade
on delete cascade,
foreign key(author_id) references author(id)
on update cascade
on delete cascade
);
- 插入數據
#- book
insert into book(title, price, book_content) values
('金瓶mei', 199, '講述朦朧時光的小故事'),
('python從入門到斷氣', 2000, '學習如何一夜禿頭'),
('三體', 200, '跟著大佬進入宇宙奇幻世界')
;
- author
insert into author(name, age) values
('egon', 68),
('jason', 88);
- book2author:
insert into book2author(book_id, author_id) values
(1, 1),
(1, 2),
(2, 2),
(3, 1);
# 報錯, 插入的數據,book_id, author_id必須存在
insert into book2author(book_id,author_id) values(4, 4);
# 更新或刪除
#更新
update book set price =666 where id =1;
update book set id=4 where id=1;
#刪除
delete from book where id=4; (會刪除關聯表內容)
- 一對一:
- user_info:
id, name, age, gender, hobby, id_card
- user:
id , name, age, detail_id(外鍵)
- detail:
id, gender, hobby, id_card
user與detail表建立了 一對一的外鍵 關系。
foreign key 應該建在 使用頻率較高的一方。
-創建表
#被關聯表
create table customer(
id int primary key auto_increment,
name varchar(16),
media varchar(32)
);
#關聯表
create table student(
id int primary key auto_increment,
addr varchar(255),
phone_char(11),
id_card char(18),
# 外鍵必須設置成唯一的
customer_id int unique,
forign key(customer_id) references customer(id)
on update cascade
on delete cascade
);
- 插入數據
insert into customer(name,media) values
('hcy','facebook'),
('zsb1','ig'),
('zsb2','vk'),
('hb','探探');
insert into student(addr,phone,id_card,customer_id) values
('上海', '', '', 1),
('北京', '', '', 2);
# 報錯,一對一,關系必須 一一對應
insert into student(addr, phone, id_card, customer_id) values ('上海', '', '', 1);
- 插入數據:
insert into
修改表的操作
- 語法: 注意: mysql 關鍵字不區分大小寫
1. 修改表名
ALTER TABLE 表名 RENAME 新表名;
2. 增加字段
ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…],ADD 字段名 數據類型 [完整性約束條件…]; # 添加到最后一列
ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] FIRST; # 添加到第一列
ALTER TABLE 表名 ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名; # 添加到某一列之后
3. 刪除字段
ALTER TABLE 表名 DROP 字段名;
4. 修改字段
ALTER TABLE 表名 MODIFY 字段名 數據類型 [完整性約束條件…]; # 修改數據類型
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 舊數據類型 [完整性約束條件…]; # 修改字段名,保留字段類型
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…]; # 修改字段名與字段類型
- 復制表的操作:
復制表結構+記錄 (key不會復制: 主鍵、外鍵和索引)
mysql> create table new_service select * from service;
只復制表結構
# 將select * from service where 1=2; ---> 不要真實數據,需要表結構
mysql> create table new_customer select * from customer where 1=2;
MySQL的外鍵,修改表,基本數據類型,表級別操作,其他(條件,通配符,分頁,排序,分組,聯合,連表操作)
MySQL的外鍵,修改表,基本數據類型,表級別操作,其他(條件,通配符,分頁,排序,分組,聯合,連表操作): a.創建2張表 create table userinfo(nid int not nul ...
第二百八十節,MySQL數據庫-外鍵鏈表之一對多,多對多
MySQL數據庫-外鍵鏈表之一對多,多對多 外鍵鏈表之一對多 外鍵鏈表:就是a表通過外鍵連接b表的主鍵,建立鏈表關系,需要注意的是a表外鍵字段類型,必須與要關聯的b表的主鍵字段類型一致,否則無法創建索 ...
MySQL數據庫(4)_MySQL數據庫外鍵約束、表查詢
一.外鍵約束 創建外鍵 --- 每一個班主任會對應多個學生 , 而每個學生只能對應一個班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...
MySQL數據庫--外鍵約束及外鍵使用
什么是主鍵.外鍵關系型數據庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵. 比如: 學生表(學號,姓名,性別,班級) 其中每個學生的學號是唯 ...
mysql數據庫外鍵、主鍵詳解
一.什么是主鍵.外鍵: 關系型數據庫中的一條記錄中有若干個屬性,若其中某一個屬性組(注意是組)能唯一標識一條記錄,該屬性組就可以成為一個主鍵?比如??學生表(學號,姓名,性別,班級)?其中每個學生的學 ...
Database學習 - mysql 數據庫 外鍵
外鍵 外鍵約束子表的含義:如果在父表中趙達不到候選鍵,則不允許在子表上進行insert/update 外鍵預約對父表的含義:在父表上進行update/delete以更新或刪除子表中有一條或多條對應匹配 ...
MySQL數據庫-外鍵鏈表之一對多,多對多
外鍵鏈表之一對多 外鍵鏈表:就是a表通過外鍵連接b表的主鍵,建立鏈表關系,需要注意的是a表外鍵字段類型,必須與要關聯的b表的主鍵字段類型一致,否則無法創建索引 一對多:就是b表的某一個字段值對應a表外 ...
(4)MySQL的外鍵(不同表之間的數據關聯)
問題:下列這張表中部門等列名下輸入的數據沒有約束,那么可以隨便填寫符合規則的數據但是不符合實際需求的值,這樣就造成了不符合規則的數據在表中存在,外鍵就是為了解決這個問題,管理員可以在另一張表中設置好符 ...
黑馬MySQL數據庫學習day03 級聯 多表查詢 連接和子查詢 表約束
/* 存在外鍵的表 刪表限制: 1.先刪除從表,再刪除主表.(不能直接刪除主表,主表被從表引用,盡管實際可能還沒有記錄引用) 建表限制: 1.必須先建主表,再建從表(沒有主表,從表無法建立外鍵關系) ...
隨機推薦
swift 定位
iOS 8 及以上需要在info.plist文件中添加下面兩個屬性 NSLocationWhenInUseUsageDescription 使用應用期間 NSLocationAlwaysUsageDe ...
poj 1830 開關問題
開關問題 題意:給n(0 < n < 29)開關的初始和最終狀態(01表示),以及開關之間的關聯關系(關聯關系是單向的輸入a b表示a->b),問有幾種方式得到最終的狀態.否則輸出字 ...
Html5的<;button>;標簽
1.標簽是雙標簽,其內可添加文字,圖片等復雜的樣式. ?2.不僅可以在表單中使用,還可以在其他塊元素和內聯元素中使用. 3.一般在input標簽內添加name屬性,否則提交后不顯示.
win10關不了機解決辦法以及win10怎么禁止開機啟動項
1.win10關不了機解決辦法:https://zhidao.baidu.com/question/693962749213927924.html 2.win10怎么禁止開機啟動項:https://j ...
Java的常用命令javac與java
javac 可以使用javac -h來查看常用的命令: -> ~ # javac -help 用法: javac 其中, ...
Linux使用筆記
1:Ubuntu系統獲取超級權限: 在終端輸入:sudo passwd,重置uinx密碼.然后輸入 su ,輸入密碼,即可進入root權限. 2:更改文件屬性 Linux文件的基本權限有九個,分別是o ...
case when 多個條件 以及case when 權重排序
1. case when 多個條件 語法: SELECT nickname,user_name,CASE WHEN user_rank = '5' THEN '經銷商' WHEN user_rank ...
mxnet數據操作
# coding: utf-8 # In[2]: from mxnet import nd # In[3]: x = nd.arange(12) x # In[4]: x.shape,x.size # ...
騰訊Web前端開發框架JX(Javascript eXtension tools)
轉自:Web前端開發-Web前端工程師???騰訊Web前端開發框架JX(Javascript eXtension tools) JX – Javascript eXtension tools 一個類似 ...
洛谷P4762 [CERC2014]Virus synthesis(回文自動機+dp)
傳送門 回文自動機的好題啊 先建一個回文自動機,然后記$dp[i]$表示轉移到$i$節點代表的回文串的最少的需要次數 首先肯定2操作越多越好,經過2操作之后的串必定是一個回文串,所以最后的答案肯定是由 ...
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的mysql修改级联表数据_MySQL数据库 外键,级联, 修改表的操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么快速搜索服务器里的文件,使用 Eve
- 下一篇: linux date fmt,date_