MySQL-SQL的分类以及基本的操作

1.DDL:数据定义语言

  用来定义数据对象:数据库,表,列等

  关键字:create、drop、alter等

  (1)操作数据库:CRUD

    1.C(Create):创建

      Ⅰ.创建数据库:create database 数据库名称;

      Ⅱ.指定数据库的字符集以及判断是否已经存在该数据库,如果存在就不创建该数据库:create database if not exists 数据库名称 character set 字符集名称(如:utf8);

    2.R(Retrieve):查询

      Ⅰ.查询所有数据库的名称:show databases;

      Ⅱ.查询某个数据库的字符集:查询某个数据库的创建语句:show create database 数据库名称;

    3.U(Update):修改

      Ⅰ.修改数据库的字符集:alter database 数据库名称 character set 字符集名称;

    4.D(Delete):删除

      Ⅰ.删除数据库:drop database 数据库名称;

      Ⅱ.判断数据库是否存在,如果存在再删除:drop database if exists 数据库名称;

    5.使用数据库

      Ⅰ.查询当前正在使用的数据库名称:select database 数据库名称;

      Ⅱ.使用数据库:use 数据库名称;

  (2)操作表

    1.C(Create):创建

      Ⅰ.语法:create table 表名(

            列名1 数据类型1,

            列名2 数据类型2,

            ......    ......,

            列名n 数据类型n

           );

      Ⅱ.复制表:create  table 复制的表名 like 被复制的表名;

      Ⅲ.数据库的数据类型:

    

 

 

         Ⅳ.注意:

         double类型要标注一共几个位,保留小数点后几位:create table score double(5,2);

         date,datetime,timestamp都是表示时间,区别是:date只表示年月日,datetime和timestamp都表达年月日时分秒,而timestamp如果不给它的字段赋值则默认使用当前的时间,而datetime如果不给它的字段赋值则显示的是null

 

    2.R(Retrieve):查询

      Ⅰ.查询某个数据库所有的表名称:show tables;

      Ⅱ.查询表结构:desc 表名称;

    3.U(Update):修改

      Ⅰ.修改表名:alter table 表名 rename to 新表名;

      Ⅱ.修改表的字符集:alter table 表名 character set 新的字符集;

      Ⅲ.添加列:alter table 表名 add 列名 数据类型;

      Ⅳ.修改列名,类型:alter table 表名 change 列名 新列名 新数据类型;

      Ⅴ.只修改类型:alter table 表名 modify 列名 新数据类型;

      Ⅵ.删除列:alter table 表名 drop 列名;

    4.D(Delete):删除

      Ⅰ.删除表:drop table 数据库表名;

      Ⅱ.如果存在该表则删除,如果不存在就不删除:drop table if exists 数据库表名;

2.DML:数据操作语言

  用来对数据库中的表进行增删改

  关键字:insert、update、delete等

  (1)添加数据:

      Ⅰ.可以将选择的列插入数据,没有选择的列值为null:insert into 表名(列名1,列名2,列名3,...,列名n) values(值1,值2,...,值n);

      Ⅱ.为所有的列插入数据:insert into 表名(列名1,列名2,列名3,...,列名n) values(值1,值2,...,值n);

  (2)删除数据:

      Ⅰ.删除单个数据:delete from 表名 where 条件;

      Ⅱ.删除该表的全部数据:

        delete from 表名;(不推荐,因为有多少条记录就会执行多少次删除操作,效率低下)

        truncate table表名;(推荐,这条sql语句是将该表先删除,然后在创建一个名字一模一样的空表,只执行两条sql语句,效率较高)

  (3)修改数据:

      Ⅰ.修改单个数据:update 表名 set 列名1=值1,列名2=值2,...,列名n=值n where 条件;

      Ⅱ.修改表中选择列的全部数据:update 表名 set 列名1=值1,列名2=值2,...,列名n=值n;

      Ⅲ.为某列的部份字段修改相同的数据(如修改这个表的部分数量减一):update 表名 set 列名=值 where id in(id1,id2,id3...idn);

3.DQL:数据查询语言

  用来查询数据库中表的记录

  关键字:select、where、

  (1)查询数据:

    Ⅰ.基本查询:select 查询的列名 from 表名;

 

      ①.去除重复的结果集:select distinct 列名 from 表名;(注意:如果该列名查询出来的结果还会有重复,则看一下重复的数据是否有空格的存在,如:'香港'和'香港 ')

 

      ②.计算数据之和:select 列名1,列名2,列名3,列名2+列名3 from 表名;(注意:该计算的数据之和如果任何一个数据是null,计算结果也是null,如列名2的结果是null,列名3有数据,则结果依然是null)

 

               select 列名1,列名2,列名3,ifnull(列名2,0)+列名3 from 表名;(解决了上述结果为null的情况,就是用ifnull来把为null的数据替换为0)

 

      ③.给列起别名:select 列名1,列名2,列名3,列名2+列名3 from 表名 as 别名;(把列名2+列名3的数据之和的这一列的列名起一个别名)

 

    Ⅱ.sql语句的查询可能用到的查询的条件:

      select

        字段列表  

      from

        表名列表

      where

        条件列表

      group by

        分组字段

      having

        分组之后的条件

      order by

        排序

      limit

        分页限定

    Ⅲ.条件查询:

      ①where字符句后跟条件

      ②比较运算符

         >、<、<=、>=、=、<>:在这些运算符中,没有==,是用=代替的,既可以使用!=,也可以使用<>,代表的意思一样

         BETWEEN...AND:查询在一个范围内符合要求的字段,包头也包尾 如:select * from student where age between 20 and 30;(相当于select * from student where age>=20 and age<=30;) 

        in:集合表示多个值,用逗号隔开 如:select * from student where age in(22,18,25); (相当于select * from student where age=22 or age=18 or age=25;)

         like:模糊查询

            根据%(多个占位符)来确定如何模糊查询,如 '%张' 则说明是这一列末尾的字为张的所有字段,'张%' 这个则说明是这一列第一个字为张的所有字段,'%张%' 这个表示这一列存在张的所有字段(无论张在句首还是句尾还是句中)

           根据_(单个占位符)来确定如何模糊查询,如 '_张%' 说明这一列第二个字为张的所有字段,'张_' 这个说明这一列只有两个字符且第一个字符为张的所有字段,且第一个为张,'%张_' 这个说明这一列倒数第二个字符为张的所有字段,'___'这个则说明查询这一列有三个字符的所有字段

         is (not) null:查询某一列为(不为)null的字段(在sql语句中不能写=null)如:select * from student where age is null;(不能这么写:select * from student where age=null;)

      ③逻辑运算符

        and 或 &&:

        or 或 ||:

        not 或 !:

4.DCL:数据控制语言

  用来定义数据库的访问权限和安全级别,及创建用户

  关键字:grant、revoke等

   1.管理用户

    1.添加用户:

      --创建用户

      create user '用户名'@'主机名' identified by '密码';

      2.删除用户:

       --删除用户

       drop user '用户名'@'主机名';

      3.修改用户密码:

        --修改密码

        update user set password = password('新密码') where user = '用户名';

        或

        set password for '用户名'@'主机名' = password('新密码');

      4.查询用户:

      --切换到mysql数据库(每个数据库自带的数据库)

      use mysql;

      --查询user表

      select * from user;

       通配符:%表示可以在任意主机使用用户登录数据库

      5.忘记密码

        

 

 

 

 

   2.权限管理:

    1.查询权限

      show grants for '用户名'@'主机名';

         show grants for 'lisl'@'%';

    2.授予权限

      --授予部分权限

      grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

         grant select,delete on db.account to 'lisi'@'%';

       --授予所有权限

       grant all on *.* to '用户名'@'主机名';

       grant all on *.* 'zhangsan'@'localhost';

    3.撤销权限

      --撤销权限

       revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

       revoke select on db.account from 'lisi'@'%';

 

posted @ 2019-11-18 14:50  T&K  阅读(272)  评论(0编辑  收藏  举报