• MySQL 常用命令手册 增删改查大法


    一、数据库操作

    创建数据库

    语法:

    CREATE DATABASE database_name;
    

    删除数据库

    删除数据库务必谨慎!因为执行删除命令后,所有数据将消失。

    语法:

    DROP DATABASE database_name;
    

    选择数据库

    语法:

    USE database_name;
    

    二、数据表操作

    数据类型

    数值类型

    类型 大小 用途
    TINYINT 1 byte 小整数值
    SMALLINT 2 bytes 大整数值
    MEDIUMINT 3 bytes 大整数值
    INT或INTGEGER 4 bytes 大整数值
    BIGINT 8 bytes 极大整数值
    FLOAT 4 bytes 单精度浮点数值
    DOUBLE 8 bytes 双精度浮点数值
    DECIMA 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 小数值

    日期和时间类型

    类型 大小 范围 格式 用途
    DATE 3 bytes 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
    TIME 3 bytes ‘-838:59:59‘/‘838:59:59‘ HH-MM-SS 时间值
    YEAR 1 byte 1901/2155 YYYY 年份值
    DATETIME 8 bytes 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期
    TIMESTAMP 4 bytes 1970-01-01 00:00:00 2038 YYYY-MM-DD HH:MM:SS 混合日期

    字符串类型

    类型 大小 用途
    CHAR 0-255 bytes 定长字符串
    VARCHAR 0-65 535 bytes 变长字符串
    TINYBLOB 0-255 bytes 不超过255个字符的二进制字符串
    TINYTEXT 0-255 bytes 短文本字符串
    BLOB 0-65 535 bytes 二进制形式的长文本数据
    TEXT 0-65 535 bytes 长文本数据
    MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据
    MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据
    LONGBLOB 0-4 294 967 295 bytes 二进制形式的极大文本数据
    LONGTEXT 0-4 294 967 295 bytes 极大文本数据

    二进制串用于存储非传统数据,如图像、音频和视频文件、程序可执行文件等

    注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。

    CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

    BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

    BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

    有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

    创建数据表

    语法:

    CREATE TABLE table_name (
        column_name column_type
    );
    

    示例:

    CREATE TABLE IF NOT EXISTS t_student(
    	stu_id INT NOT NULL AUTO_INCREMENT,
        stu_name VARCHAR(100) NOT NULL,
        stu_email VARCHAR(200),
        PRIMARY KEY (stu_id)
    );
    

    结果:

    截屏2021-02-23 19.47.39

    删除数据表

    语法:

    DROP TABLE table_name;
    

    插入数据

    语法:

    INSERT INTO table_name(
        field1, field2, ... fieldN
    ) VALUES(
        value1, value2, ... valueN
    );
    
    #插入多条数据
    INSERT INTO table_name(
        field1, field2, ... fieldN
    ) VALUES(
        valueA1, valueA2, ... valueAN
    ),(
    	valueB1, valueB2, ... valueBN
    );
    

    示例:

    INSERT INTO t_student(
    	stu_id, stu_name, stu_email
    ) VALUE (
    	10001, 'Tom', '10001@qq.com'
    );
    

    结果:

    截屏2021-02-23 19.55.31

    查询数据

    语法:

    SELECT field1, field2 ...
    FROM table_name
    [WHERE Clause]
    [LIMIT N][OFFSET N]
    
    • 查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
    • SELECT 命令可以读取一条或者多条记录。
    • 可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
    • 可以使用 WHERE 语句来包含任何条件。
    • 可以使用 LIMIT 属性来设定返回的记录数。
    • 可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0

    WHERE 子句

    语法:

    SELECT field1, field2, ... field2 FROM table_name1, table_name2
    [WHERE condition1 [AND [OR]]] condition2 ...
    
    • 查询语句中可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
    • 可以在 WHERE 子句中指定任何条件。
    • 可以使用 AND 或者 OR 指定一个或多个条件。
    • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
    • WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

    UPDATE 更新

    语法:

    UPDATE table_name SET field1 = new_value1, field2 = new_value2
    [WHERE Clause]
    
    • 可以同时更新一个或多个字段。
    • 可以在 WHERE 子句中指定任何条件。
    • 可以在一个单独表中同时更新数据。
    • UPDATE 语句必须加 WHERE 条件,否则将更新所有记录

    DELETE 语句

    语法:

    DELETE FROM table_name 
    [WHERE Clause]
    
    • 如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
    • 可以在 WHERE 子句中指定任何条件
    • 可以在单个表中一次性删除记录。

    delete,drop,truncate 都有删除表的作用,区别在于:

    • 1、delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
    • 2、delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
    • 3、执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车

    LIKE 子句

    描述:

    我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。

    WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "stu_email = '10001@qq.com'"。

    但是有时候我们需要获取 stu_email 字段含有 "com" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。

    SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *****。

    如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

    语法:

    SELECT field1, field2, ... fieldN
    FROM table_name
    WHERE field1 LIKE condition1 [AND [OR]] field2 = 'somevalue'
    
    • 你可以在 WHERE 子句中指定任何条件。
    • 你可以在 WHERE 子句中使用LIKE子句。
    • 你可以使用LIKE子句代替等号 =
    • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
    • 你可以使用 AND 或者 OR 指定一个或多个条件。
    • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。
    1. %:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
    2. _:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
    3. []:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
    4. [^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    5. 查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符 “%”、“_”、“[” 的语句无法正常实现,而把特殊字符用 “[ ]” 括起便可正常查询。

    UNION

    描述:

    UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

    语法:

    SELECT field1, field2, ... fieldN
    FROM table_name
    [WHERE condition]
    UNION [ALL | DESTINCT]
    SELECT field2, field2, ... fieldN
    FROM table_name
    [WHERE condition];
    
    • filed1, field2, ... fieldN: 要检索的列。
    • table_name: 要检索的数据表。
    • WHERE conditions: 可选, 检索条件。
    • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。
    • ALL: 可选,返回所有结果集,包含重复数据。

    ORDER BY 排序

    语法:

    SELECT field1, field2, ... fieldN
    FROM table_name
    ORDER BY field1 [ASC [DESC]], [field2 ...] [ASC [DESC]]
    
    • 可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
    • 可以设定多个字段来排序。
    • 可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
    • 可以添加 WHERE...LIKE 子句来设置条件。

    GROUP BY 分组

    描述:

    GROUP BY 语句根据一个或多个列对结果集进行分组。

    在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

    语法:

    SELECT column_name function(column_name)
    FROM table_name
    WHERE column_name operator value
    GROUP BY column_name;
    

    JOIN 连接

    描述:

    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。

      img

    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。

    img

    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

    img

    语法

    # INNER JOIN
    SELECT a.filed1, a.filed2, ... b.filed1, ...
    FROM table_name1 a INNER JOIN table_name2 b
    ON a.id = b.id;
    # LEFT JOIN
    SELECT a.filed1, a.filed2, ... b.filed1, ...
    FROM table_name1 a LEFT JOIN table_name2 b
    ON a.id = b.id;
    # RIGHT JOIN
    SELECT a.filed1, a.filed2, ... b.filed1, ...
    FROM table_name1 a RIGHT JOIN table_name2 b
    ON a.id = b.id;
    

    NULL 值处理

    我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作。

    为了处理这种情况,MySQL提供了三大运算符:

    • IS NULL: 当列的值是 NULL,此运算符返回 true。
    • IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
    • <=>: 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。

    关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。

    在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 NULL,即 NULL = NULL 返回 NULL 。

    MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。

    ALTER 命令

    描述:

    当我们需要修改数据表名或者修改数据表字段时,需要 ALTER 命令。

    删除表字段

    ALTER TABLE table_name DROP column_name;
    

    添加表字段

    ALTER TABLE table_name ADD column_name datatype;
    

    修改表字段

    # MODIFY
    ALTER TABLE table_name MODIFY column_name new_datatype;
    # CHANGE
    ALTER TABLE table_name CHANGE old_column_name new_column_name new_datatype;
    
  • 相关阅读:
    5.深入TiDB:Insert 语句
    4.深入TiDB:执行计划执行过程详解
    3.深入TiDB:执行优化讲解
    2.深入TiDB:入口代码分析及调试 TiDB
    1.深入TiDB:初见TiDB
    开发必备之单元测试
    如何用好MySQL索引
    SpringBoot运行源码剖析(一)
    深入理解Java虚拟机读后感
    Java并发编程艺术读后感
  • 原文地址:https://www.cnblogs.com/Code-CHAN/p/14439488.html
Copyright © 2020-2023  润新知