美文网首页
Day_01 MYSQL(上)

Day_01 MYSQL(上)

作者: DarkMonster | 来源:发表于2017-08-23 18:23 被阅读0次

    遇到的一些问题:
    Q1:如果在MySQL中一个表test中的id字段设为auto_increment插入两条记录后id=2,此时删除一条记录再插入一条变成id自增时跳过了2,如何设置在新插入一条时,id从2开始技术使用.

    问题如图:

    1.png
    解决办法有两个:
    法一:插入数据时直接设置好id
    法二:使用:mysql>alter table 表名 auto_increment = 2;
    可以使新添加一条时,id从2开始,
    如果auto_increment=值小于max(id),则id从max(id)+1开始计数.
    Q2:关于如何设置date字段的值?
    解决办法:update 表名 set date='2014-02-09' where 条件;
    注意:在添加date时需要将date的值用单引号括起来!

    进去mysql控制台 :
    win+r------>cmd------>mysql -u 用户名 -p(回车之后输密码)(mysql -u用户名 -p密码)
    查询数据库:show databases;
    使用数据库:use database 数据库名;
    查询某一个数据库中有哪些表:show create database 数据库名
    查询数据库中的表:show tables;
    查询表结构::desc 表名;
    查询表中的所有数据:select * from 表名;
    一丶SQL语言(Structured Query Language):结构化查询语言,可以很方便的存储数据库,以及更新,删除和管理数据库管理系统.
    分类:DDL:数据定义语言,主要是用于定义数据库,数据表,列等
    关键字:create,drop,alter
    DML:数据库操作语言,主要是用来对数据增,删,改的操作
    关键字:insert,delete,update
    DCL:数据库控制语言,主要是用来设置权限以及创建用户的.
    DQL:数据库查询语言,主要是用于查询数据表中的数据
    关键字:select,from,where
    CURD----->CREATE/UPDATE/READ/DELETE

    如果列名是关键字, 则需要用包起来(tab键上面那个),如:`desc` 二丶SQL完成对数据库的操作: 创建数据库: `create database 数据库名;` 修改数据库字符编码: `create database 数据库名 character set 字符集格式; 修改数据库: `alter database 数据库名 character set 制定的码表名;` `//alter database web_01 character set utf8;` 删除数据库: ` `drop database 数据库名;
    查询数据库:
    show databases;``(查询所有数据库)
    创建数据库:
    create database 数据库名;
    create database 数据库名 character set 字符集格式;
    修改数据库:
    alter database 数据库名 character set 指定的码表名;
    //alter database web_01 character set utf8;
    删除数据库:
    drop database 数据库名;
    查询数据库:
    查看所有的数据库:
    show databases;
    查看某一个数据库(中有哪些表):
    show create database 数据库名;
    使用数据库:
    use 数据库名;

    注意:
        数据库的操作是一个不可逆的操作, 执行了就是执行了, 并不能撤销.
    

    三丶SQL完成对数据库表的操作
    创建表:
    create table 表名(
    字段名 字段类型(长度) [约束],
    字段名 字段类型(长度) [约束],
    字段名 字段类型(长度) [约束]
    );
    字段类型:
    Java MySQL
    byte/short/int/long tinyint/smallint/int/long
    float/double float/double
    char/String char/varchar
    char: 长度固定的字符串
    varchar: 长度可变的字符串
    Date date/time/datetime/timestamp
    datetime: 必须手动设置.
    timestamp:时间戳, 利用系统当前时间存入.
    File BLOB/TEXT(CLOB)
    约束:
    作用: 保证数据的完整性.
    单表操作的约束:
    主键约束: primary key //auto_increment 自动增长
    唯一约束: unique
    非空约束: not null
    测试: 创建一个员工表.
    create table employee(
    eid int,
    name varchar(20),
    sex varchar(10),
    birthday date ,
    salary double,
    intfo varchar(200)
    );

            create table employee(
                eid int primary key auto_increment,
                name varchar(20) unique,
                sex varchar(10) not null,
                birthday date not null,
                salary double not null,
                intfo varchar(200) not null
            );
    
    
    删除表:
        drop table 表名;
    
    查看当前数据库中所有的数据表:
        show tables;
    查看某个表的结构:
        desc 表名;
    
    修改表:                //理解
        添加字段:
            alter table 表名 add 字段名 类型(长度) 约束;
            //alter table employee add image varchar(50) not null;
        修改字段类型长度和约束
            alter table 表名 modify 字段名 类型(长度) 约束;
            //alter table employee modify image varchar(100);
        修改字段名(列名):
            alter table 表名 change 旧字段名 新字段名 类型(长度) 约束;
            //alter table employee change image image2 varchar(200);
        删除字段:
            alter table 表名 drop 字段名;
        修改表名:
            rename table 旧表名 to 新表名;
        修改表的字符集:
            alter table 表名 character set 字符集;
    
    1. SQL完成对数据库表中记录的操作 //务必掌握
      注意:
      1. 值的个数与字段的个数要一致.
      2. 值的类型与字段的类型要一致.
      3. 值的长度不能超过字段设置的最大长度.
      4. 数字类型的值可以直接写, 其他类型的值要用''号引起来.
    插入数据:
        插入部分数据:
            insert into 表名(字段1, 字段2, 字段3...) values(值1, 值2, 值3...);
        插入所有数据:
            insert into 表名 values(值1, 值2, 值3);
        插入多条数据:
            insert into 表名 values(值1, 值2, 值3),(值1, 值2, 值3),(值1, 值2, 值3);
    
        插入中文数据会出现乱码问题:
            产生问题的原因:
                控制台(windows操作系统)默认用的字符集(码表)是GBK, 而MySQL默认用的码表是UTF-8;
            解决方案:
                方案一:
                    1. 找到MySQL安装目录下的my.ini文件,
                    2. 将[client]下的default-character-set的值改为: gbk
                        /*
                            [client]
    
                            port=3306
    
                            [mysql]
    
                            default-character-set=gbk
                        */
                    3. 然后重新启动MySQL服务.
                    
                    //services.msc windows执行, 打开本地服务.
                方案二:
                    临时设置当前MySQL服务的码表为: gbk.
                    //set names gbk;
                    //insert into employee(name,sex) values('珍亮','男');
    修改数据:
        修改某条记录:
            update 表名 set 字段名=值, 字段名=值 where 条件;
        修改全部记录:
            update 表名 set 字段名=值, 字段名=值;
    
    删除数据:
        删除多条记录:
            delete from 表名;
        删除一条记录:
            delete from 表名 where 条件;
        注意:
            删除的都是表中的一条记录.
    
        面试题:
            delete from 和 truncate table 之间有什么区别?
                delete from:
                    是一条记录一条记录的删除, 属于DML语句.
                    //事务作用在DML上的
                    /*
                        示例:
                            start transaction;      //开启事务
                            delete from employee;   //删除employee表中的数据
                            select * from employee; //查询employee表中的数据
                            rollback;               //事物回滚
                            select * from employee; //查询employee表中的数据
                    */
                    
                truncate table:
                    是将整个表删除了, 然后重新创建一个与之一样的表, 属于DDL语句.
    
    
    查询数据:
        基本的查询语句:
            select * from 数据表名;
    
            select * from 表 where 条件;
        条件:
            1. 比较运算符
                >, <, >=, <=, =, <> 
            2. 逻辑运算符
                and, or, not
            3. 区间的判断
                between 值1 and 值2;
            4. 固定值的判断
                in 多条件查询
            5. 模糊查询
                like 模糊查询
    
        案例:
            创建学生成绩表:
                create table exam( 
                    id int primary key auto_increment,
                    name varchar(20),
                    chinese int,
                    math int,
                    english int
                );
            往表中添加几条数据:
                insert into exam values(1,'张三',82,69,90),
                (2,'李四',50,41,62),
                (3,'王五',59,59,59),
                (4,'赵六',98,99,99),
                (5,'田七',96,59,41),
                (6,'王二麻子',60,83,51);
    
        需求:
            1. 查询英语成绩大于90的学生信息.
            
            2. 查询姓名为张三的学生信息.
            
            3. 查询学生英语成绩不是90分的学生信息.
        
            4. 查询姓王的学生的信息
                like关键字: 模糊查询
                使用_或者%作为占位符, _代表一个字符, %代表多个字符
                //示例: like '%三%';
                
            5. 查询英语成绩是59,62,90分的学生信息.
                in关键字: 放入多个条件值.
                
            6. 查询数学成绩在70-100之间的所有的数据.
                
                
    
    表达式查询:
        1. 查询学生姓名和学生总成绩.
            //select name, chinese + math + english from exam;
        2. 别名查询 使用 as 关键字, as 可以省略
            //select name, (chinese + math + english) as sum from exam;
        3. 查询姓王的学生的总成绩
            //select name, (chinese + math + english) as sum from exam where name like '王%';
    
    
    排序查询:
        select * from 表名 where 条件 order by 字段 asc/desc;
        
        1. 查询姓名和数学成绩, 按数学成绩排序.
            select name,math from exam order by math; 
        2. 查询姓名和语文成绩, 按语文成绩倒序排序.
            select name,chinese from exam order by chinese desc;
        3. 查询学生成绩, 按数学成绩排序, 如果数学成绩相同, 按英语成绩排序.          //????
            select * from exam order by math asc, chinese desc;
        4. 查询姓王学生信息并按数学排序
            select * from exam where name like '王%' order by math;
            
        
    聚合函数:
        count
        sum
        max
        min
        avg
        
        1. 查询成绩表中总共有多少条记录.
            select count(*) from exam;
        2. 查询语文成绩的平均值.
            select avg(chinese) from exam;
        3. 查询语文成绩的最大值.
            select max(chinese) from exam;
        4. 查询英语成绩的最小值.
            select min(english) from exam;
        5. 查询数学成绩的总和.
            select sum(math) from exam;
            
    分组统计:
        关键字: group by
        
        案例: 创建产品表
            create table product(
                pid int primary key auto_increment,
                pname varchar(20),
                price int
            );
            
            insert into product values('冰箱',2000),
            ('冰箱',1000),
            ('冰箱',1500),
            ('洗衣机',2000),
            ('电视机',3000),
            ('洗衣机',1000),
            ('电视机',10000),
        
        需求:
            1. 统计每类商品的个数.
                //select pname, count(*) from product group by pname;
            2. 统计每类商品的总金额.
                //select pname, sum(price) from product group by pname;
            3. 统计每类商品的总金额, 并且总金额大于7000
                //select pname, sum(price) from product group by pname having sum(price)>7000;
            
        总结:
            查询语句格式:
                select * from 表名 where 条件 group by 字段 having 条件 order by 字段
    
    
    记忆:
        在进行更新语句操作的时候, 一定要备份, 一定要备份, 一定要备份.
    

    相关文章

      网友评论

          本文标题:Day_01 MYSQL(上)

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