数据库小记

MySql 数据库

    DDL:数据定义语言 操作数据库、表。
        数据库操作
            查看所有数据库:
                ·show databases;
            查询当前数据库:
                ·show database();
            创建一个数据库:
                ·creat database 数据库的名字; 
                如果不存在则创建:
                ·creat database if not exists 数据库的名字;
            删除一个数据库:
                ·drop database 数据库的名字;
                如果存在则删除:
                ·drop database if exists 数据库的名字;
            使用一个数据库:
                ·use 数据库的名字;
        表操作
            查询当前数据库所有表:
                ·show tables;
            查询表结构:
                ·desc 表名
            查询指定表的建表语句:
                ·show creat table 表名;                
            创建表: 
                create table 表名();
            添加字段
                ·alter table 表名 add 字段名 类型;
            修改字段
                修改数据类型
                ·alter table 表名 modify 字段名 新的数据类型;
                修改字段名和数据类型
                ·alter table 表名 change 旧字段名 新字段名 新的数据类型;
            删除字段
                ·alter table 表名 drop 字段名
            修改表名
                · alter table 表名 rename to 新表名
            删除表
                ·drop table 表名
            删除表,并重新创建该表
                truncate table 表名;
    DML:数据操作语言,对数据库中表的数据记录进行增删改操作
        添加数据:
            给指定字段添加数据
                ·insert into 表名(字段名1,字段名2,....)  values(值1,值2.....)
            给全部字段添加数据
                ·insert into 表名 values(值1,值2.....);
            批量添加数据
                ·insert into 表名(字段名1,字段名2,....)  values(值1,值2.....),(值1,值2.....),(值1,值2.....);
                ·insert into 表名 values(值1,值2..),(值1,值2..),(值1,值2..);
            修改数据    
                ·update 表名 set 字段名1=值1,字段名2=值2,....[where 条件]
            删除数据
                ·delete from 表名 [where 条件]

    DQL:数据查询语言 用来查询数据库中表的记录
         
            select 
                字段列表 
            from 
                表名列表
            where
                条件列表
            group by
                分组字段列表
            having
                分组后条件列表
            order by
                排序字段列表
            limit
                分页参数
         
         基本查询
            查询多个字段
                ·select 字段列表 from 表名;
            查询所有字段
                ·select * from 表名;    
                
            去除重复记录
                ·select distinct 字段列表 from 表名
            设置别名
                ·select 字段1[as 别名1],字段2[as 别名2]...from 表名
        条件查询
            ·select 字段列表 from 表名 where 条件列表
            
        聚合函数
             ·count(列名)  列名不能为空
                  取值有两种情况
                   1、主键
                   2、*
             ·max(列名) 
             ·min(列名) 
             ·sum(列名) 
             ·AVG(列名)
            ·select 聚合函数名(列名) from 表;     
                null不参与聚合函数的运算
        分组查询
            ·select 字段列表 from 表名 [where 条件] group by 分组字段名[分组后的过滤条件]
             
             where 和 having区别
               ·执行时机不一样:where是分组之前进行限定,不满足where条件 则不参与分组,
                    而having是分组之后对结果进行过滤
               ·可判断条件不一样:where不能对聚合函数进行判断
        排序查询
            ·select 字段列表 from 表名 order by  字段1 排序方式,字段2 排序方式;
                排序方式
                    ·ASC:升序(默认)
                    ·desc:降序
        分页查询
            ·select 字段列表 from 表名 limit 起始索引,查询条目数
                 ·起始索引 从0开始查询
                  ·起始索引 = 每页显示的条数*(当前页码 - 1) 
                 
                 
                 从0 开始查询 查询 n 条数据
                  selec * from stu limit 0 ,n;
                 
                 每页显示 n 条数据 查询第一页数据、
                  selec * from stu limit 0 ,n;
                  
                 每页显示 n 条数据 查询第二页数据
                  selec * from stu limit n ,n;
                  
                 每页显示 n 条数据 查询第三页数据
                  selec * from stu limit n*(当前页码 - 1) ,n;
    DCL:数据控制语言,用来管理数据库用户、控制数据库的访问权限
        用户管理
            
函数
    字符串函数
        concat(): 字符串拼接
        lower(str):将字符串str全部转为小写
        upper(str):将字符串str全部转为大写
        lpad(str,n,pad):左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
        rpad(str,n,pad):右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
        trim(str):去除字符串头部和尾部的空格
        substring(str,start,len):返回字符串str,从start位置起的len个长度的字符串
    数值函数
        ceil(x):向上取整
        floor(x):向下取整
        mod(x,y):
        rand():返回0-1内的随机数
        round(x,y):求参数x的四舍五入的值,保留y位小数
    日期函数
        curday():返回当前日期
        curtime():返回当前时间
        now():返回当前日期和时间
        year(date):获取指定date的年份
        month(date):获取指定date的月份
        day(date):获取指定date的日期
        date_add(date,interval expr type):返回一个日期/时间加上一个时间间隔expr后的时间值
                type:year,month,day
        dateiff(date1,date2):返回起始时间date1和结束时间date2之间的天数
    流程函数
        if(value,t,f):如果value为TRUE,则返回t 否则返回f
        ifnull(value1,value2):如果value不为空,则返回value1 否则返回value2
        case when[val1] then[res1]...else[default] end:如果val1为TRUE 返回res1,..否则返回default的默认值 
        case [expr] when[val1] then[res1]...else[default] end:如果expr的值等于val1,返回res1,否则返回default的默认值 
        
约束
        是作用于表中列上的规则,用于限制加入表的数据
         ·约束的存在保证了数据库中数据的正确性、有效性、完整性
        分类 
        约束名称   关键字        
         非空约束   not null
         唯一约束   unique    保证列中所有数据各不相同
         主键约束   primary key   一行数据的唯一标识 非空且唯一
         检查约束   check
         默认约束   default
          
                 例子
                     CREATE TABLE emp(
                           id int PRIMARY KEY  auto_increment,-- 员工id,主键且自增长
                                                                ename VARCHAR(50) not null UNIQUE, -- 员工姓名 非空并且唯一
                           joindate date not NULL, -- 入职日期非空
                           salary DOUBLE(7,2) not NULL,-- 工资 非空
                           bouns DOUBLE(7,2) default 0-- 奖金 如果没有则默认为0
                       );
         外键约束:foreign key   用来让两个表数据之间建立连接,保证数据的一致性和完整性    
              1、添加约束
               创建表时添加约束
                create table 表名(
                 列名  数据类型,
                 ....
                 [constraint] [外键名称] foreign key(外键列名) reference 主表(主表列名)
                 -- 添加外键 dep_id,关联dept 表的id主键
                 CONSTRAINT fk_emp_dept FOREIGN KEY (dep_id) REFERENCES dept(id)
                 );
               建完表后添加外键约束
                    ALTER table 表名 add CONSTRAINT 外键名称 foreign key(外键字段名称) reference 主表名称(主表列名称);
                    ALTER table emp add CONSTRAINT fk_emp_dept foreign key(dep_id) REFERENCES dept(id);
              2、删除
                      ALTER TABLE 表名 DROP FOREIGN key 外键名称;
                      ALTER TABLE emp DROP FOREIGN key fk_emp_dept;
                    
多表查询
    表关系
       一对一:
        多用于拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另外一张表,用于提升查询性能
            实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(unique)
       一对多:
            实现方式:在多的一方建立外键,指向一的一方的主键
       多对多:
            实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
            
    多表查询
       select * from emp.dep_id = dept.did;
       
       ·连接查询
            ·内连接 
                相当于A.B交集数据
                     -- 隐式内连接
                      select 字段列表 from 表一,表二  where 条件;
                      
                      select emp.name emp.gender ,dept.dname from emp ,dept where emp.dep_id = dept.id;
                      
                     -- 显示内连接
                      select 字段列表 from 表1 [inner] join 表2 on 条件;
                      
                      select * from emp inner join dept on emp.dep_id = dept.id
             
            ·外连接
                左外连接

                  select 字段列表 from 表1 left[outer] join 表2 on 条件;
                 
                右外连接
                  select 字段列表 from 表1 right[outer] join 表2 on 条件;
            ·自连接
                
                select 字段列表 from 表A 别名A  join 表A 别名B on 条件;
                
        联合查询
        
              select 字段列表 from 表1 right[outer] join 表2 on 条件;
        
        子查询(嵌套查询)
           
            根据查询结果不同,作用不同
             ·单行单列  作为条件值 使用= != > <等进行判断
               select 字段列表 from 表 where 字段名 = (子查询);
               
             ·多行单列  作为条件值  使用in等关键字进行条件判断
               select 字段列表 from 字段名 in (子查询);
               
             ·多行多列   作为虚拟表
             
               select 字段列表 from (子查询) where 条件;
事务
        ·数据库的事务是一种机制、一个操作序列,包含了一组数据库操作命令
        ·事务把所有的命令作为一个整体一起向系统提交或者撤销操作请求,即这一组数据库命令要么同时成功
            要么同时失败
        ·事务是一个不可分割的工作逻辑单元
            -- 开启事务
                start transaction; 或者 begin
            --提交事务
                commit
            -- 回滚事务
                rollback
                
    ***    事务的四大特征
            1、原子性:事务是不可分割的最小单位,要么同时成功,要么同时失败
            2、一致性:事务完成时,必须使所有的数据都保持一致状态
            3、隔离性:多个事务之间,操作的可见性
            4、持久性:事务一旦提交或者回滚,它对数据库中的数据的改变是永久的
            
        查询事务的默认提交方式
        select @@autocommit;            
        并发事务的问题
            脏读、不可重复读、幻读
            

存储引擎
     show ENGINES,查看数据库的存储引擎
     
     
索引
    innodb中存储引擎分为/(B+树)
        聚集索引:
            将数据存储与索引放到一块,索引结构的叶子结点保存了行数据    
            特点:有且仅有一个
            选取规则:
                如果主键存在,主键索引就是聚集索引
                如果主键不存在,将使用第一个唯一索引作为聚集索引
                如果没有主键,或者没有合适的唯一索引,则innodb会自动生成一个rowid作为隐藏的聚集索引
        二级索引:
            将数据和索引分开存储,索引结构的叶子节点关联对应的主键  
            特点:可以存在多个
    
    创建索引
        create [unique|fulltext] index index_name on table_name(idnex_col_name,....);
    查看索引
        show index from table_name
    删除索引


SQL性能分析
        show [session|global] status 命令可以提供服务器状态信息,通过如下指令可以查看当前数据库
        的insert、update、delete、select的访问频次
        show global status like 'com__'
        

你可能感兴趣的:(数据库,mysql,java)