美文网首页
数据库(一)2018-08-23

数据库(一)2018-08-23

作者: 迷人的酋长 | 来源:发表于2018-08-25 23:02 被阅读0次

数据库:

MySQL: 基础, 单表.
MySQL: 表设计, 多表.
JDBC: 核心7步, 工具类(Properties). 
DBCP(效率), DBUtils
1. 你知道的存储数据的方式有几种?
变量, 常量, 数组, 集合: 可以对数据进行临时性存储, 程序执行结束后数据就丢失了.
IO流: 可以对数据进行永久性存储, 不方便用户进行精细化管理.
数据库: 就是存储数据的仓库, 其本质是一个文件系统, 可以有规律的对数据进行存储, 方便用户进行增删改查.
    //增删改查: CURD(create, update,read,delete)
    //数据库才是实际开发中我们真正存储数据的地方.
2. 我们常说的数据库其实指的是数据库管理系统(DBMS), 数据库管理系统和数据库之间有什么关系?
数据库管理系统: DataBase Management System
    类似于: Eclipse
数据库:
    类似于:    Eclipse中的项目

数据表:
    类似于: Java(项目)中的类

数据表中的数据: 
    类似于: Java中的实体对象.
3. 常见的数据库管理系统(DBMS)有哪些?
MySQL, Oracle, SQLServer, DB2, SyBase, SQLite.
4. 我们常用的这些数据库管理系统都是: 关系型数据库, 那么什么是关系型数据库呢?
所谓的关系型数据库: 其实描述的就是实体与实体之间的关系.
    
ER模型图(Entity Relational Model)
    实体: 矩形
    属性: 椭圆形
    关系: 菱形
5. MySQL的安装和卸载:
安装:
    A: 安装之前关闭防火墙.
    B: 最好不要直接安装到盘符根目录下.
    C: 安装路径最好不要出现中文, 空格, 特殊符号等.

卸载:
    A: 卸载之前一定要备份数据.
        //直接把data文件夹给复制一遍即可.
    B: 不要直接删除MySQL文件夹.
    C: 可以采用MYSQL自带的卸载程序进行卸载.
    D: 在控制面板中进行删除.          //推荐
6. MySQL的登陆
方式一:
    window徽标键 + 字母r --> cmd --> mysql -u root -p --> 回车 --> 录入密码 --> 回车

方式二:
    window徽标键 + 字母r --> cmd --> mysql -u用户名 -p密码 --> 回车
    
登陆数据库的时候有可能遇到的问题:
    using password yes:  录入的用户名或者密码错误. 
    10061: mysql服务没有开启.
        开启MySQL服务:  net start mysql
        关闭MySQL服务:  net stop mysql
        
        打开"服务"界面: services.msc
7. SQL语句
概述:
    SQL: Structured Query Language, 结构化查询语言.
        //人和数据库之间进行交互的语言.
分类:
    DDL: 数据定义语言. 主要指的是操作数据库, 操作数据表, 增加列.
        //create, drop, alter
    DML: 数据操作语言. 主要指的是操作数据, 增删改.
        //SQL语句中,把对数据的增删改操作合称为: 更新语句.
        //DML语句可以和 事务 相结合使用.
        事务:
            佳乐10000, 凤姐10000
            
            开启事务
                佳乐 - 1000
                sop(1/0);
                凤姐 + 1000
            提交事务: commit
            事务回滚: rollback
        
    DCL: 数据控制语言. 主要指的是 创建用户, 设置权限, 设置安全级别.
    DQL: 数据查询语言. 主要指的是操作数据: 查询.
        //select, from, where  
使用SQL语句时的注意事项:
A: SQL语句不区分大小写, 建议关键字大写,其他小写.
B: 我们今天写数据类型的时候要注意, Java中的String类型, 对应的是数据库中的 varchar(长度).
C. 值的个数必须和列的个数对应.
D. 值的类型和列的类型也必须对应.
E. 如果是数字类型可以直接写, 其他类型用''括起来.
F. SQL语句的结束标记是: 分号;
G. 进行删除和修改操作之前, 一定一定一定要备份.
8. SQL语句操作数据库(CURD)
增:
    创建数据库:  create database 数据库名;
删:
    删除数据库:  drop database 数据库名;
改:
    修改数据库的码表:
        alter database 数据库名 charset 指定的字符集;
        alter database 数据库名 character set 指定的字符集;
查:
    查询所有的数据库
        show databases;
    查询指定数据库(字符集)
        show create database 数据库名;
使用指定的数据库(切换库):
    use 数据库名;
9. SQL语句操作数据表
增:      
    创建数据表:          //掌握
        create table 数据表名(
            列名1 数据类型 [约束],
            列名2 数据类型 [约束],
            列名3 数据类型 [约束]
        
        );
        数据类型:
            Java中的数据类型          MySQL中的数据类型
            byte/short/int/long         tinyint/smallint/int/long
            float/double                float/double
            char/String                 char/varchar(长度)
            Date                        Date/Time/DateTime/StampDate
                                        DateTime: 可以自定义时间.
                                        StampDate: 时间戳, 采用当前系统的默认时间.
                                        
            File                        BLOB/TEXT(CLOB)
            
        约束
            作用: 用来保证数据的完整性和安全性.
            分类: 
                单表约束:
                    主键约束: primary key       //auto_increment(自动增长)
                    唯一约束: unique
                    非空约束: not null
                多表约束:   
                    外键约束: foreign key
    
    创建用户表:
        create table users(
            uid int primary key auto_increment,
            uname varchar(20),
            pw varchar(20)
        );

        
删:
    删除数据表: drop table 数据表名;
改:      //了解
    给表增加一列字段
        alter table 表名 add 列名 数据类型 约束;
    修改某列字段的约束和类型
        alter table 表名 modify 列名 数据类型 约束;
    修改某列字段的名字,约束,类型
        alter table 表名 change 旧列名 新列名 数据类型 约束;
    删除指定的列
        alter table 表名 drop 列名;
    修改表名
        rename table 旧表名 to 新表名;
    修改表的码表
        alter table 表名 character set 指定的码表;
        alter table 表名 charset 指定的码表;
    
查:
    查询所有的数据表
        show tables;
    
    查询指定数据表(表结构)
        desc 数据表名;
10. SQL语句操作数据表中的数据
增:
    添加一条数据:
        insert into 数据表名(列名1,列名2,列名3) values(值1,值2,值3);
        //insert into users(uid,uname,pw) values(1,'jiale','a123');
    
    批量添加: //添加多条数据
        insert into 数据表名(列名1,列名2,列名3) values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3);
        insert into users(uid,uname,pw) values(1,'jiale','a123'),(2,'fengjie','a123'),(3,'furongjiejie','a123');
        
    实际开发中的写法:
        insert into users values(null,'jiale','a123');
        
    通过"DOS命令窗口"往MySQL中添加中文, 然后查看的时候发现会出现乱码情况, 为什么?      //面试题
        因为控制台默认码表是: GBK, MySQL的服务器端和客户端的默认码表都是: UTF8, 所以会出现乱码.
        
        解决方案:
            方式一:  临时性的把 MySQL的客户端的码表设置为: gbk
                set names 'gbk';
            
            方式二:  永久性设置, 在my.ini配置文件中, 将client的码表改为: GBK.
        
删:
    delete from 数据表名 where 条件;
    
改:
    update 数据表名 set 列名1=值,列名2=值,列名3=值 where 条件;
    
    备份数据:           //理解, 只能备份数据, 不能备份主键.
        备份表不存在:
            create table 备份表名 select * from 要备份的表名;
        
        备份表已经存在:
            insert into 备份表名 select * from 要备份的表名;
        
查:
    最基本的查询:
        select * from 数据表名;
        select 列名1,列名2,列名3 from 数据表名;

    带别名的查询:  
        关键字 as. 
    
    带条件的查询:
        需求: 成绩表exam(eid,ename,chinese,math,english)
        create table exam(
            eid int primary key auto_increment,
            ename varchar(20) not null,
            chinese int  not null,
            math int  not null,
            english int  not null
            
        );
        insert into exam values(null,'佳乐', 59,59,59),(null,'佳乐', 59,59,59),(null,'佳乐', 59,59,59);
        
        分类:
            1. 条件运算符
                >,<, >=, <=, =, !=(<>)
                select * from exam where eid>=2;
            2. 区间(范围)运算符
                between 值1  and 值2;
                select * from exam where eid between 3 and 5;
            3. 逻辑运算符
                and or not
                select * from exam where eid=3 or eid=4 or eid=5;
            4. 固定值的查询
                in (值1,值2,值3)
                select * from exam where eid in (1,3,5);
                select * from exam where eid%2 != 0;
            5. 模糊查询
                like 条件.
                //一般会结合占位符使用.
                //_占一个位置  %占多个位置
                select * from exam where ename like '张_';
                select * from exam where ename like '张%';
                select * from exam where ename like '%张%';
    
    排序查询:
        关键字: order by 要排序的列 [asc/desc];
        //asc表示升序, 但是程序默认是升序, 所以asc可以省略不写. desc表示降序.
        //无论一个SQL语句简单还是复杂, 排序语句必须放在整个SQL语句的最后边.
        
        //需求: 查找所有语文成绩及格的学生信息, 并且按照语文成绩进行降序排列,
        //      如果语文成绩一样, 按照数学成绩升序排列.
        select * from exam where chinese >= 60 order by chinese desc,math asc;
    
    聚合函数:
        count() //一般用于计算数据一共有多少条.
             select count(*) from exam;
        max()
        min()
        avg()   //平均值有可能是一个小数.
        sum()
        
        //where 条件后边不能跟 聚合函数
    
    分组查询:
        关键字: group by 要分组的列.
        已知: 创建一个商品表: product
            create table product(
                pid int primary key auto_increment,
                pname varchar(20),
                price double
            );
            insert into product values(null,'冰箱',2000),
            (null,'冰箱',1000),
            (null,'冰箱',1500),
            (null,'洗衣机',2000),
            (null,'电视机',3000),
            (null,'洗衣机',1000),
            (null,'电视机',10000);

        需求:
            1. 统计每类商品的个数.
                select pname,count(*) from product group by pname;
            2. 统计每类商品的总金额.
                select pname,sum(price) from product group by pname;
            3. 统计每类商品的总金额, 并且总金额大于4000  
                select pname,sum(price) from product group by pname having sum(price)>4000;
                select pname,sum(price) as sp from product group by pname having sp > 4000;
                select pname,sum(price) sp from product group by pname having sp > 4000;
            4. 统计每类商品的总金额, 并且总金额大于4000, 然后按照总金额进行降序排列.  
                select pname,sum(price) sp from product group by pname having sp > 4000 order by sp desc;
                
                
                
                
            5. 统计每类商品的总金额, 并且总金额大于2000, 然后按照总金额进行降序排列,
               只统计单价在1500(包括)以上的商品.
                 select pname,sum(price) sp from product where price>=1500 
                 group by pname having sp >2000 order by sp desc;
            
            一个完整的SQL查询语句的格式:
                select 列名1,列名2,列名3 from 数据表名 where 分组前的条件筛选 group by 要分组的列 
                having 分组后的条件筛选 order by 排序的列 [asc/desc];
面试题:
1. delete from 和 truncate table 都可以删除表中的数据, 这两种删除方式之间有什么区别?
    delete from: 
        清空表中的数据, id不会重置.
        属于DML语句, 可以和 事务 结合使用.
    truncate table:
        相当于把表给删除, 然后再创建一张一模一样的表出来.      //可以理解为: id会重置.
        属于DDL语句, 不可以和 事务 结合使用.

2. where 和 having 之间有什么区别?
    where: 用于做分组前的条件筛选, 后边不能跟聚合函数.
    having: 用于做分组后的条件筛选, 后边可以跟聚合函数.

相关文章

  • 设立具体的目标

    2018-08-23 戴师傅 2018-08-23 20:32 打开App (稻盛哲学学习会)打卡第120天 姓名...

  • 数据库(一)2018-08-23

    数据库: 1. 你知道的存储数据的方式有几种? 2. 我们常说的数据库其实指的是数据库管理系统(DBMS), 数据...

  • 去掉烂模式,从自己做起

    幸福时刻(173)2018.8.23 利花花 关注 2018-08-23 11:20 · 字数 2049 · 阅读...

  • 懂你 L4-U1-1-Dialogue

    流利说 D57 2018-08-23 四 一、复习 Level4-Unit1-Part1*Learning- Vo...

  • Day11 #100DaysofMLCoding#

    2018-08-23 24https://github.com/hse-aml/intro-to-dl以及如何用c...

  • 2018-08-23

    《如何学习》四 41晓春 晓春的蜗居 2018-08-23 07:19 · 字数 412 · 阅读 0 · 日记本...

  • 2018-08-23

    2018-08-23 事件:今天单位同事一起聚餐。 感受:开心,感恩,感谢。 想法:这几年和大家在一起很开心,感恩...

  • 设立具体的目标

    2018-08-23 (稻盛哲学学习会)打卡第101天 姓名:祝新华 部门:业务部 组别:待定 【知~学习】...

  • 设立具体的目标

    2018-08-23 (稻盛哲学学习会)打卡第140天 姓名:王燕君 部门:分水碶 组别:利他三组 【知~学习】 ...

  • Android集成友盟QQ分享闪退,IllegalStateEx

    问题: 集成友盟,分享到QQ,出现闪退。 手机:华为P10,操作系统:安卓 8.0 | 2018-08-23 22...

网友评论

      本文标题:数据库(一)2018-08-23

      本文链接:https://www.haomeiwen.com/subject/flrniftx.html