一、数据库表结构:

首先,有两个表:

分类表:category

create table category(

cid varchar(32) primary key,

cname varchar(100)

);

商品表:product

create table product(

pid varchar(32) primary key,

pname varchar(40),

price double,

category_id varchar(32)

);

其中:category为主表,"cid"为主键;product为从表,category_id为外键。

外键的特点:

从表外键的值是对主表主键的引用;

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

使用外键的目的:保证数据完整性。

1.表与表之间的关系:

一对多关系:从表(多方)创建一个字段,作为外键指向主表(一方)的主键;

多对多关系:创建第三张表,中间表至少两个字段,这两个字段分别作为外键指向各自的主键;

一对一:外键唯一、外键是主键、笛卡尔积。

2.创建表实现:

添加外键字段:

alter table product add category_id varchar(32);

添加约束:

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

注意:

从表不能添加主表不存在的记录;

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

多对多关系的实现:

首先,有三个表:

商品表:product

create table product(

pid varchar(32) primary key,

pname varchar(40),

price double,

category_id varchar(32)

);

订单表: orders

create table orders(

oid varchar(32) primary key,

totalprice double

);

订单项表:orderitem

此表为建立商品表和订单表的关系而建立

create table orderitem(

oid varchar(50),

pid varchar(50)

);

添加订单表和订单项表的主外键关系:

alter table orderitem add constraint oreritem_orders_fk foreign key(oid) refereneces orders(oid);

添加商品表和订单项表的主外键关系:

alter table product add constraint orderitem_product_fk foreign key(pid) references orders(pid);

二、查询:

两个表:

1.交叉连接:

//基本不会使用,得到的是两个表的笛卡尔乘积

select * from A,B;

2.内连接:

隐式内连接:

select * from A,B where 条件;

显式内连接:

//inner可以省略

select * from A inner join B on 条件;

3.外链接:

左外连接:

//out可以省略

select * from A left out join B on 条件;

右外连接:

select * from A right out join B on 条件;

3.子查询:

例:查询“化妆品”分类上架商品详情:

select * from product where category_id=(select cid from category where name=‘化妆品’);

JDBC相关操作:

JDBCUtils_V3.java:

package com.zl.jdbc;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

import java.util.ResourceBundle;

/**

* 提供获取连接和释放资源的 方法

*

*/

public class JDBCUtils_V3 {

private static String driver;

private static String url;

private static String username;

private static String password;

/**

* 静态代码块加载配置文件信息

*/

static {

try {

// 1.通过当前类获取类加载器

ClassLoader classLoader = JDBCUtils_V3.class.getClassLoader();

// 2.通过类加载器的方法获得一个输入流

InputStream is = classLoader.getResourceAsStream("db.properties");

// 3.创建一个properties对象

Properties props = new Properties();

// 4.加载输入流

props.load(is);

// 5.获取相关参数的值

driver = props.getProperty("driver");

url = props.getProperty("url");

username = props.getProperty("username");

password = props.getProperty("password");

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 获取连接方法

*

* @return

*/

public static Connection getConnection() {

Connection conn = null;

try {

Class.forName(driver);

conn = DriverManager.getConnection(url, username, password);

} catch (Exception e) {

e.printStackTrace();

}

return conn;

}

public static void release(Connection conn, PreparedStatement pstmt, ResultSet rs) {

if (rs != null) {

try {

rs.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (pstmt != null) {

try {

pstmt.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

if (conn != null) {

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

TestUtils.java

package com.zl.jdbc.test;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import org.junit.Test;

import com.zl.jdbc.JDBCUtils_V1;

import com.zl.jdbc.JDBCUtils_V2;

import com.zl.jdbc.JDBCUtils_V3;

/**

* 测试工具类

*

*/

public class TestUtils {

/**

* 根据id更新用户信息方法

*/

@Test

public void testUpdateById() {

Connection conn = null;

PreparedStatement pstmt = null;

try {

// 1.获取连接

conn = JDBCUtils_V3.getConnection();

// 2.编写sql语句

String sql = "update tbl_user set upassword=? where uid=?";

// 3.获取执行sql语句对象

pstmt = conn.prepareStatement(sql);

// 4.设置参数

pstmt.setString(1, "999");

pstmt.setInt(2, 3);

// 5.执行更新操作

int row = pstmt.executeUpdate();

if (row > 0) {

System.out.println("更新成功!");

} else {

System.out.println("更新失败!");

}

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

// 6.释放资源

JDBCUtils_V3.release(conn, pstmt, null);

}

}

/**

* 根据id删除信息方法

*/

@Test

public void testDeleteById() {

Connection conn = null;

PreparedStatement pstmt = null;

try {

// 1.获取连接

conn = JDBCUtils_V3.getConnection();

// 2.编写sql语句

String sql = "delete from tbl_user where uid=?";

// 3.获取执行sql语句对象

pstmt = conn.prepareStatement(sql);

// 4.设置参数

pstmt.setInt(1, 4);

// 5.执行删除操作

int row = pstmt.executeUpdate();

if (row > 0) {

System.out.println("删除成功!");

} else {

System.out.println("删除失败!");

}

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

// 6.释放资源

JDBCUtils_V3.release(conn, pstmt, null);

}

}

/**

* 添加用户信息方法

*/

@Test

public void testAdd() {

Connection conn = null;

PreparedStatement pstmt = null;

try {

// 1.获取连接

conn = JDBCUtils_V2.getConnection();

// 2.编写sql语句

String sql = "insert into tbl_user values(null,?,?)";

// 3.获取执行sql语句对象

pstmt = conn.prepareStatement(sql);

// 4.设置参数

pstmt.setString(1, "lisi");

pstmt.setString(2, "hehe");

// 5.执行插入操作

int row = pstmt.executeUpdate();

if (row > 0) {

System.out.println("添加成功!");

} else {

System.out.println("添加失败!");

}

} catch (Exception e) {

throw new RuntimeException(e);

} finally {

// 6.释放资源

JDBCUtils_V2.release(conn, pstmt, null);

}

}

/**

* 根据id查询用户信息

*/

@Test

public void testFindUserById() {

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

try {

// 1.获取连接

conn = JDBCUtils_V1.getConnection();

// 2.编写sql语句

String sql = "select * from tbl_user where uid=?";

// 3.获取执行sql语句对象

pstmt = conn.prepareStatement(sql);

// 4.设置参数

pstmt.setInt(1, 2);

// 5.执行查询操作

rs = pstmt.executeQuery();

// 6.处理结果集

while (rs.next()) {

System.out.println(rs.getString(2) + "----" + rs.getString("upassword"));

}

} catch (SQLException e) {

e.printStackTrace();

} finally {

// 7.释放资源

JDBCUtils_V1.release(conn, pstmt, rs);

}

}

}

mysql jdbc 表结构_JavaEE_day09_MySQL多表JDBC相关推荐

  1. mysql jdbc 表结构_JDBC操作表:JDBC修改表结构

    操作数据库:mysql 操作目的:通过增加字段,删除字段,修改字段和修改字段类型的方式让大家熟练掌握通过JDBC修改表结构. 在通过JDBC修改表结构前,我们还是先看下当前的表结构,如下图所示: 1. ...

  2. php拷贝mysql表_MySQL复制表数据或表结构到新表中

    MySQL复制表数据到新表的几个步骤. 1.MySQL复制表结构及数据到新表 CREATE TABLE new_table SELECT * FROM old_table; 2.只复制 MySQL复制 ...

  3. mysql 表结构关系_mysql 表关系 与 修改表结构

    mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...

  4. mysql 复制表结构到一个新表_MySQL复制表数据或表结构到新表中

    MySQL复制表数据到新表的几个步骤. 1.MySQL复制表结构及数据到新表 CREATE TABLE new_table SELECT * FROM old_table; 2.只复制 MySQL复制 ...

  5. mysql表结构定义_Mysql表结构定义及相关语法

    mysql语法及相关命令 1.每个sql命令都需要使用分号来完成 2.可以将一个命令写成多行 3.可以通过\c来取消本行命令 4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端 5. ...

  6. java 修改mysql数据库表结构_MYSQL数据库表结构优化方法详解

    摘要:这篇MySQL栏目下的"MYSQL数据库表结构优化方法详解",介绍的技术点是"mysql数据库表结构.MySQL数据库.数据库表结构.MySQL.据库表结构.数据库 ...

  7. Mysql复制表两种方式(复制表结构、复制表结构和数据、复制表中的部分数据、复制表中的部分数据并起别名)

    需要完全的复制MySQL的数据表,包括表的结构,索引,默认值等. 如果仅仅使用CREATE TABLE - SELECT 命令,是无法实现的. 本章节将为大家介绍如何完整的复制MySQL数据表,步骤如 ...

  8. Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句

    Mysql创建数据库表,查看表结构,查看表中数据,查看建表语句 1.创建数据库表 create table t_student( 表属性以,隔开 最后一行不用,): 2.查看表结构 desc t_st ...

  9. mysql根据表结构自动生成表设计文档

    最近总是接到要整理新增需求的文档任务, 其他的业务逻辑说明写起来倒还可以没问题, 每每到了,写表设计文档时,慢慢的粘贴就很是头疼 刚好最近在学go 正愁没什么需求练手,就想写个 根据表结构自动生成表设 ...

最新文章

  1. k-d tree树 近邻算法
  2. 使用R进行相关性分析
  3. Day05:装饰器,三元表达式,函数的递归,匿名/内置函数,迭代器,模块,开发目录...
  4. 谷歌停止中国版搜索引擎;李楠宣布离职魅族;微软用 Rust 替代 C/C++ | 极客头条...
  5. 为什么我会弃Java,选择了Kotlin——专访《Java编程思想》作者 Bruce Eckel
  6. office2010 反应慢_office2010打开时间太慢。怎么办?
  7. 树莓派安装centos系统
  8. 利用bat文件批量修改文件后缀名
  9. 程序读取凡人修仙传热度数据
  10. shell 后台运行
  11. 系统设计-开放平台(二)
  12. 关于 Java.lang.NoClassDefFoundError 解决
  13. springboot搭建项目环境以及整合其他技术
  14. 电脑屏幕亮度能否自动调节
  15. php取FBOX数据,如何实现如下功能
  16. 整理的一些 Vue3 知识点,初学者看完就能上手做项目
  17. matlab的仿真实验报告答案,模糊控制MALTAB系统仿真实验报告
  18. 首场百度大脑开放日来袭 | 全新开放24项AI技术
  19. 香港室内设计公司【Junee】申请纳斯达克IPO上市,募资2500 万美元
  20. 标准机构发布物联网安全测试指南

热门文章

  1. 【MySQL】简单命令总结
  2. 研究人员提出增强Wi-Fi传输的新方法
  3. 零基础学python-3.2 变量赋值
  4. 博客入驻阿里“云栖社区”
  5. another app is currently holding the yum lock;waiting for it to exit解决
  6. 分布式系统设计注意点
  7. [转载]ASP.NET MVC:通过 FileResult 向 浏览器 发送文件
  8. ASP.NET State Service
  9. html音乐唱片自动转,HTML5音乐播放器(四):播放列表与播放方式
  10. wincc报表步骤实例_Wincc 如何连接SQL Server 数据库