数据库复习

SQL分类:
DDL:数据定义语言,create,alter,drop,declare
DML:数据操纵语言,select,update,delete,insert
DCL:数据控制语言,grant,revoke,commit,rollback

SQL语句
1.创建数据库
create database dbname;
2.删除数据库
drop database dbname;
3.创建新表
create table tbname;
create table tbname_new like tbname_old;
4.删除新表
drop table tbname
5.增加一列
alter table tbname add column colname type;
6.添加主键
alter table tbname add primary key(colname);
7.删除主键
alter table tbname drop primary key(colname);
8.创建索引
create index indexname on tbname(col);
9.删除索引
drop index indexname;
10.创建视图
create view viewname as select statement;
11.删除视图
drop view viewname;

基本sql语句
选择:select * form table1 where 范围
插入:insert into table1 (field1,field2)values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1 = value1 where 范围
查找:select * from table1 where field1 like ‘%value1%’
排序:select * from table1 order by field1,field2 【desc】
总数:select count as totalcount from table1

维护数据库完整性
1.尽可能用约束(check,主键,唯一键,外键,非空字段)实现,效率最好;
2.其次使用触发器,保证业务系统访问数据库完整性,一致性;
3.最后考虑用自己写的业务逻辑实现,编程复杂,效率最低。

什么是索引?有什么优点?
索引:类似于书的目录,是数据库无需扫描整个表就可以在其中找到所需要的数据。索引包含一个表中包含值的列表,其中包含各个值的行所存储的位置,索引可以是单个或一组列,合理划分索引能够大大提高数据库的性能。

JDBC连接数据库
1.加载JDBC驱动
2.获取数据库连接
3.创建statement对象
4.执行query语句
5.遍历输出执行结果
6.关闭连接

JDO
Java对象持久化的新规范,Java data object,也是一个用于存取某种数据仓库中的对象标准化API。

存储过程VS函数
存储过程:用户定义的一系列sql语句的集合,涉及特定表或其他对象任务,用户可以调用存储过程。
优点:
1.允许模块化程序设计
2.允许更快执行
3.减少网络流量
4.更好的安全机制
函数:数据库已经定义的方法,会接受参数并返回某种类型的值,并且不涉及特定用户表。

事务 和 锁
作为一个逻辑单元执行的一系列操作,一个逻辑工作单元有四个属性:
原子性:事务必须是原子工作单元,要么全执行,要么全不执行。
一致性:事务完成时所有数据保持一致。
隔离性:并发事务所做的修改必须相互隔离。
持久性:事务完成之后,它对于系统的影响是永久性的。

锁:多用户环境中对数据的访问的限制。锁可以保证事务的完整性和并发性。

游标的作用 和 视图
定位结果集的行,通过判断全局变量@@FETCH_STATUS可以判断是否到了最后,通常此变量不等于0表示出错或到了最后。

视图:虚拟表,一表或多表的行或列的子集,结果更容易理解,获取数据更容易,维护更方便。

事前触发器VS事后触发器
触发器作用:特殊的存储过程,通过事件来触发而被执行。强化约束用来维护完整性和一致性。
事前触发器:运行于触发事件发生之前,获取事件之前和新的字段值。
事后触发器:运行于触发事件发生之后。

JDBC调用存储过程

package edu.swj.study;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Types;

/**
 * jdbc调用存储过程
 * 类说明
 * 
 * @author SWJ
 * @date 2018年4月20日
 * @version 1.0
 */
public class JdbcTest {
    public static void main(String[] args) {
        Connection cn = null;
        CallableStatement cstmt = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            cn = DriverManager.getConnection("jdbc:mysql:///test", "root", "1234abcd");
            cstmt = cn.prepareCall("{call insert_Student(?,?,?)}");
            cstmt.registerOutParameter(3, Types.INTEGER);
            cstmt.setString(1, "wangwu");
            cstmt.setInt(2, 25);
            cstmt.execute();
            System.out.println(cstmt.getString(3));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if(cstmt != null){
                    cstmt.close();
                }
                if(cn != null){
                    cn.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }
}

Class.forName的作用
按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字节码已经被加载过,则返回代表该字节码的Class实例对象,否则,按类加载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类,则抛出ClassNotFoundException。加载完这个Class字节码后,接着就可以使用Class字节码的newInstance方法去创建该类的实例对象了。有时候,我们程序中所有使用的具体类名在设计时(即开发时)无法确定,只有程序运行时才能确定,这时候就需要使用Class.forName去动态加载该类,这个类名通常是在配置文件中配置的,例如,spring的ioc中每次依赖注入的具体类就是这样配置的,jdbc的驱动类名通常也是通过配置文件来配置的,以便在产品交付使用后不用修改源程序就可以更换驱动类名。


数据库三范式
第一范式(1NF)
字段具有原子性,不可再分。
第二范式(2NF)
数据库表中的每个实例或行都可以被唯一的区分。主关键字或主键
非主属性非部分依赖于主关键字。
第三范式(3NF)
每列只有一个值
每行都能区分
没一个表不包含其他表已经包含的非主关键字信息。

分页语句
//取出sql表中第31到40的记录

sql server方案1:
select top 10* from t where id not in(select top 30 id from t order by id)order by id
sql server方案2select top 10* from t where id in (select top 40 from t order by id)order by id desc
mysql方案:
select * from t order by id limit 30, 10
oracle方案:
select * from (select rownum r, *from t where r <=40)where r>30

pageSize = 20;
pageNo = 5;
String sql = "select * from articles limit " + (pageNo-1)*pageSize + "," + pageSize;

事务的隔离级别
脏读:一个事务读取另一个事务未提交的数据。1*read uncommitted
不可重复读:一个事务读取到另一个事务提交后的数据。2*read committed
虚读(幻读):在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。
4*repeatable read: 避免脏读、不可重复读,虚读有可能发生。
8*serializable:避免脏读、不可重复读、虚读
级别越高,性能越低,数据越安全。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN(中国软件开发网)是一个技术交流平台,其中涵盖了各种领域的技术内容,包括数据库数据库复习是指回顾和巩固数据库的相关知识和技能。 数据库是存储、管理和组织数据的一种数据结构。在软件开发中,数据库起到储存数据的作用,同时也提供了数据操作、查询和管理的功能。因此,深入理解数据库的原理和技术对于开发人员来说非常重要。 数据库复习的内容可以包括以下几个方面: 1. 数据库基础知识:了解数据库的概念、特点、分类和常用的数据库系统,如关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)。 2. SQL语言:掌握SQL语言的基本语法、查询、更新、删除和插入数据的操作,熟悉常用的SQL函数和操作符,能够编写复杂的SQL查询语句和数据操作语句。 3. 数据库设计:了解数据库设计的基本原则和范式,能够进行数据库的逻辑设计和物理设计,并能评估和调整数据库的性能。 4. 数据库索引和优化:理解数据库索引的原理和类型,了解索引的创建、使用和优化策略,能够通过合理的索引设计和优化来提升数据库的查询性能。 5. 数据库事务和并发控制:掌握数据库事务的概念和特性,理解并发访问引起的数据一致性问题,学会应对并发访问的技巧和控制策略。 6. 数据库备份和恢复:了解数据库备份和恢复的重要性,掌握常用的数据库备份和恢复方法和工具,能够制定和执行数据库的备份和恢复策略。 7. 数据库安全性:熟悉数据库的安全性问题和常见的安全攻击,能够使用数据库的安全机制和技术来防护和保护数据的安全。 通过对CSDN中数据库相关文章的阅读、学习和实践,可以加深对数据库的理解和掌握,提高数据库的设计和开发能力。此外,还可以通过访问CSDN的论坛和社区,与其他开发者交流和分享经验,进一步提升自己的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值