• MySQL基础——DDL、DML、DQL、DCL语句


    当成功安装数据库之后,对于数据库进行的简单且基础的操作

    打开数据库操作

    1、在运行中输入services.msc

    会打开如下界面

    可以选择对MySQL进行开启或者关闭

    2、也可以使用命令指示符

    命令提示符要用管理员身份运行

    输入命令

    net start [自己设置的数据库名称]

    命令指示符中可以对mysql进行连接

    输入指令

    mysql -uroot -p

    此时输入自己设置的密码

    连接成功的结果会显示如下字样

    数据库模型

            mysql的数据库模型是一种关系型数据库,建立在关系模型的基础上,由多张相互连接的二维表组成

    优点 :使用表存储,格式统一,便于维护,使用SQL语言操作,标准统一

    MySQL语法

    1、SQL语句可以单行或者多行书写,但是要以;为结尾

    2、可以使用空格、缩进以增强代码的可读性

    3、MySQL不区分大小写,关键字还是建议大写

    4、注释写法

            (1)单行注释:--/#(#是MySQL特有注释)

            (2)多行:/*     */

    SQL语句

    DDL:定义语言,用来定义数据库对象(数据库,表,字段)

    DML:数据操作语言,对数据进行增删改插

    DQL:数据查询语言,查询数据库中表的记录

    DCL:数据控制语言,创建数据库用户,控制数据库访问权限

    DDL语句

    1、查询数据库

    1. SHOW DATABASES;
    2. --查询所有数据库
    3. SELECT DATABASES;
    4. --查询当前数据库

    SHOW DATABASES可以随时用,但是SELECT就一定要保证目前索引已经移动到了一个数据库之后才能去查询。

    2、创建数据库

    1. CREATE DATABASES [IF NOT EXIST] 数据库名 [DEFAULT CHAREST 字符集] [排序];
    2. --需要注意的是,在这里如果没有输入数据库的名字的话,就不执行该语句,也不会报错
    3. --同时,重复创建同名数据库就会报错
    4. --字符集指的是排列方式,比如UTF8mb4就是一种字符集

    如果创建成功,就会出现 Query OK, 1 row affected的字样

     加入[IF NOT EXISTS]字段的原因就是,有这个字段的时候对于重复创建的问题不会进行报错,也会显示执行成功,但是如果没有这个字段,就会直接显示该数据库已经存在

    3、删除数据库

    DROP DATABASE [IF EXISTS] 数据库名;

    删除数据库操作和创建数据库操作类似

    4、使用数据库

    1. USE 数据库名称;
    2. --select database就是当使用过use之后才能使用,查询当前指向的数据库

    5、表结构

    (1)创建表结构

    1. CREATE TABLE 表名(
    2. 字段1 字段1类型[COMMENT 注释],
    3. 字段2 字段2类型[COMMENT 注释],
    4. ……………
    5. 字段n 字段n类型[COMMENT 注释])
    6. [comment 表注释];
    7. --此时的类型就是字段的数据类型,关于数据类型在后文会仔细讲解
    8. --这个必须在use将指针移到数据库之后才能在相应数据库下创建对应的表

    在此处解释一下字段的意思,字段就相当于正常表格中的列

    (2)显示表结构

    DESC 表名;

     6、表结构----数据类型

    数据类型
    数据类型所占用字节(单位:bytes)
    tinyint1
    smallint2
    mediumint3
    int/integer4
    bigint8
    float4
    double8

    这是简单的数字存储类型,也有字符串类型和日期类型

    需要注意的是,就算是在这里也有修饰词signed和unsigned的分别,如果需要使用该修饰词,就需要加在数据类型的后面;

    同时对于double和float这种小数数据类型,当你需要限制位数的时候可以直接在后面加上数字位数和小数位数,例如double/float (数字位数,小数位数),比如100.0的数字位数就是4,小数位数就是1。

    字符类型
    字符类型存储数据类型
    char定长的字符串
    varchar变长的字符串
    tinyblob不超过25个字符的二进制数据
    blob二进制形式文本数据
    tinytext短文本字符串
    text文本数据
    mediumblob二进制形式的中长文本数据
    mediumtext中长文本数据
    longblob二进制形式的长文本数据
    longtext长文本数据

    char和varchar之后都可以加括号,括号里面限制长度,就相当于数组的存在

    在这里解释一下关于char不变长和varchar变长问题

    char(10):即使只存储了一个字符,也占用10个字符的空间吗,其他空余位置全部用空格去填充,虽然占用空间固定,但是性能会更好,效率也会更高

    varchar(10):虽然规定了字符串长度,但是这时的限制其实是字符串的上限,当存储字符串的长度小于规定长度的时候,实际上占用的空间就是存储字符串的长度,性能和效率都会比char低

    日期类型
    日期类型呈现格式
    dateYYYY-MM-DD
    yearYYYY
    timeHH:MM:SS
    timedateYYYY-MM-DD HH:MM:DD
    timestampYYYY-MM-DD HH:MM:DD

     日期类型是SQL语句中比较独特的一种类型

    timedate和timestamp有区别,因为timestamp日期仅到2038年,所以不经常使用

    7、修改表中字段信息

    1. ALTER TABLE 表名 MODIFY 字段名 新数据类型;
    2. --修改表中字段的数据类型
    3. ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型 [COMMENT 注释][约束];
    4. --修改表中该字段全部内容
    5. ALTER TABLE 表名 ADD 字段名 数据类型 [COMMENT 注释][约束];
    6. --直接在表中添加字段
    7. ALTER TABLE 表名 DROP 字段名;
    8. --删除该表中字段名的字段
    9. ALTER TABLE 表名 RENAME TO 新表名;
    10. --修改表的名字

    可以理解为alter是去选择对应操作

    可以对应到modify(调整)/change(修改)/add(添加)/drop(删除)/rename(重命名)

    8、删除表结构

    1. DROP TABLE [IF EXISTS] 表名;
    2. --直接将对应表名的表删除
    3. TRUNCATE TABLE 表名;
    4. --将该表删除之后还可以重新创建

    DML语句

    DML语句主要是针对表中的数据进行操作

    1、添加操作

    1. INSERT INTO 表名(字段1,字段2……字段n) VALUES(数值1,数值2……数值n);
    2. --对应分别输入,一定要与对应的字段对应
    3. INSERT INTO 表名 VALUES(数值1,数值2……数值n);
    4. --对该表中的全部字段进行添加数据
    5. INSERT INTO 表名(字段1,字段2……字段n) VALUES(数值1,数值2……数值n),(数值1,数值2……数值n)…………;
    6. --对指定字段多组添加数据
    7. INSERT INTO 表名 VALUES(数值1,数值2……数值n),(数值1,数值2……数值n)…………;
    8. --对全部字段多组添加

    注:

            1、字段一定要与值相对应

            2、字符串和日期类型在输入其中的时候一定要注意被单引号包裹起来

            3、要注意输入数据的范围

    2、修改表中数据

    1. UPDATE 表名 SET 字段名1=数值1,字段名2=数值2 [WHERE 条件];
    2. --修改字段的对应内容

    此处的where是用来限制修改对象的,如果没有限制,那么就会直接将对应字段的全部数据全部修改

    3、删除表中数据

    1. DELETE FROM 表名[WHERE 条件]
    2. --删除数据,如果添加了where删除符合筛选条件的,不添加where数据全删

    DQL语句

    基础查询主要围绕着SELECT关键字

    当进行查询的时候,书写的顺序如下

    1. SELECT
    2. 字段列表
    3. --查询之后要显示的字段,也就是目标字段
    4. FROM
    5. 表名列表
    6. --在哪些表中进行查询
    7. WHERE
    8. 条件列表
    9. --限制查询的范围
    10. --后面的内容涉及分组操作,在这里先不做赘述
    11. GROUP BY
    12. 分组字段列表
    13. HAVING
    14. 分组之后的条件列表
    15. ORDER BY
    16. 排序字段列表
    17. LIMIT
    18. 分页参数

    1、基础查询

    1. SELECT 字段1,字段2……字段n FROM 表名;
    2. --查找指定字段
    3. SELECT* FROM 表名;
    4. --查找全部字段
    5. --注:也可以将第一个中所有的字段名全部写入,与第二个达成的效果是一致的
    6. --但是第一种的效率会更高一点

    2、设置别名

    1. SELECT 字段1[AS 别名] FROM 表名;
    2. --as也可以省略,没有as直接在字段后面加上空格,直接写下别名就可以
    3. --别名也可以应用在表名中,之后也会应用到

    3、去除重复显示

    1. SELECT DISTINCT 字段列表 FROM 表名;
    2. --此时显示出的内容就不重复了,每一条都是不一样的记录

    4、条件查询

    1. SELECT 字段列表 FROM 表名 WHERE 条件列表;
    2. --where关键字之后往往就是逻辑关系式
    比较运算符
    符号含义
    >大于
    >=大于等于
    <小于
    <=小于等于
    =等于
    <>/!=不等于
    BETWEEN……AND……在……的范围内
    IN在in之后的范围中,多选一
    like 占位符模糊匹配进行占位
    is null是null

    逻辑运算: and / &&        or / ||         not / !

    占位符

            _用来匹配单个字符,%可以匹配任何字符

            主要来阐述占位符的用法,比如想要姓名长度为2的人的信息,就可以使用where name like '_ _',去寻找名字为两位的,会直接被筛选出来;对于%的使用,比如想要找到身份证号最后一位是x的人,就可以使用where id like '%x'

    5、聚合函数

    聚合函数
    函数功能
    count()统计数量
    max()取最大值
    min()取最小值
    avg()取平均值
    sum()求和

    关于聚合函数的用法

    1. SELECT COUNT(字段名) FROM 表名;
    2. --直接将所输入的字段内容直接进行加和,最终会输出结果

    6、分组查询

    SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 过滤条件]

    此处要先分辨一下where和having

            执行时机:where在前,having在后

            判断条件不同,且where之后就不能再使用聚合函数了,having后面的过滤条件就可以直接使用

    where相当于在分组之前直接筛选,筛选出指定的数据进入group by

    group by相当于是对where筛选之后的数据,进行再次分组

    比如现在给出一组数据

    目前有这么多人的身高体重

    之后要达到的目的是,身高大于155的男性和女性的数量,就可以使用如下语句

    select sex,count(*) from mrx_message where hight >155 group by sex;

     结果如下

     可以看到,准确地将男女分开了

    就算是group by,最终显示的结果也是由select之后的字段列表决定的

    注:执行顺序:where>聚合函数>having如果想要进行分组操作,那么一般最终查询的对象都是聚合函数,否则查询没有意义

    7、分页查询

    SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

    注:起始索引从0开始,起始索引[(查询页码数-1)*每页显示记录数]

    相当于从上一页的尾记录开始,这个是MySQL的方言,MySQL中使用LIMIT,其他数据库不适用

    查询记录数就是每页你想要的记录数

    如果分页是从首页开始,也可以将起始索引省略

    8、执行顺序

    1. FROM->WHERE->GROUP BY/HAVING->SELECT->ORDER BY->LIMIT
    2. --首先表明从哪一张表开始
    3. --确定进入该语句的数据
    4. --确定能进入分组的数据,确定分组条件并分组
    5. --确定显示出的内容
    6. --最终确定排序和分页

    DCL语句

    DCL管理数据库用户,控制数据库的访问权限

    1、用户操作

    1. --1、创建用户
    2. CREATE USER '用户名'@'主机名' IDENTIFIED BY'密码';
    3. @'localhost'指只能在当前主机访问,且创建之后没有权限
    4. @'%'代表可以在任何主机上访问,但是也没有任何权限
    5. --2、修改用户密码
    6. ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password by '新密码';
    7. --mysql_native_password是MySQL指定的密码加密方式
    8. --3、删除用户
    9. DROP USER '用户名'@'主机名';

    注:使用%可以通配,但是DQL语言开发人员会很少使用,主要是数据管理员会使用

    2、DQL权限控制

    常用权限
    权限权限含义
    all、all privileges所有权限
    select查询权限
    insert插入数据
    update修改数据
    delete删除数据
    alter修改表数据
    drop删除数据库、表、视图
    create创建数据库、表

    权限操作

    1. --权限查询
    2. SHOW GRANTS FOR '用户名'@'主机名';
    3. --授予权限
    4. GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
    5. --撤销权限
    6. REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

  • 相关阅读:
    基于.NetCore开发博客项目 StarBlog - (27) 使用JWT保护接口
    ctfshow web29-web40
    Python进阶:btc逆向-数据采集-JS逆向
    JS-DOM BOM(未完)
    基于springboot的校园跑腿平台
    leetcode分类刷题:栈(Stack)(一、字符串相邻元素删除类型)
    【数据结构基础_字符串】Leetcode 409.最长回文串
    爬虫----记录某新闻详情页app逆向过程(app逆向初学第一次实战)
    springboot集成Logback 日志写入数据库
    STM32的IIC
  • 原文地址:https://blog.csdn.net/weixin_63291917/article/details/126254596