| 本帖最后由 小石姐姐 于 2018-12-13 09:38 编辑 
 数据库基本概念:
 数据库分类:
 关系型数据库
 mysql
 oracle
 db2
 非关系型数据库
 redis
 mysql 6.0开始收费
 DBMS 数据库管理系统
 数据库结构:
 数据库
 -->表(列) 在创建表的时候就已经把列创建好
 -->数据
 sql分类:
 DDL        : 数据库和表的操作
 DML: 数据的增删改
 DQL: 数据的查询
 DCL:(了解) DBA数据库管理员
 数据类型:
 varchar(长度)
 char(长度)
 text
 date
 datetime
 timestamp 默认当前系统时间
 约束(在创建完表之后添加约束alter table 表名 modify 列名 数据类型 约束)
 主键 : primary key         auto_increment(自增长)
 创建表后删除主键
 alter table 表名 drop primary key
 外键 : foreign key
 在创建表时,添加外键
 语法:
 create table 表名 (
 ...
 外键列
 constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名
 称)
 );
 删除外键:
 alter table 表名 drop foreign key 外键名称;
 创建表之后,添加外键
 alter table 表名 add constraint 外键名称 foreign key (外键列名称) references
 主表名称(主表列名称)
 级联操作
 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称) ON
 UPDATE CASCADE / ON DELETE CASCADE  ;
 非空: not null
 唯一 : unique
 创建表之后删除唯一操作
 alter table 表名 drop index 列名
 多表的关系:
 一对一
 一对多
 多 创建外键指向 一的主键
 多对多
 中间表两列作为(外键/联合主键) 分别指向其他两个主表的主键
 MYSQL
 安装卸载
 net start mysql
 net stop mysql
 netstat -ano | findStr "3306"
 taskkill / F / PID mysql的进程id
 sqlyog工具使用
 -------------------------------------------------
 DDL
 数据库
 create database 数据库名 character set utf8 创建数据库指定字符集
 drop database 数据库名   删除
 show databases 查询所有数据库
 show create database 数据库名   查看指定的数据库
 select database() 查看当前用的数据库
 use 数据库名    使用数据库
 表
 create table 表名 (
 列名 数据类型 约束
 列名 数据类型 约束
 ...
 );    创建表指定列名数据类型约束
 drop table 表名  删除表
 show create table 表名   显示指定的表
 show tables 显示所有的表
 desc 表名   显示表结构
 alter table 表名 add 列名 数据类型 约束      添加列
 alter table 表名 drop 列名        删除列
 alter table 表名 modify 列名 数据类型 约束        更改数据类型
 alter table 表名 change 列名 新列名 数据类型 约束        更改列名
 alter table 表名 character set 字符集名称        更改字符集
 rename table 表名 to 新表名        更改表名
 truncate table 表名        删除数据创建新表
 DML
 insert into 表名 (列名...) values (值...)        添加值
 delete from 表名 where 条件        删除数据
 update 表名 set 列名 = 值 where 条件        更改某列的值
 DQL
 单表
 select 列名 from 表名 where 条件 group by 列名 having 条件 order by asc/ desc limit
 索引
 多少条数据 -- 注释
 where 和having 的区别?
 1. where 在分组之前进行限定,如果不满足条件,则不参与分组 having 在分组之后进
 行限定,如果不满足结果,则不会被查询出来
 2. where 后不可以跟聚合函数,having可以进行聚合函数的判断
 3. 分页查询
 1.语法:
 limit 开始的索引,煤业查询的条数
 2.公式
 开始的索引 = (当前的页码 - 1) * 每页显示的条数
 4. limit只能在mysql中使用
 多表
 内连接
 隐式
 select 列名 from 表名, 表名 where 关联条件 and 条件
 显式
 select 列名 from 表名 join 表名 on 关联条件 where 条件
 外连接
 select 列名 from 表名 left join 表名 on 关联条件 where 条件
 select 列名 from 表名 right join 表名 on 关联条件 where 条件
 子查询
 查询嵌套查询
 条件:      单行单列 多行单列
 虚拟表    多行多列   单行多列
 事务
 start transaction        开启事务
 commit        提交事务
 rollback        回滚事务
 
 四大特性
 原子
 持久
 一致
 隔离
 隔离级别(脏读, 不可重复读, 虚读, 幻读)
 1. read uncommitted:读未提交
 * 产生的问题:脏读、不可重复读、幻读
 2. read committed:读已提交 (Oracle)
 * 产生的问题:不可重复读、幻读
 3. peatable read:可重复读 (MySQL默认)
 * 产生的问题:幻读
 4. serializable:串行化
 jdbc
 概念
 一套接口(java提供的规范) --> 要求厂商自己实现操作各自数据库的驱动
 面向接口编程
 1.注册驱动
 2.获取连接
 3.创建sql和执行sql的对象
 4.执行sql获取结果
 5.处理结果
 6.释放资源
 ps:
 1.ResultSet的遍历
 
 [Java] 纯文本查看 复制代码   while(rs.next()){
                rs.getObejct(1);
                rs.getObejct("列名")
        }2.sql注入
 使用        PrepareStatement        配合占位符  ?
 pst.executeQuery()        --> 没有参数
 pst.executeUpdate() --> 没有参数
 3.事务
 conn.setAutoCommit(false);
 conn.commit()
 conn.rollback();
 连接池
 C3P0
 接入步骤:
 1.导jar
 1.c3p0  2个
 2.mysql驱动
 2.导入配置文件(src目录下)
 c3p0-config.xml
 3.使用
 DataSource dataSource = new ComboPooledDataSource();
 Connection con = dataSource.getConnection();
 DRUID(德鲁伊)
 接入步骤
 1.导jar
 1.druid
 2.mysql驱动
 2.导入配置文件(src)
 druid.properties
 3.使用
 
 [Java] 纯文本查看 复制代码     Properties pro = new Properties();
                                                pro.load(JDBCUtils.class.getClassLoader()
.getResourceAsStream("druid.properties"))                                                                                          
                                        DataSource dataSource = DruidDataSourceFactory.createDataSoure(pro)
                                        Connection con = dataSource.getConnection()             JdbcUtils实现思路
 1.获取数据源(连接池)        DataSource
 2.获取连接对象                         Connection
 3.释放资源                                重载
 思路:
 1,2:
 DataSource在类加载的时候就应该初始化,为了保证对象能够及时创建,在 static{}
 静态代码块中创建的对象
 
 [Java] 纯文本查看 复制代码     Properties pro = new Properties();
                                        pro.load(JDBCUtils.class.getClassLoader()
.getResourceAsStream("druid.properties"))
                                        dataSource = DruidDataSourceFactory.createDataSoure(pro)
                                提供返回数据源的方法 getDataSource()   ---> return dataSource
                                提供返回连接                 getConnection()   ---> return dataSource.getConnection()        3:
 在关闭之前做非空判断!!!
 JdbcTemplate
 SPRING        (基于jdbc来简化数据库的操作)
 !!!如果有占位符需要传入参数
 
 [Java] 纯文本查看 复制代码  DataSource dataSource = new ComboPooledDataSource();
                                        JdbcTemplate template = new JdbcTemplate(dataSource);增删改
 template.update("sql",[具体参数]);
 查询
 单条结果
 
 [Java] 纯文本查看 复制代码    Map<String,Object> map = template.queryForMap("sql",[具体参数]);
                                        Bean bean = template.queryForObject("sql",new
BeanPropertyRowMapper<Bean>(Bean.class),[具体参数]);多条结果
 
 [Java] 纯文本查看 复制代码      List<Map<String,Object>> list = template.queryForList("sql",[具体参数]);
                                        List<Bean> list = template.query("sql",new
BeanPropertyRowMapper<Be
 
 |