前言
所谓的“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必知必会