Java基础(七)

左连接,右连接,内连接,全连接的区别
左连接:返回左表所有行,右表没有匹配行则返回null
右连接:返回右表所有行,左表没有匹配行则返回null
内连接:返回左右表共有行
全连接:返回左右表所有行,无互相匹配得则返回null
MySQL中in和exists区别
1、exists对外表用loop逐条查询,每次查询都会查看exists的条件语句,有记录返回true反之false;
2、in相当于多个or条件的叠加。
外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。
not in不会使用索引,not exists效率更高
数据库查询缓慢的常见原因以及优化方法
1、没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷)
根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数据量。
注意填充因子要适当(最好是使用默认值0),应该尽量使用字节数小的列建索引好(参照索引的创建),不要对有限的几个值的字段建单一索引如性别字段
2、I/O吞吐量小,形成了瓶颈效应
把数据、日志、索引放到不同的I/O设备上,数据量(尺寸)越大,提高I/O越重要
3、没有创建计算列导致查询不优化
mysql> create table t(id int auto_increment not null,c1 int,c2 int,c3 int as (c1+c2),primary key(id));
4、查询出的数据量过大(可以采用多次查询,其他的方法降低数据量)
mysql->limit分页查询 oracle->rownum
5、锁或者死锁(这也是查询慢最常见的问题,是程序设计的缺陷)
解除锁表释放锁
6、返回了不必要的行和列、
需要什么查什么
7、查询语句不好,没有优化
1)外层查询表小于子查询表,则用exists,外层查询表大于子查询表,则用in,如果外层和子查询表差不多,则爱用哪个用哪个。
2)>和>=和<和<=操作符:而A>=3优于A>2
3)Like操作符:LIKE ‘张%’则会引用范围索引,LIKE ‘%张%’ 这种查询不会引用索引
4)应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描
5)避免SELECT *
6)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描,将可以过滤掉大量数据的条件放前边
8、内存不足
9、网络速度慢
10、sp_lock,sp_who,活动的用户查看,原因是读写竞争资源。
数据库三大范式
1、第一范式(1NF):
1)数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性;
例如:地址信息,应该拆分为省、市、详细地址
2)两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
例如:物品1、物品2,应该合并为物品
2、第二范式(2NF):
满足1NF后,要求表中的所有列,每一行的数据只能与其中一列相关,即一行数据只做一件事,只要数据列中出现数据重复,就要把表拆分开来。
例如:一个联系人同时下多个订单,就会出现一个联系人对应多条订单数据,这样子联系人都是重复的,就会造成数据冗余,应该拆分成订单表和联系人表
3、第三范式(3NF):
满足2NF后,要求表中的每一列都要与主键直接相关,而不是间接相关(表中的每一列只能依赖于主键),数据不能存在传递关系。
例如:Student表,学号--> 所在院校 --> (院校地址,院校电话);应该拆开(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)
注意:
1、第二范式与第三范式的本质区别,在于有没有分出两张表。
2、必须先满足第一范式才能满足第二范式,必须同时满足第一第二范式才能满足第三范式。
数据库五大约束
数据库中的五大约束包括:
1.主键约束(Primay Key Coustraint) 唯一性,非空性;
2.唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个;
3.默认约束 (Default Counstraint) 该数据的默认值;
4.外键约束 (Foreign Key Counstraint) 需要建立两表间的关系;
5.非空约束(Not Null Counstraint):设置非空约束,该字段不能为空。
五大约束的语法示例:
1. 添加主键约束
Alter table 表名 add Constraint 主键名 primary key(字段)
Alter table tb_name modify id int auto_increment primary key
2.添加唯一约束
Alter table 表名 add Constraint 约束名 unique(字段)
3.添加默认约束
Alter table 表名 add Constraint 约束名 default(默认内容) for 字段名
4.添加检查约束
Alter table 表名 add Constraint 约束名 check (字段表达)
5.添加外键约束
Alter table 表名 add Constraint 约束名 foreign key(字段) references 表名(字段名)
Java基础(七)的更多相关文章
- Java基础七-正则表达式
Java基础七-正则表达式 一.定义: 特定的符号的组合 二.作用: 用于操作字符串数据 三.优缺点 简化代码,但是阅读性差 四.引入 4.1 问题 判断一个号码是否是QQ号? 不是零开头 6-15位 ...
- java基础七 [图形用户接口](阅读Head First Java记录)
到目前为止我们接触的都是Java的命令行,但是为了让用户使用,必须有图形化界面,所以这章主要讲的是怎么使用GUI(图形用户接口) 创建一个GUI:javax.swing.* 本章讲的布局相关内容都 ...
- java基础(七)-----深入剖析Java中的装箱和拆箱
本文主要介绍Java中的自动拆箱与自动装箱的有关知识. 基本数据类型 基本类型,或者叫做内置类型,是Java中不同于类(Class)的特殊类型.它们是我们编程中使用最频繁的类型. Java是一种强类型 ...
- Java基础七(Eclipse工具)
今日内容介绍1.Eclipse开发工具2.超市库存管理系统 ###01Eclipse的下载安装 * A: Eclipse的下载安装 * a: 下载 * http://www.eclipse.org ...
- java基础(七) java四种访问权限
引言 Java中的访问权限理解起来不难,但完全掌握却不容易,特别是4种访问权限并不是任何时候都可以使用.下面整理一下,在什么情况下,有哪些访问权限可以允许选择. 一.访问权限简介 访问权限控制: ...
- Java基础(七)--Exception异常处理
发现错误的理想时机是程序运行之前(编译期),然后不太现实,很多异常无法被发现(特别是业务上的数据),需要在运行时解决. 错误恢复机制保证代码健壮性的方式,异常处理在程序中很常见,也是必须的,必须考虑有 ...
- Java基础(七)
字符串String类 字符串的两个问题 构造方法 字符串池 字符串的内容不可变 比较方法 练习:模拟登陆 练习:模拟登陆(限制重试次数) 替换方法(敏感词过滤) 如果希望将字符串当中指定的部分进行替换 ...
- java基础(七)之子类实例化
知识点;1.生成子类的过程2.使用super调用父类构造函数的方法 首先编写3个文件. Person.java class Person{ String name; int age; Person() ...
- java基础(七)--键盘输入
一.示例 package cnblogs; import java.util.Scanner; public class TestBase07IO { public static void main( ...
- 重学JAVA基础(七):线程的wait、notify、notifyAll、sleep
/** * 测试thread的wait notify notifyAll sleep Interrupted * @author tomsnail * @date 2015年4月20日 下午3:20: ...
随机推荐
- 【Java Web开发学习】Spring加载外部properties配置文件
[Java Web开发学习]Spring加载外部properties配置文件 转载:https://www.cnblogs.com/yangchongxing/p/9136505.html 1.声明属 ...
- 关于页面打印window.print()的样式问题
当我们打印网页的时候.有时候会发现.打印出来的.跟网页上看到的样式的差别有点大.这其中可能有的问题是.样式问题. 当调用打印(window.print())方法时.打印机会在网页的样式中查找 @med ...
- 网易极客战记官方攻略-地牢-Kithgard 地牢
关卡连接: https://codecombat.163.com/play/level/dungeons-of-kithgard 夺取宝石,逃出地牢--注意不要触碰其他东西.在这个关卡里,你会学习编写 ...
- 新手Linux之路之Deepin
用了很久的Window,心血来潮想换个系统,于是就开始踩坑Linux之路. 系统为deepin 首先基本的 设置root密码 $:sudo passwd root [sudo] password fo ...
- linux vscode 编译配置
linux 环境下,g++和clang都可以作为C++的编译器,我这里选择使用的是clang. 首先是插件选择: (1) C/C++ 微软自带的C/C++插件. (2) C/C++ Clang Com ...
- STM32基本GPIO操作:按键输入(扫描+外部中断)
(涉及专有名词较多,难免解释不到位,若有错误还请指出,谢谢!) 硬件连接图如下: 一.扫描 思路是在main函数中通过死循环来扫描端口电平状态检测,以此判断按键是否按下.实现较为简单. 1.初始化(注 ...
- 我这样回答了Spring 5的新特性,面试官对我刮目相看
最近,有一个小伙伴拿到了自己满意的Offer,和他交谈的过程中得知他面试官问他关于Spring的问题比较多,其中最让面试官满意的就是自己回答关于Spring 5的知识点回答的不错. Spring5于2 ...
- Spring Boot 静态资源能加载css 不能加载js
Spring Boot 配置拦截器的时候默认 是放行 静态资源 , 也就是说不需要进行配置 registry.addResourceHandler("/**") .addResou ...
- 怎么将CAD转JPG?教你两种CAD转JPG方法
在CAD中,对于CAD图纸格式的转换那是比较常见的了,因为CAD图纸的格式是dwg格式的,在使用的时候不是那么的方便,就需要将CAD图纸转换为偏于查看的格式.那怎么将CAD转JPG呢?具体要怎么来进行 ...
- 【坑】The server time zone value '�й���ʱ��' is unrecognized or represents more than one time zone.
在使用spring JDBC 连接数据库时出现的错误: Caused by: com.mysql.cj.exceptions.InvalidConnectionAttributeException: ...