MySQL丨增删查改

前言

所谓的“CRUD”,也就是“增删查改”,其中的字母“C”全称为“Create”(增加、建立),字母“R”全称为“Read”(查询、读取),字母“U”全称为“Update”(改正、更新),字母“D”全称为“Delete”(删除)。

新增操作

创建数据库

没有数据库,数据表就没有载体,也就无法存储数据。

CREATE DATABASE <数据库名>;

创建数据表

  • 创建表的时候,最好指明数据库。否则,如果你没有选中数据库,Workbench 会提示错误;要是你当前选中的数据库不对,还可能把表创建到错误的数据库中。
  • 不要在最后一个字段的后面加逗号“,”。

    CREATE TABLE <表名> {
    字段名1 数据类型 [字段级别约束] [默认值],
    字段名2 数据类型 [字段级别约束] [默认值],
    ......
    [表级别约束]
    };

    创建索引

    MySQL 索引的建立对于 MySQL 的高效运行是很重要的,可以类比为字典的目录,能提高 MySQL 的检索速度。

    CREATE INDEX 索引名 ON TABLE 表名 (字段);

    创建临时表

    临时表是一种特殊的表,用来存储查询的中间结果,并且会随着当前连接的结束而自动删除。

    CREATE TEMPORARY TABLE 表名 (
    字段名 字段类型,
    ...
    );

    创建视图

    视图是从一个或几个基本表(或视图)导出的表,是一种虚拟表。可以避免数据存储过程中可能产生的冗余,提高存储的效率。

    CREATE VIEW <视图名> [(字段列表)] 
    AS <子查询语句> [WITH CHECK OPTION];

    创建存储过程

    存储过程是在数据库中定义一些 SQL 语句的集合,可以直接调用这些存储过程来执行已经定义好的 SQL 语句。避免了开发人员重复编写相同 SQL 语句的问题。

    CREATE OR REPLACE PROCEDURE 存储过程名 ([IN|OUT|INOUT] 参数名称 类型) 程序体;

    创建触发器

    触发器(trigger)是用户定义在关系表上的一类由事件驱动的特殊过程。

    CREATE TRIGGER <触发器名>
    {BEFORE|AFTER} <触发事件> ON <表名>
    PEFERENCING NEW|OLD ROW AS <变量>
    FOR EACH {ROW|表达式}
    [WHEN <触发条件>] <触发动作体>;

    插入数据

    普通插入

    INSERT INTO 表名 (col1, col2) VALUES(val1, val2);

    插入查询结果

    MySQL 支持把查询的结果插入到数据表中,我们可以指定字段,甚至是数值,插入到数据表中。语法结构如下:

    INSERT INTO 表名 (字段名)
    SELECT 字段名或值
    FROM 表名
    WHERE 条件

    删除操作

    删除数据库

    删除数据库之前请慎重考虑,免得要跑路。

    DROP DATABASE <数据库名>;

    删除数据表

    在删除表的同时,表的结构和表中所有的数据都会被删除。使用以下语法,可以删除一个或多个数据表。

    DROP TABLE [IF EXISTS] 表名1 [ ,表名2, 表名3 ...];

    如果只是想删除表中所有的数据,但保留表的结构:

    TRUNCATE TABLE 表名;

    根据条件删除表中数据

    如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。

    DELETE FROM <表名> [WHERE 子句] [ORDER BY 子句] [LIMIT 子句];

    查询操作

    查询语句的语法结构:

    SELECT *|字段列表
    FROM 数据源
    WHERE 条件
    GROUP BY 字段
    HAVING 条件
    ORDER BY 字段
    LIMIT 起始点,行数

    说明:

  • select:是查询关键字,表示要做一个查询。“*”是一个通配符,表示要查询表中所有的字段,也可以把要查询的字段罗列出来。如果要去重,关键字 SELECT 后增加关键字 DISTINCT
  • from:表示查询的数据源(不一定是表)。关键字 FROM 后面,还可以跟着更复杂的数据表联接。
  • where:表示查询条件。
  • group by:根据一个或多个字段对查询结果进行分组,经常与 MySQL 的聚合函数一起使用。
  • having:跟 WHERE 类似,对分组后的数据进行过滤。
  • order by:将查询结果中的数据按照一定的顺序进行排序。ASC 表示升序,DESC 表示降序。
  • limit:限制查询结果的条数。有 3 种用法:指定初始位置、不指定初始位置以及与 OFFSET 组合使用。

修改操作

修改数据库

只能对数据库使用的字符集和校对规则进行修改。

ALTER DATABASE [数据库名] { 
  [ DEFAULT ] CHARACTER SET <字符集名> |
  [ DEFAULT ] COLLATE <校对规则名>
}

修改数据表

修改数据表之前,先确认数据库中已经存在该表。修改表指的是改变原有表的结构,例如增加或删减列、更改原有列的类型、修改列名或表名等。

ALTER TABLE <表名> [修改选项];

修改选项的语法格式如下:

{ ADD COLUMN <列名> <类型>
| CHANGE COLUMN <旧列名> <新列名> <新列类型>
| ALTER COLUMN <列名> { SET DEFAULT <默认值> | DROP DEFAULT }
| MODIFY COLUMN <列名> <类型>
| DROP COLUMN <列名>
| RENAME TO <新表名>
| CHARACTER SET <字符集名>
| COLLATE <校对规则名> }

修改存储引擎

ALTER TABLE 表名 ENGINE=INNODB;

修改字符集

ALTER TABLE 表名 CONVERT TO CHARACTER SET 字符集;

修改字段

例如,要把字段名称“quantity”改成“importquantity”,并且把字段类型改为 DOUBLE。

ALTER TABLE test.demo CHANGE quantity importquantity DOUBLE;

-- 只是改变字段 importquantity 的类型,不改名
ALTER TABLE test.demo MODIFY importquantity DECIMAL(10,3);

新增字段

例如,给数据表 demo 新增两个字段:

-- 添加一个字段 confirmer,类型 INT
ALTER TABLE test.demo ADD confirmer INT; 

-- 添加一个字段 confirmdate,类型是 DATETIME
ALTER TABLE test.demo ADD confirmdate DATETIME;

删除字段

例如,删除数据表 demo 中的 col1 字段:

ALTER TABLE test.demo DROP col1;

更新数据

UPDATE 表名
SET 字段名=值
WHERE 条件

参考

菜鸟教程 - MySQL教程
极客时间 - MySQL必知必会
打赏
评论区
头像
文章目录