MYSQL_表關係

#表關係

#使用唯一約束建立1對1表關係//alter table … modify … unique;

#不添加約一約束則為1對多關係

#首先分別創建兩張表
create table man(
    mid int primary key auto_increment,
    mname varchar(32),
    wid int
    );
insert into man (mid,mname,wid) values(1,'東尼',1);
insert into man (mid,mname,wid) values(2,'加藤',2);
insert into man (mid,mname,wid) values(3,'山形',3);
>>>
man:
+-----+--------+------+
| mid | mname  | wid  |
+-----+--------+------+
|   1 | 東尼   |    1 |
|   2 | 加藤   |    2 |
|   3 | 山形   |    3 |
+-----+--------+------+
create table woman(
    wid int primary key auto_increment,
    wname varchar(32)
    );
insert into woman (wid,wname) values(1,'波多');
insert into woman (wid,wname) values(2,'早川');
insert into woman (wid,wname) values(3,'稚名');
>>>
woman:		   
+-----+--------+                                       
| wid | wname  |
+-----+--------+
|   1 | 波多   |
|   2 | 早川   |
|   3 | 稚名   |
+-----+--------+
#對wid添加唯一約束 
alter table man modify wid int unique;
#此時添加會報錯,因為只能1對1
insert into man (mid,mname,wid) values(4,'玲木',3);
>>>
ERROR 1062 (23000): Duplicate entry '3' for key 'wid

#1對多//基於上述的操作

#刪除唯一約束使表數據變回一對多的關係

比如:
#查看man建表语句详情
show create table man;
>>>
| man   | CREATE TABLE `man` (
  `mid` int(11) NOT NULL AUTO_INCREMENT,
  `mname` varchar(32) DEFAULT NULL,
  `wid` int(11) DEFAULT NULL,
  PRIMARY KEY (`mid`),
  UNIQUE KEY `wid` (`wid`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
#刪除唯一約束//UNIQUE KEY `wid`
#此時進行添加就可以1對多//(多人混戰)誤
insert into man (mid,mname,wid) values(4,'鈴木',3);
#添加成功
>>>Query OK, 1 row affected (0.00 sec)
>>>
+-----+--------+------+
| mid | mname  | wid  |
+-----+--------+------+
|   1 | 東尼   |    1 |
|   2 | 加藤   |    2 |
|   3 | 山形   |    3 |-----稚名
|   4 | 鈴木   |    3 |-----稚名
+-----+--------+------+

#多對多的表關係//基於上述操作

#在這邊我先把man表中的wid給刪了
>>>
man:                woman:
+-----+--------+    +-----+--------+             
| mid | mname  |	| wid | wname  |
+-----+--------+	+-----+--------+
|   1 | 東尼   |	   |   1 | 波多   |
|   2 | 加藤   |	   |   2 | 早川   |
|   3 | 山形   |	   |   3 | 稚名   |
|   4 | 鈴木   |	   +-----+--------+
+-----+--------+
#建立一個集合表,假設演員彼此間合作過的對象的名單
create table tokyo(
     mid int,
     wid int
     );
insert into tokyo (mid,wid) values (1,1);
insert into tokyo (mid,wid) values (1,2);
insert into tokyo (mid,wid) values (2,2);
insert into tokyo (mid,wid) values (2,3);
insert into tokyo (mid,wid) values (3,2);
insert into tokyo (mid,wid) values (4,1);
insert into tokyo (mid,wid) values (4,3);
>>>
+------+------+
| mid  | wid  |
+------+------+
|    1 |    1 |
|    1 |    2 |
|    2 |    2 |
|    2 |    3 |
|    3 |    2 |
|    4 |    1 |
|    4 |    3 |
+------+------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值