• mysql命令


    【创建数据库】

    语法:

    * create database 数据库名称 [character set 字符集 collate 字符集校对];

    练习:

    * 创建db1;

        * create database db1;

    * 创建一个带有字符集的数据库db2;

        *  create database db2 character set gbk;

    * 创建一个带有字符集和校对规则的数据库db3;

        * create database db3 character set utf8 collate  utf8_bin;

    【查看数据库】

    语法:

    * 查看数据库服务器中所有的数据库:

        * show databases;

    * 查看某个数据库的定义信息.

        * show create database 数据库名;

    * 查看当前正在使用的数据库信息.

        * select database();

    【删除数据库】

    语法:

    * 删除数据库:

        * drop database 数据库名;

    【修改数据库】

    语法:

    * 修改数据库修改的是的数据库的字符集和校对规则.

        * alter database 数据库名 character set 新字符集 collate 校对规则;

    【切换数据库】

    语法:

    * use 数据库名称;

     

    【创建表】

    • 语法:

    * create table 表名 (

        字段名 类型(长度) 约束,

        字段名 类型(长度) 约束,

        字段名 类型(长度) 约束

    );

     

    • 数据类型:

    * Java类型:             MySQL:

      byte/short/int/long   tinyint/smallint/int/bigint

      String                char/varchar

                                * 区别?char是固定长度的字符串,varchar可变长度的字符串.

                                * char(8) 和 varchar(8)

                                    * 如果插入一个字符串hello 插入到char 那么 插入hello   .插入到varchar中 插入hello

     float                  float

     double                 double

     boolean            bit

     Date                   date/time/datetime/timestamp

                            * datetime和timestamp都是既有日期又有时间的日期类型

                                * 区别? datetime需要使用外部传入的日期.如果没传这个值就是Null. timestamp会使用系统当前的时间作为这个值的默认值.

     文本文件                Text

     二级制文件               BLOB

    ***** Oralce使用CLOB/BLOB

    ***** MYSQL中除了字符串类型需要设置长度其他的类型都有默认长度.

     

    • 约束:

    单表约束:

    * 主键约束:primary key (默认就是唯一非空的)

    * 唯一约束:unique

    * 非空约束:not null

     

    • 创建一个表:
    • ***** 创建表之前先选择数据库:use 某个数据库;

    create table employee(

        eid int primary key auto_increment,

        ename varchar(20) not null,

        email varchar(30) unique,

        birthday date,

        job varchar(20),

        resume text

    );

    【表的查看】

    • 查看数据库中有哪些表:

    * show tables;

    • 查看表结构:

    * desc 表名;

    【表的删除】

    • 表的删除:

    * drop table 表名;

    【表的修改】

    • 修改表添加列:

    * alter table 表名 add 列名 类型(长度) 约束;

        * alter table employee add image varchar(50);

    • 修改表删除列:

    * alter table 表名 drop 列名;

        * alter table employee drop job;

    • 修改表的列的类型长度及约束:

    * alter table 表名 modify 列名 类型(长度) 约束;

        * alter table employee modify image varchar(80) not null;

    • 修改表的列名

    * alter table 表名 change 旧列名 新列名 类型(长度) 约束;

        * alter table employee change image eimage varchar(60);

    • 修改表名

    * rename table 旧表名 to 新表名;

        * rename table employee to user;

    • 修改表的字符集:

    * alter table 表名character set 字符集;

        * alter table user character set gbk;

     

     

    【插入记录】

    • 语法

    * insert into 表名 (列名,列名,...) values (值1,值2,...);     ---插入指定列的值

    * insert into 表名 values (值1,值2,...);                    ---插入所有列的值

     

    • 注意事项:

    * 列名的个数与值的个数对应.

    * 列的类型与值的类型对应.位置也要对应.

    * 列的类型如果是字符串或者日期,写值的时候使用单引号将值引起来.

    * 插入的值的最大长度不能超过列的最大长度.

     

     

    【修改记录】

    • 语法:

    * update 表 set 列名=值,列名=值 [where 条件];

    • 注意事项:

    * 列名和值类型也要一致.

    * 值不能超过列的最大长度.

    * 值是字符串或日期,需要使用单引号.

    • 练习:

    * 修改employee表中所有记录的job为WORKER

        * update employee set job='WORKER';

    * 修改employee表将name为aaa的邮箱改为aaa@163.com

        * update employee set email = 'aaa@163.com' where ename = 'aaa';

    * 修改employee表将name为bbb的邮箱改为bbb@163.com同时修改job为HR

        * update employee set email = 'bbb@163.com' , job='HR' where ename='bbb';

    【删除记录】

    • 语法:

    * delete from 表 [where 条件];

    • 注意事项:

    * 删除表中的一行记录,不能删除某列值

    * 如果没有条件删除表中的所有列.

    • 练习:

    * 删除id为8的记录:

        * delete from employee where eid = 8;

    * 删除所有记录:

        * delete from employee;

    • 删除表中的所有记录truncate table 表名  和 delete from 表  区别?

    * 区别:

        * truncate table 删除表的记录:将整个表删除掉,重新创建一个新的表.truncate属于DDL.

        * delete from 删除表的记录:一条一条进行删除. delete属于DML。

            * 事务管理 只能作用在DML语句上.如果再一个事务中使用delete删除所有记录,可以找回.

    【基本查询】

    • 查询语句:

    * select [distinct] *|列名 from 表 [where 条件];

     

    • 准备:

    create table exam(

        id int primary key auto_increment,

        name varchar(20),

        english int,

        chinese int,

        math    int

    );

     

    insert into exam values (null,'张三',85,74,91);

    insert into exam values (null,'李四',95,90,83);

    insert into exam values (null,'王五',85,84,59);

    insert into exam values (null,'赵六',75,79,76);

    insert into exam values (null,'田七',69,63,98);

    insert into exam values (null,'李四',89,90,83);

     

    • 查询所有记录:

    * select * from exam;

    • 查询这个班级人的姓名和英语成绩:

    * select name,english from exam;

    • 查询英语成绩,将重复英语成绩去掉:

    * select distinct english from exam;

    • 查询李四的学生成绩:

    select * from exam where name='李四';

    • 查询名称叫李四并且英语成绩大于90的

    select * from exam where name='李四' and english >90;

    • 将成绩+10分进行显示:

    select name ,english+10,chinese+10 ,math+10 from exam;

    • 显示这个人的名称和对应总成绩的分数:

    select name,english+chinese+math from exam;

    • 使用as起别名,as可以省略.

    select name , english+chinese+math as sum from exam;

    【条件查询】

    • where语句后面可以加:

    条件的关键字:

    = , > , >= , <, <= , <>

     

    like中可以使用占位符: _ 和 %  :下划线匹配一个字符, %:可以匹配任意多个字符.

    * like ‘张%’;  like ‘张_’; like ‘%明’; like ‘%明%’;

     

    in 后跟着一组值.

    * id in (1,2,3)

     

    and or not

    【排序查询】

    • order by 对数据进行排序.默认升序. (asc升序,desc降序)

    * 查询所有学生的信息,并且按语文成绩进行排序.

        * select * from exam order by chinese;

    * 查询所有学生的信息,并且按语文成绩进行降序排序.

        * select * from exam order by chinese desc;

    * 查询学生的信息,按照英语成绩降序排序,如果英语成绩相同,按照语文降序.

        * select * from exam order by english desc, chinese desc;

    * 查询姓李的学生的信息,同时按照英语升序排序.

        * select * from exam where name like '李%' order by english asc;

    【聚合函数】

    • sum()
    • count()
    • max()
    • min()
    • avg()

    * 查询每个学生总成绩:

        * select name,(english+chinese+math) from exam;

    * 统计所有学生的总分:

        * select sum(english+chinese+math) from exam;   -- ifnull(english,0)

        * select sum(english)+sum(chinese)+sum(math) from exam;

    * 统计学生的个数:

        * select count(*) from exam;

    * 统计英语成绩的最高分:

        * select max(english) from exam;

    * 统计语文成绩的最低分:

        * select min(chinese) from exam;

    * 统计英语成绩平均分:

        * select avg(english) from exam;

    【分组】

    • group by

    创建一个订单详情的表:

    * 统计订单中的每类商品所购买的个数:

        * SELECT product,COUNT(*) FROM orderitem GROUP BY product;

    * 统计订单中的每类商品所花的金额:

        * SELECT product,SUM(price) FROM orderitem GROUP BY product;

    * 统计订单中的每类商品所花总金额大于2000信息.

        * SELECT product,SUM(price) FROM orderitem GROUP BY product HAVING SUM(price) > 2000;

     

    * 统计订单中名称有电子的商品并且所花金额大于1500同时按照价格降序排序:

        * SELECT product,SUM(price) FROM orderitem WHERE product LIKE '电%' GROUP BY product HAVING SUM(price) > 1500 ORDER BY SUM(price) DESC;

    【SQL的查询语句的总结】

    顺序:    s...f...w...g...h...o...;

  • 相关阅读:
    TO DO List
    springboot 热部署
    <dependencyManagement>的作用
    人体工程学座椅
    temp
    temp
    声明式编程和命令式编程的本质区别
    weak first question
    Spring依赖注入方式和依赖来源
    SpringBoot 整合 H2 数据库
  • 原文地址:https://www.cnblogs.com/czb2580/p/6233581.html
Copyright © 2020-2023  润新知