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: ...
随机推荐
- 拿到外包公司的offer,我要去么?
引言: 前一阵子有一个帖子引起了非常广泛的讨论,描述的就是一个公司的外包工作人员,加班的时候因为吃了公司给员工准备的零食,被公司的HR当场批评!这个帖子一发出来,让现在测试行业日益新增的外包公司备受关 ...
- Winform 中DataGridView、dev Gridview控件添加行标题
有很多种方法. 1.可以在DataGridView控件中的RowStateChanged事件改变行标题单元格的值(Row.HeaderCell.Value) /// <summary> / ...
- 微信小程序 wepy框架 之拦截器intercepter使用
1,在使用wepy框架创建的项目下 找到src/app.wpy 2,在app.wpy constructor方法中添加 super(); this.use('promisify');//启用ES6 p ...
- 下载Abook 高等教育出版社网站资料
一.背景 又快到了期末复习周,这个学期学了一门操作系统,老师没有给课本习题的答案,说是配套网站上有,我看了一下,确实有,是高等教育出版社的数字课程网站Abookl http://abook.hep.c ...
- Python面向对象-继承和多态特性
继承 在面向对象的程序设计中,当我们定义一个class时候,可以从现有的class继承,新的class成为子类,被继承的class称为基类,父类或超类. 比如,编写一个名为Animal的class: ...
- asp.net core 3.0 MVC JSON 全局配置
asp.net core 3.0 MVC JSON 全局配置 System.Text.Json(default) startup配置代码如下: using System.Text.Encodings. ...
- 通过ADB获取Android手机信息
原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CPU,厂商名称等)adb shell "ca ...
- WebAPI接口测试数据库操作
通常我们是不建议直接查看数据库内容来检查功能的,但是在没有外部接口或者图形界面验证的情况下,只能通过查询数据库来验证. 比如我们手工需要从界面上添加一万条数据,估计要花好几天时间,显然不能手工去操作. ...
- Information Management System
Information Management System 一.代码部分 #include <stdio.h> #include <stdlib.h> #include < ...
- SpringCloud之Feign 负载均衡请求超时时间
版本声明: SpringCloud:Greenwich.SR4 SpringBoot:2.1.9.RELEASE Feign调用服务的默认时长是1秒钟,也就是如果超过1秒没连接上或者超过1秒没响应,那 ...