美文网首页
mysql 外键操作

mysql 外键操作

作者: FangHao | 来源:发表于2017-02-15 22:32 被阅读0次

创建 areas 地区表

脚本文件 areas.sql

-- 创建表  
create database pyhton3;
use python3;
create table areas(
id int primary key,
title char(32) default '',
pid int
);

-- 导入数据
source ~/Desktop/areas.sql;
-- 查看总数
select count(*) from areas;
-- 添加外键
alter table areas add foreign key(pid) references areas(id);

自关联表

查询 各个省份 的市地州数量的示例

select prov.title, count(*) as count
from areas as city
inner join areas as prov on city.pid=prov.id
inner join areas as dist on dist.pid=city.id
where prov.pid is null
group by prov.title;

此处把一个表 当成了三个表:
第一个表 prov 表的pid字段是空, 说明 prov表的所有数据都是省份. (省份没有pid)
第二个表 city 表的pid和prov的id 对应, 所以 city 表里的数据都是 pid指向 prov省份 的市级数据.
第三个表 dist 表的pid和city的id 对应, 所以 dist 表里的数据都是 pid指向 city市级 的地级市数据.

以上, 按照 pid的对应关系, 把一个表的 数据分开, 成为 彼此不重复的三个表, 便于查询结果.

查看

-- 查看数据库结构
show create database python3;
-- 查看表结构
desc areas;
-- 查看创建表代码
show create table areas;
| areas | CREATE TABLE `areas` (
  `id` int(11) NOT NULL,
  `title` char(32) DEFAULT '',
  `pid` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`),
  CONSTRAINT `areas_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `areas` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

constraint xxx: 表示创建的外键名, 可以在创建时指定, 也可以用自动生成的

注意
一个数据库的外键名不能一样, 要确保外键名的唯一!!

-- 创建指定外键名 con_self 的外键
create table areas1(
id int primary key,
title char(32) default '',
pid int,
constraint con_self foreign key(pid) references areas1(id)
);

添加外键

create table areas2(
id int primary key,
title char(32) default '',
pid int
);
-- 添加外键
alter table areas2 add constraint con_self_1 foreign key(pid) references areas2(id);

删除外键

alter table areas2 drop foreign key con_self_1;

技巧

在大量导入数据的时候, 特别是 自关联表, 由于彼此关联, 插入的先后顺序不同可能导致 外键冲突导入失败, 可以先删除外键, 待数据导入后在插入外键 约束.
转载 卢景浩

相关文章

  • mysql 外键操作

    创建 areas 地区表 脚本文件 areas.sql 自关联表 查询 各个省份 的市地州数量的示例 此处把一个表...

  • mysql外键操作

    批量生成删除外键的语句:SELECT CONCAT('ALTER TABLE ',TABLE_SCHEMA,'.'...

  • MySQL数据库学习day5

    回顾 连接查询:多张表连接到一起,不管记录数如何,字段数一定会增加 PHP操作mysql: 外键 外键:forei...

  • 数据库基础

    持久化操作:保存到数据库 主键:用户表里的id,唯一标识 外键:另一个表里引用的用户id,外键 下载mysql 配...

  • 09_MySQL多表 & JDBC

    MySQL多表 外键 主表主键和从表外键 ==(从表的外键引用主表的主键)== 从表的外键类型必须和主表的主键类型...

  • MySQL级联操作

    MySQL级联操作 外键约束对子表的含义: 如果在父表中找不到候选键,则不允许在子表上进行insert/updat...

  • Mysql外键

    只有InnoDB存储引擎才支持外键 有两张表: 创建外键 方式1: 如上面创建表的语句: 方式2: 删除外键

  • mysql外键

    为已经添加好的数据表添加外键: 语法:alter table 表名 add constraint FK_ID fo...

  • MySQL - 外键

    一、定义 外键约束(FOREIGN KEY Constraint) ,用来维护从表(Child Table)和主表...

  • MySQL实践笔记

    关于外键 子表: 父表: 外键 支持外键只能使用 InnoDB 存储引擎。 级联操作问题 ON UPDATE CA...

网友评论

      本文标题:mysql 外键操作

      本文链接:https://www.haomeiwen.com/subject/eekcwttx.html