mysql数据库sql语句

数据库(mysql)
    sql是一种编程语言,用于存储,查询,更新,管理关系型数据库
    分为四类:
        DDL:数据定义语言        //针对于数据库和表,creat drop alter select 
        DCL:数据控制语言        //grant...if
        DML:数据操纵语言        //操作表中数据,insert delete update
        DQL:数据查询语言        //查询:select

1.数据库的创建/删除/查/切换
    a)Create database 数据库名称      //创建数据库
    b)Drop database 数据库名称        //删除数据库
    c)Show databases                 //查看所有数据库
    d)Use 数据库名称                //切换数据库
    
2.数据表的操作 创建/删除/修改/show
    1 Creat table 表名(字段名1 类型 约束, 字段名2 类型 约束。。。)  //创建表格
        i.类型:
            Java中的类型                MySQL中的类型
            byte/short/int/long         tinyint/smallint/int/bigint
            float                        float
            double                        double
            boolean                        bit
            char/String                    char和varchar类型  //char 表示固定长度的字符串,varchar表示可变长度的字符串
                                                            定义时需指定长度。
            Date                        date/time/datetime/timestamp  //datetime 与datestamp均表示日期时间,区别datetime默认null,datestamp默认当前系统时间
            file                        blob/text
        ii.约束:
            primary key    //主键约束
            not null     //非空约束  
            unique        //唯一约束
            
    2 show tables    //查看所有表
        desc 表名    //查看某个表结构
            
    3 Drop table 表名     //删除
    
    4 修改表:
        alter table 表名 add 列名 字段类型(长度) [约束]                  //添加列
        alter table 表名 drop 列名                                        //删除列
        alter table 表名 change 旧列名 新列名 字段类型(长度) [约束]    //修改列名    
        alter table 表名 modify 列名 字段类型(长度) [约束]                //修改字段类型/长度/约束
        alter table 表名 rename to 新表名                                //修改表名
        rename table 表名 to 新表名
        alter table 表名 chatacter set 新字符集 [collate字符集校验规则]    //修改字符集
        
3.表记录操作

    1 添加数据
        Insert into 表名(列1,列2,列3) values(值1,值2,值3)    //添加部分数据
        insert into 表名 values(值1,值2,值3 。。。)    //添加数据
    2 修改数据
        update 表名 set 列1=值1,列2=值2,...[where 条件];//省略where条件则修改整列值
        
    3 删除数据
        delete from 表名 [where 条件]    //删除满足条件的记录
        delete from 表名   //删除所有记录,一行一行删
        truncate table //删除表,将表删除,然后创建一张和之前表结构相同的新表trancate table 
        
    4 基本查询
        select * from 表名 where 条件   //按一定条件查询记录
        select * from 表名 where name like "李%";  //模糊匹配  "%"代表0个或者多个占位符  "_"表示一个占位符,还可以not like 。。。
        select * from 表名 where name in (a,b,c...)  //在指定范围内查找记录,也可以使用between...and... 实现,前面可以加not
        select * from 表名 where  english >86 AND english <100; //查找英语成绩在80-100之间的记录,and ->与,or->或,not->否定
        select * from 表名 where name is null    //用is null 判断是否是空,is not bull 
    5 聚合函数:
        sum(字段名)   //求和,下面类似
        avg()   //求平均值
        count(*)  //统计个数
        min()   //求最小值
        max()   //求最大值
        ifnull(字段名,值)  //任何值和null相加均为null,用ifnull,如果该字段是null 那么用给定的值代替,不为null则返回原来的值
        
        拓展:    length(刘a) -->4            //计算字段值的长度,不属于聚合函数,一个中文占3个字符
                charlength(刘a) -->2     //字符长度
        
    6 分组函数
        group by 字段名 [having 条件]
        
        总结    selectfrom 表名 where 条件 group by 字段名 hanving 条件 order by asc/desc;
        having :当条件有聚合函数或者分组之后还需筛选,那么使用having过滤,其他情况用where
        where : 是对原始表中数据进行过滤,having是对查询结果进行过滤
        执行顺序:from...where...group by...select...having...order by
        
        
        分页查询
        select * from table limit 3,5;        //其中3表示从第四条记录开始,5表示查询5条数据
MySQL多表&事务
1.数据库的密码重置,备份和还原
    1 密码重置:跳过权限开启服务:mysqld –skip-grant-tables-->重新开启cmd,登录mysql-->use mysql-->update user set password=password(‘123’) where user=’root’;-->结束mysqld.exe,重新开启服务
    2 数据库还原:方式1:create database db3;-->退出数据库:\q 回车-->mysql -uroot -p db3 < c:/db3.sql
                    方式2:create database db3;-->source c:/db3.sql;
2.表与表之间的关系的建立
    1 一对多:在多的一方添加外键指向一的一方的主键
        添加外键:
            sql语句实现:foreign key (did) references dept(did)    //在创建表是添加语句:
                        constraint abc foreign key (did) references dept(did)  //abc 为之地指定的约束名,后续可通过名字删除外键
                        alter table employee add constraint abc foreign key (did) references dept(did) //在创建表之后添加外键
            工具实现:
    2 多对多:创建一张中间表,在中间表中至少有2个字段分别设置外键指向多对多双方的主键;
        
    3 一对一:假设其中一的一方为多的一方,在多的一方添加外键指向一的一方的主键,并且给外键再设置一个唯一约束
    
3.多表查询
    1 连接查询
        交叉连接:-->cross join
            select * from 表1 cross join 表2;    //查询到两个表的笛卡儿积
            select * from 表1,表2;                //省略了cross join
            
        内连接-->inner join 
            显示内连接    
                select * from 表1 inner join 表2 on 关联条件        //也可用where连接条件
            隐式内连接    
                select * from 表1,表2 where 关联条件; //较为常用
            
        外连接-->outer join 
            左外连接:
                select * from 表1 left outer join 表2 on 连接条件;
            右外连接:
                select * from 表1 right outer join 表2 on 连接条件; //outer均可省略
            
    2 子查询
        使用场景:一个查询语句的条件需要依赖另一个查询语句的结果就叫子查询,也就是说sql语句可以嵌套使用。
        分类
            带in的子查询:在给定的结果内查询
            带exists 子查询:如果exists后面的查询结果存在,执行前面的sql语句
            带any子查询:只要符合any后面查询语句的任何一个结果就行   //放在关系表达式中,表示任意
            带all的子查询:要符合all后面查询语句中的所有结果才行。    //表示所有
            
4.事务的概述-->指的是一组逻辑操作,要么同时成功要么同时失败。start transaction  commit   rollback
    使用事务:
        开启事务:start transaction
        提交事务:commit;
        回滚事务:rollback;
        
    四大特性:
        原子性:组成事务的最小单元是不可分割的,要么同时成功要么同时失败。  //同时成功,同时失败
        一致性:执行事务前后,数据的完整性是一致的;(也就是案例中总钱数是一样的)  //数据完整性
        隔离性:在数据库中,各个事务之间应该是独立的,不应该受其他事务的影响。 //独立
        持久性:事务一旦结束,数据就会序列化到数据库中。    
        
    事务的隔离级别:
        read uncommitted:脏读,不可重复读,虚读都有可能发生
        read committed    :避免脏读。但是不可重复读和虚读是有可能发生
        repeatable-read    :避免脏读和不可重复读,但是虚读有可能发生。
        serializable:避免脏读,不可重复读,虚读。
        从上到下级别越来越高,但是效率越来越低。

    脏读:一个事务读到了另一个事务未提交的数据。
    不可重复读:一个事务读到了另一个事务已经提交的update数据
    虚读/幻读:一个事务读到了另一个事务已经提交的insert数据

            
            
            
            

 

posted @ 2018-11-22 21:39  foreast  阅读(255)  评论(0编辑  收藏  举报