mysq基础命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysq基础命令相关的知识,希望对你有一定的参考价值。

 

一.数据库命令规范  

        <1> 在数据库系统中,SQL语句不区分大小写(建议用大写) 。但字符串常量区分大小写。建议命令大写,表名库名小写;

        <2> SQL语句可单行或多行书写,以“  ;  ”结尾。关键词不能跨多行或简写。

        <3> 用空格和缩进来提高语句的可读性。子句通常位于独立行,便于编辑,提高可读性。

        SELECT * FROM tb_table

                    WHERE NAME="YUAN";

        <4> 注释:单行注释:--

                       多行注释:/*......*/

        <5>sql语句可以折行操作

        <6> DDL(基本命令),DML(操作命令)和DCL

二.数据库基本命令

    2.1数据库基础命令

        启动数据库:net start mysql  

        关闭数据库:net stop mysql  

        链接数据库:mysql -h 服务器IP -P 端口号 -u用户名 -p密码 --prompt 命令提示符

        退出命令:quit  exit   \q  都可以

        显示警告信息:show warnings;

        显示当前时间: select now(); 

        显示当前版本信息: select version(); 

        显示当前用户:select user();

    2.2库命令 database  DDL

        查询所有库:show databases;

        查询当前使用的库:select database();

        查询库的创建方式:show create database 库名;

        创建库:create database [if not exists] 库名 [character set utf8] 

                       if not exists 是如果存在不创建,不报错

                       character set utf8 是设置库的编码格式

        修改库的编码格式:alter database db_name [character set 编码格式];

        删除库:drop database [if exists] db_name;

        使用库(切换库): use 库名;   

        注:创建库主要是对文件夹中的数据操作。一个库就是一个文件夹。        

    2.3表命令

        查询所有表:show tables;

        创建表:create table 表名 (主键 类型 [约束] ,字段名 类型 [约束],。。。最后一条不加逗号) [character set utf8]

                    主键:唯一且不为空  primary key  归为约束条件

                    自增约束条件:auto_increment

                    设置字段默认值:default 值  注意中文要加引号

                    类型:数字型  字符串型  日期型  点击查看所有

SQL
create table employee(
       id int primary key auto_increment ,
       name varchar(20),
       gender bit default 1, 
       birthday date,
       entry_date date,
       job varchar(20),
       salary double(4,2) unsigned,
       resume text    -- 注意,这里作为最后一个字段不加逗号          
       );  
         
       /* 约束:
       primary key (非空且唯一):能够唯一区分出当前记录的字段称为主键!
       unique
       not null
       auto_increment 主键字段必须是数字类型。
       外键约束 foreign key  */


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

        查看表信息:

           查看表结构: desc tab_name 

           查看表结构 : show columns from tab_name  

           查看当前数据库中的所有的表  show tables 

           查看当前数据库表建表语句   show create table tab_name            

        修改表结构

          (1)增加列(字段)

          alter table tab_name add [column] 列名 类型[完整性约束条件][first|after 字段名];

          alter table user add addr varchar(20) not null unique first/after username;

          #添加多个字段

              alter table users2 

                    add addr varchar(20),

                    add age  int first,

                    add birth varchar(20) after name;

        (2)修改一列类型

          alter table tab_name modify 列名 类型 [完整性约束条件][first|after 字段名];

          alter table users2 modify age tinyint default 20;

          alter table users2 modify age int  after id;

         (3)修改列名

          alter table tab_name change [column] 列名 新列名 类型 [完整性约束条件][first|after 字段名];

          alter table users2 change age Age int default 28 first;  

        (4)删除一列

      alter table tab_name drop [column] 列名;

      -- 思考:删除多列呢?删一个填一个呢?

          alter table users2 

                add salary float(6,2) unsigned not null after name,

                drop addr;    

        (5)修改表名

          rename table 表名 to 新表名;

        (6)修该表所用的字符集    

          alter table student character set utf8;

 

    4.删除表

        drop table tab_name;

 

    5 添加主键,删除主键

        alter table tab_name add primary key(字段名称,...) 

        alter table users drop primary key;

        

        alter table test modify id int;   

        -- auto_increment没了,但这样写主键依然存在,所以还要加上下面这句

        alter table test drop primary key;-- 仅仅用这句也无法直接删除主键

SQL
create table article(
            id int primary key auto_increment ,
            title varchar(20),
            publish_date INT,
            click_num INT,
            is_top TINYINT(1),
            content TEXT
          );


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

三.表纪录操作

    3.1数据插入

        第一种:insert into 表名 (字段,字段1) values (值,值1);

                            注意:必须将非空字段写上,字段数量和值数量也必须一一对应

        第二种:insert into 表名 values (值,值1...);

                            注意:值必须安装设计表的所有字段顺序填写

        插入多条值:值的括号后加 逗号,  区分,再继续写就可以了

    3.2 数据修改

        update tab_name set field1=value1,field2=value2,......[where 语句]

             UPDATE语法可以用新值更新原有表行中的各列。

             SET子句指示要修改哪些列和要给予哪些值。

             WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

SQL
update employee_new set salary=salary+4000 where name=‘yuan‘;


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

 

    3.3 数据删除

        delete from tab_name [where ....]  一条一条删除

        truncate table emp_new; 直接删除文件,再创建一个同样的空表

    3.4数据查询

          查询所有字段:select * from 表名;

          查询单个或固定的字段:select id,name from 表名;

          对查询的数据操作显示: select id,name,ret+100 from 表名;

          对查询的数据字段别名:select id,name as 姓名 from 表名;

          对查询的数据去重: select distinct name,ret from 表名;

          对查询数据加条件:select id,name,ret from 表名 where ret>60;         

                    比较运算符:

                              > < >= <= <> !=

                             between 80 and 100 值在10到20之间

                             in(80,90,100) 值是10或20或30

                             like ‘hairui%‘ 模糊匹配 hairui开头的

                             like ‘hairui_‘  匹配hairui在加任意一位,下划线只代表一位,几个代表几个

                    逻辑运算符

                        在多个条件直接可以使用逻辑运算符 and or not

        练习:

SQL
-- 查询JS分数在 70-100之间的同学。
select name ,JS from ExamResult where JS between 80 and 100;
-- 查询Django分数为75,76,77的同学。
select name ,Django from ExamResult where Django in (75,98,77);
-- 查询所有姓王的学生成绩。
select * from ExamResult where name like ‘王%‘;
-- 查询JS分>90,Django分>90的同学。
select id,name from ExamResult where JS>90 and Django >90;
-- 查找缺考数学的学生的姓名
select name from ExamResult where Database is null;


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

    3.5 Order by 指定排序

          select *|field1,field2... from tab_name order by field [Asc|Desc]

             -- Asc 升序、Desc 降序,其中asc为默认值 ORDER BY 子句应位于SELECT语句的结尾。

SQL
 -- 练习:
-- 对JS成绩排序后输出。
select * from ExamResult order by JS;
-- 对总分排序按从高到低的顺序输出
select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0));
--总成绩 from ExamResult order by 总成绩 desc;
-- 对姓李的学生成绩排序输出
select name ,(ifnull(JS,0)+ifnull(Django,0)+ifnull(Dababase,0)) as
    总成绩 from ExamResult where name like ‘a%‘ order by 总成绩 desc;


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

    3.6 group by 分组查询 

            将相同的数据进行分组,默认只显示第一条数据

            group by字句,其后可以接多个列名,也可以跟having子句,对group by 的结果进行筛选。 

SQL
-- 按位置字段筛选
select * from ExamResult group by 2;

 -- 练习:对成绩表按名字分组后,显示每一类名字的JS的分数总和
select NAME ,SUM(JS)from ExamResult group by name;
-- 练习:对成绩表按名字分组后,显示每一类名字的Django的分数总和>150的
--      类名字和django总分
select name,sum(Django) from ExamResult group by name having sum(Django)>150;


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

            一般使用分组进行求和等操作,需要用到聚合函数。

           聚合函数: sum  总和  avg 平均值   count 计数  mix 最小值  max 最大值

SQL
-- COUNT(列名):统计行的个数
-- 统计一个班级共有多少学生?先查出所有的学生,再用count包上
select count(*) from ExamResult;
-- 统计JS成绩大于70的学生有多少个?
select count(JS) from ExamResult where JS>70;
-- 统计总分大于280的人数有多少?
select count(name) from ExamResult
where (ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))>280;
-- 注意:count(*)统计所有行;     count(字段)不统计null值.

-- SUM(列名):统计满足条件的行的内容和
-- 统计一个班级JS总成绩?先查出所有的JS成绩,再用sum包上
select JS as JS总成绩 from ExamResult;
select sum(JS) as JS总成绩 from ExamResult;
-- 统计一个班级各科分别的总成绩
select sum(JS) as JS总成绩,
sum(Django) as Django总成绩,
sum(Database) as Database总成绩 from ExamResult;

-- 统计一个班级各科的成绩总和
select sum(ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0))
                       as 总成绩 from ExamResult;
-- 统计一个班级JS成绩平均分
select sum(JS)/count(*) from ExamResult ;
-- 注意:sum仅对数值起作用,否则会报错。

-- AVG(列名):
-- 求一个班级JS平均分?先查出所有的JS分,然后用avg包上。
select avg(ifnull(JS,0)) from ExamResult;
-- 求一个班级总分平均分
select avg((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))
            from ExamResult ;
-- Max、Min
-- 求班级最高分和最低分(数值范围在统计中特别有用)
select Max((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))
                 as 最高分 from ExamResult;
select Min((ifnull(JS,0)+ifnull(Django,0)+ifnull(Database,0)))
                as 最低分 from ExamResult;

-- 注意:null 和所有的数计算都是null,所以需要用ifnull将null转换为0!
--      -----ifnull(JS,0)


#本段代码来自 海瑞博客http://www.hairuinet.com/sql/20170277/index.html
 

     3.7 having 和 where两者都可以对查询结果进行进一步的过滤,差别有:

                     <1>where语句只能用在分组之前的筛选,having可以用在分组之后的筛选;

                     <2>使用where语句的地方都可以用having进行替换

                     <3>having中可以用聚合函数,where中就不行。

     3.8 limit 指定显示数据

                SELECT * from ExamResult limit 1; 只显示一行

                SELECT * from ExamResult limit 1,5; 显示从第二行开始,共显示5行

 

注:Mysql在执行sql语句时执行顺序:from  where  select group by  having order by

 

以上是关于mysq基础命令的主要内容,如果未能解决你的问题,请参考以下文章

MYSQ养成记-MYSQL基础增强

mysq基础

MySQ学习指南

MySQL基础操作命令

VSCode自定义代码片段——git命令操作一个完整流程

mysq基础