A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Java-yao 初级黑马   /  2018-12-10 17:36  /  865 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

MySQL 数据库

数据库基本概念
数据库分类
关系型
mysql
oracle
db2
非关系型
redis
mysql 6.0 开始收费

DBMS 数据库管理系统
数据库结构
数据库  -->   表(列)  -->  数据

sql分类
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 utf8
                        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 索引,多少条 --
多表
                        内连接
                                隐式
                                SELECT 列名 FROM 表名1,表名2 WHERE 关联条件 AND 条件
                                显式
                                SELECT 列名 FROM 表名1 JOIN 表名2 ON 关联条件 WHERE 条件
                        外链接
                                SELECT 列名 FROM 表名1 LEFT JOIN 表名2 ON 关联条件 WHERE 条件
                                SELECT 列名 FROM 表名1 RIGHT JOIN 表名2 ON 关联条件 WHERE 条件
                        子查询
                                查询嵌套查询
                                        条件:                单行单列,多行单列
                                        虚拟表                多行多列
DCL(DBA)

数据类型
                VARCHAR(长度)
                CHAR(长度)
                TEXT
                DATE
                DATETIME
                TIMESTAMP        默认当前系统时间
约束       
                主键        PRIMARY KEY(主键) AUTO_INCREMENT(自动增长)
                外键        FOREIGN KEY
                非空        NOT NULL
                唯一        UNIQUE
多表的关系
                1对1
                        2) 从表中的主键又是外键
                1对多
                        多创建外键指向一主键
                多对多
                        中间表2列作为(外键/联合主键)分别指向其他2个主表的主键

MYSQL安装卸载
        net start mysql  //启动mysql服务
        net stop mysql //停止mysql服务

        netstat -ano | findStr "3306"
        taskkill /F /PID mysql的进程id

事务概念:
*  如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。
1. 开启事务:start transaction;
2. 回滚:rollback;
3. 提交:commit;

事务的四大特征:
1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。
2. 持久性:当事务提交或回滚后,数据库会持久化的保存数据。
3. 隔离性:多个事务之间。相互独立。
4. 一致性:事务操作前后,数据总量不变

隔离级别:
* 注意:隔离级别从小到大安全性越来越高,但是效率越来越低
1. read uncommitted:读未提交
* 产生的问题:脏读、不可重复读、幻读
2. read committed:读已提交 (Oracle)
* 产生的问题:不可重复读、幻读
3. repeatable read:可重复读 (MySQL默认)
* 产生的问题:幻读
4. serializable:串行化
* 可以解决所有的问题

JDBC概念
                一套接口(java提供的规范)        -->                要求厂商自己实现操作各自数据库的 驱动
                面向接口编程
操作步骤:
        * 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
DRUID(德鲁伊)
@.右键-->Add As Library 添加成库

        1.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        2.获取连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
        3.创建sql和执行sql的对象
        String sql = "update account set balance = 500 where id = 1";
        Statement stmt = conn.createStatement();
        4.执行sql获取结果
        int count = stmt.executeUpdate(sql);
        5.处理结果
        System.out.println(count);
        6.释放资源
        stmt.close();
        conn.close();

        ps:
                1.ResultSet的遍历
                        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.使用
                                        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{} 静态代码块中创建的对象
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来简化数据库的操作)

        !!!如果有占位符需要传入参数

        DataSource dataSource = new ComboPooledDataSource();
        JdbcTemplate template = new JdbcTemplate(dataSource);

        增删改
                template.update("sql",[具体参数]);

        查询
                单条结果
                        Map<String,Object> map = template.queryForMap("sql",[具体参数]);
                        Bean bean = template.queryForObject("sql",new BeanPropertyRowMapper<Bean>(Bean.class),[具体参数]);
                多条结果
                        List<Map<String,Object>> list = template.queryForList("sql",[具体参数]);
                        List<Bean> list = template.query("sql",new BeanPropertyRowMapper<Bean>(Bean.class),[具体参数]);





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马