java mysql 多表查询_【JAVAWEB学习笔记】09_MySQL多表&JDBC(包含MySQL数据库思维导图)...

今天晨读单词:

order:订单

constraint:(强制)约束

foreign key:外键

references:指向

orderitem:订单项

join:加入

resourceBundle:资源捆绑

classLoader:类加载器

properties:属性

inputstream:输入流

今日学习目标:

1、能够描述表与表的关系

2、能独立编写一对多的表关系SQL语句

3、能独立编写多对多的表关系SQL语句

4、能使用SQL进行多表查询

5、能使用JDBC完成单表增删改查操作

值得注意的是:除了dirver在mysql.jdbc,其他都在sql的包下,不要导错包了。

通过MySQL思维导图进行回顾,再进入今天的笔记内容

d2be2568b0cab5f0fd701f35ccc915d3.bmp

01_一对多建表原则

eee42efc109700ed86ccc23467c43506.bmp

02_多对多建表原则

d9b5b1f296f51f866f0d54b7bfa658d6.bmp

03_一对一建表原则

22a68a650e8a83756b94f73f611286a4.bmp

04_商城的实体抽取和表关系分析

300059df8a7cdb7eae8d86cae008f0af.bmp

05_内连接和外连接区别

03f3bb5ab103185a3d249af442f51d39.bmp

使用properties配置文件:

79d7ec0b2b1d465261c14de49d1caa92.png

27553e6fd74df3d312fba5b586f4ad8b.png

034b4233daa1f991f58f96a03d3a52f0.png

方法一:

70df2639946294d57c434897a6cd5a51.png

50dc5f5c6f0e39a2297a60e7e7cfece5.png

方法二:

ce894900ef951efe8e8a462bd2bd6929.png

46785de95e4197bcff351fadf1be73f7.png

MySQL多表操作说明:

问题说明:

一、主从表数据更新问题

当两张表没有建立任何关系的时候,那么可以随意删除其中任何一张表中的任何记录,但是一旦把两张表建立了关系(主外键约束)之后,那么不能删除主表中的数据(这些数据内容在从表中有关联关系的数据),只想执行删除(更新操作),那么就会出现下图中的错误。

c6d3874ca805a2b4917a55cbb5b87c31.png

要想删除主表中与从表有关联关系的数据,可以这么做:

解除主从表的约束关系

先删除从表中与主表有关系的数据[ThinkPad1] ,再删除主表中的数据。

另外,从表也不能添加主表中不存在的数据!

[ThinkPad1]先把p003和P004的数据删除了,再删除分类表中c002的数据。

b716dbf3ebbf69654f9a32adc9492336.png

二、关于子查询问题

一般子查询会存在于两张关联的表中,那么我们可以先把带有条件的那张表与另外一张表的关联关系字段查出来,并作为另外一张表查询的条件值,然后再次进行查询。

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

先查主表的主键(根据指定的条件)

select cid  from category where panme=’化妆品’

查询所有商品的详细信息(根据分类id查询):

select * from product where category_id=cid[ThinkPad2]

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

三、分页查询问题

分页查询使用的是limit关键字进行查询。它后面有两个参数。第一个参数[ThinkPad3] 是起始的位置,第二个参数是每页需要显示的条目数。

举例:商品表中有10条记录,现在需要进行分页显示,每页显示3条数据。现在需要查看第二页的数据。那么应该使用的sql语句是:

select * from product limit 3[ThinkPad4] ,3;

[ThinkPad1]属于主表category表中的内容,那么先查出主表的主键cid.然后将查出的内容作为条件。

[ThinkPad2]需要先从主表category中查询出来。

[ThinkPad3]取值为:(需要查看第几页-1)乘以第二个参数

cf4bf560b4f66cc5f12604de54900229.png

执行分页查询语句后,显示的结果如下:

2becea4826dcdf7ed6878971911726b7.png

四、关于mysql编码问题

1 查看MySQL编码

SHOW VARIABLES LIKE 'char%';

4e4744032e2bb60101845c252eafb0e5.png

因为当初安装时指定了字符集为UTF8,所以所有的编码都是UTF8。

l  character_set_client:你发送的数据必须与client指定的编码一致!!!服务器会使用该编码来解读客户端发送过来的数据;

l  character_set_connection:通过该编码与client一致!该编码不会导致乱码!当执行的是查询语句时,客户端发送过来的数据会先转换成connection指定的编码。但只要客户端发送过来的数据与client指定的编码一致,那么转换就不会出现问题;

l  character_set_database:数据库默认编码,在创建数据库时,如果没有指定编码,那么默认使用database编码;

l  character_set_server:MySQL服务器默认编码;

l  character_set_results:响应的编码,即查询结果返回给客户端的编码。这说明客户端必须使用result指定的编码来解码;

2 控制台编码

修改character_set_client、character_set_results、character_set_connection为GBK,就不会出现乱码了。但其实只需要修改character_set_client和character_set_results。

控制台的编码只能是GBK,而不能修改为UTF8,这就出现一个问题。客户端发送的数据是GBK,而character_set_client为UTF8,这就说明客户端数据到了服务器端后一定会出现乱码。既然不能修改控制台的编码,那么只能修改character_set_client为GBK了。

服务器发送给客户端的数据编码为character_set_result,它如果是UTF8,那么控制台使用GBK解码也一定会出现乱码。因为无法修改控制台编码,所以只能把character_set_result修改为GBK。

l  修改character_set_client变量:set character_set_client=gbk;

l  修改character_set_results变量:set character_set_results=gbk;

设置编码只对当前连接有效,这说明每次登录MySQL提示符后都要去修改这两个编码,但可以通过修改配置文件来处理这一问题:配置文件路径:D:\Program Files\MySQL\MySQL Server 5.1\ my.ini

41a776634fe042b6f17c83491d27ba96.png

3 MySQL工具

使用MySQL工具是不会出现乱码的,因为它们会每次连接时都修改character_set_client、character_set_results、character_set_connection的编码。这样对my.ini上的配置覆盖了,也就不会出现乱码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值