日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql如何让表建立连接吗_MySQL 表与表之间建立关系

發(fā)布時間:2023/12/2 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql如何让表建立连接吗_MySQL 表与表之间建立关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

引子:如下圖是一張非常尋常的表格,在以前的工作中實常會制作類似的表格,但是今天的數(shù)據(jù)庫內容,將我之前這種傳統(tǒng)的制表思路上升了一個層次;

今天核心的內容就是怎樣讓表與表之間產生關系,在思考這個問題的時候,我們可以回顧之前學習python時,當一個任務涉及到很多的功能時,我們?yōu)榱?/p>

讓程序的結構更清晰,擴展性更高,我們選擇用函數(shù)>>模塊>>包 的方式將功能層層拆分,最終讓程序結構上升到新的層次,而且極大的降低了代碼的冗

余。再回到這張表,如果說總共就這幾個人,這張表沒什么問題,但是假設我們擁有100w的用戶,此時表中的 def_name,dep_desc就有些冗余了;此外

這種表的形式也非常不利于后期數(shù)據(jù)的取值和修改。

實現(xiàn)思路:把內容多出現(xiàn)重復的字段拎出來制作成具有id的新表,將兩張表建立聯(lián)系。

一對多

第一步 拆分表

第二步 建立關聯(lián)(通過dep_id字段鏈接兩張表)

注意:1.必選要先建被關聯(lián)表;

2.新增數(shù)據(jù)的時候,要先增被關聯(lián)表中的數(shù)據(jù);

create table dep(

id int primary key auto_increment,#id設置為主建,自增

dep_name char(16),

dep_desc char(64) #注意最后一個括號后面一定不要加逗號!

);

create table emp(

id int primary key auto_increment,

name char(16),

gender enum('male','female','others') not null default 'male', #default后面的默認值空格直接書寫即可

dep_id int,

foreign key(dep_id) references dep(id)#外鍵 本表中的dep_id 字段 ,關聯(lián)dep表中的id字段;

);

插入數(shù)據(jù)

2.新增數(shù)據(jù)的時候,要先增被關聯(lián)表中的數(shù)據(jù)

insert into dep(dep_name,dep_desc) values

('外交部','形象代言人'),

('教學部','教書育人'),

('技術部','技術能力有限部門');

insert into emp(name,gender,dep_id) values

('jason','male',1),

('egon','male',2),

('kevin','male',2),

('tank','male',2),

('jerry','female',3);

修改dep_id 數(shù)據(jù)

update emp set dep_id=100 where id=1; #修改dep_id數(shù)據(jù) 結果報錯。

但我們可以選擇先刪除關聯(lián)表中的數(shù)據(jù)后,再更改與其關聯(lián)表emp中的字段。但這

并不是最好的解決辦法

第三步 深度關聯(lián)(修改/刪除同步)on update cascade on delete cascade

create table dep(

id int primary key auto_increment,

dep_name char(16),

dep_desc char(64)

);

create table emp(

id int primary key auto_increment,

name char(16),

gender enum('male','female','others') not null default 'male', #default后面的默認值空格直接書寫即可

dep_id int,

foreign key(dep_id) references dep(id)

on update cascade#同步更新

on delete cascade #同步刪除

);

多對多(第三張表牽線搭橋)

當我們面對的是兩張表互相之間都是多對一的情況,也就是多對多的情況時,就會出現(xiàn)互為外鍵,如果還是安裝上面的方法創(chuàng)建,就會出現(xiàn)無法創(chuàng)建表的情況。此時我們需要第三張表來作為中間人,

為兩張表牽線搭橋,讓它們產生關聯(lián)。

書與作者案例

多對多案例實現(xiàn)

create table book(

id int primary key auto_increment,

title char(16),

price int

);

create table author(

id int primary key auto_increment,

name char(16),

gender char(16)

);

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 #同步刪除

);

插入數(shù)據(jù)

insert into book(title,price) values

('瓶金梅','69.96'),

('圍城','99.99'),

('python全棧開發(fā)','21000');

insert into author(name,gender) values

('jason','male'),

('egon','female'),

('kevin','male');

insert into book2author(book_id,author_id) values

(1,1),

(1,2),

(1,3),

(2,1),

(2,3),

(3,1),

(3,2);

一對一

客戶表和學生表(老男孩的客戶與學生之間,報名之前都是客戶,只有報了名的才能是學生)

#左表的一條記錄唯一對應右表的一條記錄,反之也一樣

create table customer(

id int primary key auto_increment,

name char(20) notnull,

qq char(10) notnull,

phone char(16) notnull

);

create table student(

id int primary key auto_increment,

class_name char(20) notnull,

customer_id int unique,#該字段一定要是唯一的

foreign key(customer_id) references customer(id) #外鍵的字段一定要保證unique

on delete cascade

on update cascade

);

修改表

語法:

1. 修改表名

ALTER TABLE 表名

RENAME 新表名;

2. 增加字段

ALTER TABLE 表名

ADD 字段名? 數(shù)據(jù)類型 [完整性約束條件…],

ADD 字段名? 數(shù)據(jù)類型 [完整性約束條件…];

ALTER TABLE 表名

ADD 字段名? 數(shù)據(jù)類型 [完整性約束條件…]? FIRST;

ALTER TABLE 表名

ADD 字段名? 數(shù)據(jù)類型 [完整性約束條件…]? AFTER 字段名;

3. 刪除字段

ALTER TABLE 表名

DROP 字段名;

4. 修改字段

ALTER TABLE 表名

MODIFY? 字段名 數(shù)據(jù)類型 [完整性約束條件…];

ALTER TABLE 表名

CHANGE 舊字段名 新字段名 舊數(shù)據(jù)類型 [完整性約束條件…];

ALTER TABLE 表名

CHANGE 舊字段名 新字段名 新數(shù)據(jù)類型 [完整性約束條件…];

復制表

# 復制表結構+記錄 (key不會復制: 主鍵、外鍵和索引)

create table new_service select * from service;

# 只復制表結構

select * from service where 1=2;??????? //條件為假,查不到任何記錄

create table new1_service select * from service where 1=2;

create table t4 like employees;

總結

以上是生活随笔為你收集整理的mysql如何让表建立连接吗_MySQL 表与表之间建立关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。