MySQL多表&使用JDBC完成分类表CRUD的操作

外键

  

  现在有两张表“分类表”和“商品表”,为了表明商品属于哪个 类别,通常情况下,我们将在商品上添加一列,用来存放分类的cid信息,此列成为外键

  

  此时,分类表 category 称作主表,cid 成为主键。商品表 products 成为从表,category_id 成为外键。

  通过主表和从表的外键描述主外键的关系,呈现的就是一对多的关系。

外键特点

  1. 从表外键的值是对主键的引用。

  2. 从表外键类型必须与主表主键类型一致。

声明外键约束

  语法:

alter table 从表 add[constraint] [外键名称] foreign key (从表外键在字段名)references 主表(主表的主键);

[外键名称] 用于删除外键约束的,一般建议 “ _fk ”结尾。

alter table 从表 drop foreign key 外键名称 

实际操作

创建数据库

创建分类表

1.分类表
create table category(
    cid varchar(32) primary key,
    cname varchar(100)
);

创建商品表

2.商品表
create table product(
    pid varchar(32) primary key,
    pname varchar(40),
    price double,
    category_id varchar(32)
);

设置编码格式

set name gbk;

添加点数据

insert into category(cid,cname) values(‘c001‘,‘家电‘);
insert into category(cid,cname) values(‘c002‘,‘服饰‘);
insert into category(cid,cname) values(‘c003‘,‘化妆品‘);

insert into product(pid,pname,price,category_id) values(‘p001‘,‘联想‘,‘5000‘,‘c001‘);
insert into product(pid,pname,price,category_id) values(‘p002‘,‘海尔‘,‘5000‘,‘c001‘);
insert into product(pid,pname,price,category_id) values(‘p003‘,‘雷神‘,‘5000‘,‘c001‘);

insert into product(pid,pname,price,category_id) values(‘p004‘,‘JACK JONES‘,‘800‘,‘c002‘);
insert into product(pid,pname,price,category_id) values(‘p005‘,‘真维斯‘,‘200‘,‘c002‘);
insert into product(pid,pname,price,category_id) values(‘p006‘,‘花花公子‘,‘440‘,‘c002‘);
insert into product(pid,pname,price,category_id) values(‘p007‘,‘劲霸‘,‘2000‘,‘c002‘);

insert into product(pid,pname,price,category_id) values(‘p008‘,‘香奈儿‘,‘800‘,‘c003‘);
insert into product(pid,pname,price,category_id) values(‘p009‘,‘相宜本草‘,‘200‘,‘c003‘);

最后一列 category_id 列在创建表的时候自己定义的,如果没有,则可以使用一下命令添加一列。

alter table product add category_id

链接两张表

alter table product add foreign key(category_id) references category(cid);

两张表已经关联,主表有外键约束。不能轻易删除主表数据,因为从表有他的记录。

要想解除关系,先删除从表对他有关系的数据删除,再删除主表数据。

使用外键的目的

  保证数据的完整性。

注意事项

  从表外键不能添加主表中不存在的记录。

  主表不能删除从表中已经引用的记录。

表与表之间的关系

  表语表之间的关系,说的就是表与表数据之间的关系。

一对多的关系

  常见的实例:客户和订单,分类和商品,部门和员工。

  一对多建表原则:在从表(多方)创建一个字段,字段作为外键指向主表的主键。

alter table 从表 add [constraint][外键名称] foreign key(从表外键在字段名) references 主表(主表的主键);

多对多的关系

  常见的实例:学生和课程,商品和订单,演员和角色。

  多对多关系建立表原则:需要创建第三张表,中间表中至少两个字段,这两个字段分别作为外键指向各自一方的主键。

  

建立关系

alter table stu_course add foreign key(sno)  references stu(sid);
alter table stu_course add foreign key(sno)  references course(cid);

一对一关系(了解)

  在实际开发中应用不多,因为一对一可以创建成一张表。

  两种建表原则:

    外键唯一:主表的主键和从简的外键唯一,形成主外键关系,外键唯一 unique。

    外键是主键:主表的主键和从表的主键,形成主外键关系。

  

多表查询

  

原文地址:https://www.cnblogs.com/wjw1014/p/10851218.html

时间: 2024-11-09 03:49:09

MySQL多表&使用JDBC完成分类表CRUD的操作的相关文章

MySQL技巧(二)——无限级分类表设计

无限级分类表的设计(掌握'自身连接') 类似图书这种,会有很多种分类,而且在现实生活中这种分类会无限的往下分,所以不可能每有一个分类就创建一个分类表.应该使用下面这种语句 DROP TABLE IF EXISTS tdb_goods_types; CREATE TABLE tdb_goods_types( type_id SMALLINT PRIMARY KEY AUTO_INCREMENT COMMENT '分类ID', type_name VARCHAR(50) COMMENT '分类名称'

mysql 如何在访问某张数据表按照某个字段分类输出

也许大家有时候会遇到需要将把数据库中的某张表的数据按照该表的某个字段分类输出,比如一张数据表area如下 我们需要将里面的area按照serialize字段进行分类输出,比如这种形式: areas          serialize 阿蓝色,艾沙云      A 重庆森林,传承家园  C 红军楼小区,海员新村 H ......... 要以这种形式放映出来,于是可以这样做,使用mysql中的group_concat() .group by实现, select serialize,group_co

MySQL基础入门学习【9】无限级分类表设计

比如: 图书/小说.文学.../四大名著.戏曲.../... 理论上可以设计很多张表: 但是随着分类逐步增多,这些表的数目不可能无限扩展: 所以对于无限级分类表一般我们采用如下形式(通过自身的连接来实现的): 这个例子中我们至少设计三个字段: 分类的id.分类的名称.父类的id. 插入记录: INSERT tdb_goods_types(type_name,parent_id) VALUES('家用电器',DEFAULT); INSERT tdb_goods_types(type_name,pa

MYSQL无限级分类表设计及自我连接

我们有这样一个需求: 做一个城市联动,比如说贵州省,省下面有众多市,市下面有众多区县,区县下面有众多镇,如果用多张表来存储,必然是能够简单的实现联动效果,但是多表的联合查询必然会影响到一些效率,此时可以考虑 用一张表来实现. 还有当我们要分的级数是不确定的,或者是很多的,那么建立多张表也是不合理的设计. 如何用一张表来存储呢? 该表的建立代码如下: 1 create table city(id smallint unsigned auto_increment primary key, 2 cit

重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库与分表等.这篇文章主要讲述数据库分库与分表 (1)业务拆分 在?大型网站应用之海量数据和高并发解决方案总结一二?一篇文章中也具体讲述了为什么要对业务进行拆分. 业务起步初始,为了加快应用上线和快速迭代,很多应用都采用集中式的架构.随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越

MySQL多表查询之外键、表连接、子查询、索引

一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两张表:部门表(dept).员工表(emp).Id=Dept_id,而Dept_id就是员工表中的外键:因为员工表中的员工需要知道自己属于哪个部门,就可以通过外键Dep

MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

注:本文转自:http://www.cnblogs.com/smyhvae/p/4042303.html 本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为空,用来保证数据完整性 外键:是另一表的主键, 外键可以有重复的, 可以是空值,用来和其他表建立联系用的.所以说,如果谈到了外键,一定是至少涉及到两张表.例如下面这两张表: 上面有两

MySQL 中的数据库名称、数据表名称、字段名称

如何查询Oracle,Sql Server,MySQL 中的数据库名称.数据表名称.字段名称 分类: Database2012-09-24 22:16 7034人阅读 评论(0) 收藏 举报 数据库sql serveroraclemysqltableobject 目录(?)[+] 在开发项目的时候有个功能需要查看数据库中有哪些表,以及每个表有哪些字段,在网上查看了一下,现在分享给大家. Oracle: 查询数据表(Tables)名称:select Table_Name, Tablespace_N

Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解

一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 2. 解压mycat tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 3. 剪切mycat到/usr/local目录下