SQL语句基础

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语句重在实践,需要在工作中多多使用就会更加熟悉。相比于基础语句,查询优化则更为重要,后续也会继续介绍。

你可能感兴趣的:(sql)