1. 程式人生 > >8.3.7 - mysql 表之間關系

8.3.7 - mysql 表之間關系

如何 efault 操作 warnings 機械工業 -- values primary default

如何找出兩張表之間的關系

分析步驟:
#1、先站在左表的角度去找
是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個字段foreign key 右表一個字段(通常是id)

#2、再站在右表的角度去找
是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的一個字段foreign key 左表一個字段(通常是id)

#3、總結:
#多對一:
如果只有步驟1成立,則是左表多對一右表
如果只有步驟2成立,則是右表多對一左表

#多對多
如果步驟1和2同時成立,則證明這兩張表時一個雙向的多對一,即多對多,需要定義一個這兩張表的關系表來專門存放二者的關系

#一對一:
如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,就是在左表foreign key右表的基礎上,將左表的外鍵字段設置成unique即可

建立表之間的關系

#一對多或稱為多對一
三張表:出版社,作者信息,書

一對多(或多對一):一個出版社可以出版多本書

關聯方式:foreign key
兩張表之間的關系
1. 多對一
   出版社   書(press_id int,foreign key (preess_id) references press(id))
2. 多對多
3. 一對一

例子
#一對多或稱為多對一
三張表:出版社,作者信息,書
一對多(或多對一):一個出版社可以出版多本書
關聯方式:foreign key
=====================多對一=====================
create table press(
id 
int primary key auto_increment, name varchar(20) ); create table book( id int primary key auto_increment, name varchar(20), press_id int not null, foreign key(press_id) references press(id) on delete cascade on update cascade ); insert into press(name) values (機械工業出版社), (人民出版社), (
南京出版社) ; insert into book(name,press_id) values (計算機基礎,1), (python入門,2), (mysql,2), (機械原理,3), (十萬個為什麽,2), (社會科學,3) ; # 操作過程 mysql> create table press( -> id int primary key auto_increment, -> name varchar(20) -> ); Query OK, 0 rows affected (0.03 sec) mysql> mysql> create table book( -> id int primary key auto_increment, -> name varchar(20), -> press_id int not null, -> foreign key(press_id) references press(id) -> on delete cascade -> on update cascade -> ); Query OK, 0 rows affected (0.03 sec) mysql> insert into press(name) values -> (機械工業出版社), -> (人民出版社), -> (南京出版社) -> ; Query OK, 3 rows affected (0.00 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> mysql> insert into book(name,press_id) values -> (計算機基礎,1), -> (python入門,2), -> (mysql,2), -> (機械原理,3), -> (十萬個為什麽,2), -> (社會科學,3) -> ; Query OK, 6 rows affected (0.01 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> desc press; +-------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> select * from book; +----+--------------------+----------+ | id | name | press_id | +----+--------------------+----------+ | 1 | 計算機基礎 | 1 | | 2 | python入門 | 2 | | 3 | mysql | 2 | | 4 | 機械原理 | 3 | | 5 | 十萬個為什麽 | 2 | | 6 | 社會科學 | 3 | +----+--------------------+----------+ 6 rows in set (0.00 sec) mysql> select * from press; +----+-----------------------+ | id | name | +----+-----------------------+ | 1 | 機械工業出版社 | | 2 | 人民出版社 | | 3 | 南京出版社 | +----+-----------------------+ 3 rows in set (0.00 sec)

8.3.7 - mysql 表之間關系