1、SQL语句简介
SQL语句的基础语法不是特别多,主要还是要多用多熟练,理解一些基本原理和背后的东西。
SQL语句主要分为DDL、DML和DCL。DDL(Data Definition Language,数据定义语言)用于数据库或者表的结构定义/修改等。DML(Data Manipulation Language,数据操纵语言)用于查询或变更数据记录,也是使用最多的一部分,涉及最多的一部分(增删改查都属于DML)。而DCL(Data Control Language,数据控制语言)用于事务控制和权限控制等其他事项。
本文是《SQL基础教程》读书笔记。相关所有的语句都可以在mysql命令行中获取帮助,直接
help [command]
即可。比如help CREATE;
。多用多查就能逐渐掌握各种语句了。
下面是这三种语句的一些常用关键词介绍:
1.1、DDL
- CREATE:用于创建数据库和数据表等对象。
- ALTER:用于修改数据库和数据表等对象的结构。
- DROP:用于删除数据库和数据表等对象。
1.2、DML
SELECT:查询表中记录
- FROM:从指定数据表获取记录。
- WHERE:根据条件判断进行记录筛选。
- GROUP BY:分组键,用于将数据分组。
- HAVING:和GROUP BY一起使用,对分组后的数据进行删选。
- ORDER BY:对输出结果进行排序。
- INSERT:向表中插入新记录
- UPDATE:更新表内已存记录
- DELETE:删除表中记录
1.3、DCL
- COMMIT:确认对数据库中数据的变更。(提交事务)
- ROLLBACK:取消对数据库中数据的变更。(回滚事务)
- GRANT:赋予用户操作权限。
- REVOKE:取消用户操作权限。
2、常用语句
下面是一些我个人觉得刚开始学习时可能会用上的语句。先记一些基础语句再操作会更轻松。
SHOW DATABASES;
确认数据库列表。USE [DATABASE_NAME];
切换到指定的数据库。SELECT database();
确认当前所在数据库。SHOW TABLES;
确认数据表的列表。DESC [TABLE_NAME];
确认指定数据表的结构。
一般来说,操作前最好确认清楚,当前在哪个数据库?需要操作哪个数据库的表?表的结构(列)定义是否正确?上述的这些语句可以提供帮助。
其次,除了上面这些和数据内容相关的语句,有时候还需要确认服务器的状态和参数。对于数据库服务本身还会有一些语句来查看服务器状态和参数,可以用STAUTS;
和SHOW STATUS;
以及SHOW VARIABLES;
等。
SHOW
语句也可通过help命令进行进一步了解。
3、SQL语句使用方法
下面是一些SQL语句的语法以及注意事项。
3.1、常见DDL语句语法
-- 创建数据库
CREATE DATABASE [数据库名];
-- 删除数据库
DROP DATABASE [数据库名];
-- 在当前数据库下新建一个表
CREATE TABLE [表名]
([列名1] [数据类型] [该列所需约束],
[列名2] [数据类型] [该列所需约束],
[列名3] [数据类型] [该列所需约束],
.
.
.
[表约束1],[表约束2], .......);
-- 在当前数据库下,删除指定表
DROP TABLE [表名];
-- 在当前数据库下,给指定表增加一列
ALTER TABLE [表名] ADD COLUMN [列定义];
-- 在当前数据库下,删除指定表的一列(注意,列删除谨慎操作)
ALTER TABLE [表名] DROP COLUMN [列名];
-- 表名修改的2种方式
ALTER TABLE [旧表名] RENAME TO [新表名];
RENAME TABLE [旧表名] TO [新表名];
- 创建表时,使用的是圆括号,不是大括号。
- 主键约束可以写在最后,也可以直接写在每行最后的该列所需约束上。
比如: id, INTEGER, NOT NULL PRIMARY KEY,
其次,主键默认带非空。其他的列默认可空,需要指定非空。
- 需要注意的是,线上数据库,禁止手动删库删表,更改表结构只能添加。个人建议,如果需要删库删表,需要经过确认、测试、尽量采用自动化执行,尽量不要手动删除
3.2、常见DML语句语法
SELECT [列名1] AS [别名1], [列名2] AS [别名2], ...
FROM [表名]
WHERE [条件表达式]
GROUP BY [列]
HAVING [条件表达式]
ORDER BY [列名] [顺序];
需要注意的是,上述的书写语法顺序和SELECT实际执行顺序并不同。
实际执行顺序为:FROM --> WHERE --> GROUP BY --> HAVING --> SELECT --> ORDER BY
- 在判断符这里,标准SQL使用
<>
做不等于判断,而不是!=
。使用<>
比较规范。 - 其次,在SELECT和WHERE中,均可使用运算符,以多列为数据源进行计算并输出。(比如计算两列之差等)不过我觉得,在SELECT中完全没必要使用运算符(完全可以不由数据库计算),WHERE中有时候可能需要。
- GROUP BY一般和HAVING一起使用,先按列分组,再加一个通用条件,筛选掉不合适的组。
- 由于 ORDER BY 在SELECT后执行,所以SELECT处定义的别名都可以使用。
- 列限制:
如果使用了GROUP BY,那么后续的HAVING,SELECT列名选择都会受限制。
一般来说列只能有3种:1、常数。2、聚合函数。3、GROUP BY 的列(聚合键)。(聚合函数的参数则不受限制了,可以是任何列)
ORDER BY 没有列名限制,任何列都可以,聚合函数也可。
-- 向指定表中插入指定数据
INSERT INTO [表名] (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
-- 根据指定条件,从指定表删除记录(注意,删除针对的是记录)
DELETE FROM [表名] WHERE [条件表达式];
-- 更新指定表中的、选择符合条件的记录,修改指定列的数据
UPDATE [表名]
SET [列名1] = [表达式1],
SET [列名2] = [表达式2] ...
WHERE [条件表达式];
- 如果进行全列添加,可以省略列名。(还是建议增加列名,更易读)
- 插入时,VALUES ()可以替换为一个查询,就可以实现表数据的复制。(不过不推荐这样复制。)
- 这里的删除,针对的是记录,也就是行。而DROP TABLE会连表结构一起删除。
- GROUP BY和HAVING以及ORDER BY都是查询时候需要的,增删改都不需要。
3.3、Binlog相关语句
-- 查看所有Binlog列表
SHOW MASTER LOGS;
-- 查看当前Binlog文件
SHOW MASTER STAUTS;
-- 查看指定Binlog文件内容
SHOW BINLOG EVENTS IN '[binlog-file-name]';
如果需要查看表的历史操作,这种方式查看起来比直接看Binlog文件本身更容易。(当前,需要打开Binlog设置才会生成Binlog)
小结
本文简单介绍了SQL语句的分类,重点在创建管理表结构语句、以及删改查的语句基本语法,还介绍了一些常用的语句,以及Binlog的查看方式。
SQL语句重在实践,需要在工作中多多使用就会更加熟悉。相比于基础语句,查询优化则更为重要,后续也会继续介绍。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。