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: ...
随机推荐
- 日地拉格朗日L2点轨道的卫星运行
看了嫦娥四号通信的中继卫星,不明白是怎么运行的,下面的演示解除了我的疑问. https://lt.cjdby.net/thread-2479933-1-2.html
- 封装读取文件(node js)
我们都会简单的读取文件,今天我们就来讲一下用函数封装读取文件. 1.首先我们要先建好文件 2.我们在index.js里面写入代码: var http=require('http'); var fs=r ...
- ES6 promise 使用示例
new Promise(function (resolve, reject) { $.ajax({ type : 'post', data : formData, dataType : 'json', ...
- 《Java练习题》习题集二
编程合集: https://www.cnblogs.com/jssj/p/12002760.html Java总结:https://www.cnblogs.com/jssj/p/11146205.ht ...
- Caffe源码-InsertSplits()函数
InsertSplits()函数 在Net初始化的过程中,存在一个特殊的修改网络结构的操作,那就是当某层的输出blob对应多个其他层的输入blob时,会在输出blob所在层的后面插入一个新的Split ...
- C#使用WebClient时,如果状态码不为200时,如何获取请求返回的内容
目录 一.事故现场 二.解决方法 一.事故现场 使用WebClient发送请求,如果返回的状态码不是2xx或3xx,那么默认情况下会抛出异常, 那如何才能获取到请求返回的内容呢? 二.解决方法 可以通 ...
- C# get md5,renamed file and can not change file's md5
using System; using System.Text; using System.IO; using System.Security.Cryptography; namespace Cons ...
- Hadoop2.8分布式集群安装与测试
1.hadoop2.x 概述 个).每一个都有相同的职能.一个是active状态的,一个是standby状态的.当集群运行时,只有active状态的NameNode是正常工作的,standby状态的N ...
- Nginx 安装、配置及相关介绍
一.前言 Nginx是一个高性能的HTTP和反向代理服务器,由俄罗斯人开发的,第一个版本发布于2004年10月4日.是一款轻量型的Web服务器,其特点是占有内存少,并发能力强,对负载均衡等提供了非常方 ...
- Spring-web-security Issue (Access is denied. User must have one of the these roles: ACTUATOR)
前提条件(Prerequisite) 1.你的项目里引进了Spring web security <dependency> <groupId>org.springframewo ...