1. DML语句(Data Manipulation Language 数据操纵语言)

针对 table 数据表中数据的增删改,使用DML

  1. DQL语句(Data Query Language 数据查询语言)

针对 table 数据表中数据的查询操作,使用DQL

  1. DCL语句(Data Control Language 数据控制语言)—了解

事务的提交/回滚


3.1 SQL通用语法

  • SQL语句可以单行 或者 多行书写,以分号结尾 ; (Sqlyog中可以不用写分号)
  • 可以使用空格和缩进来增加语句的可读性。
  • MySql中使用SQL不区分大小写一般关键字大写,数据库名 表名列名 小写。

    3.2. 注释方式

    1. # show databases; 单行注释
    2. -- show databases; 单行注释
    3. /*
    4. 多行注释
    5. show databases;
    6. */

    3.3 DDL操作数据库

    1)创建数据库

  • create database 数据库名;说明:创建指定名称的数据库。

  • create database 数据库名 characterset 字符集;说明:创建指定名称的数据库,并且指定字符集(一

般都指定utf8)

  1. /*
  2. 方式1 直接指定数据库名进行创建
  3. */
  4. CREATE DATABASE db1;
  5. /*
  6. 方式2 指定数据库名称,指定数据库的字符集
  7. 一般都指定为 utf8
  8. */
  9. CREATE DATABASE db2 CHARACTER SET utf8;

2)查看/选择数据库

命令 说明
use 数据库名; 切换到指定的数据库
select database(); 查看当前正在使用的数据库
show databases; 查看Mysql中有哪些数据库
show create database 数据库名; 查看指定数据库的定义信息

3)修改数据库

  • 修改数据库字符集 | 命令 | 说明 | | —- | —- | | alter database 数据库名 character set 字符集; | 修改指定数据库的字符集 |

4)删除数据库

命令 说明
drop database 数据库名; 永久删除指定的数据库

3.4 DDL 操作数据库表

1)创建表

  1. CREATE TABLE 表名(
  2. 字段名称1 字段类型(长度),
  3. 字段名称1 字段类型
  4. );
  5. 例如:
  6. CREATE TABLE user(
  7. id int,
  8. username varchar(32),
  9. password varchar(32),
  10. sex char(1)
  11. );
  12. # 创建一个表结构相同的表(复制表结构)
  13. create table 新表名 like 旧表名

2)查看表

  1. # 查看当前数据库中的所有表名
  2. SHOW TABLES;
  3. # 显示当前数据表的结构
  4. DESC category;
  5. # 查看创建表的SQL语句
  6. SHOW CREATE TABLE category;

3)修改表

  1. # 修改表名
  2. rename table 旧表名 to 新表名;
  3. # 向表中添加一列,关键字 ADD
  4. alter table 表名 add 字段名称 字段类型
  5. # 修改表中列的数据类型或长度,关键字类型 MODIFY
  6. alter table 表名 modify 字段名称 字段类型
  7. # 修改列名称,关键字 CHANGE
  8. alter table 表名 change 旧列名 新列名 类型(长度);
  9. # 删除列,关键字 DROP
  10. alter table 表名 drop 列名;

3.5 DML 操作表中数据(重点)

1)插入数据

  1. # 创建学生表
  2. CREATE TABLE student(
  3. id INT,
  4. name VARCHAR(20),
  5. age INT,
  6. sex CHAR(1),
  7. address VARCHAR(40)
  8. );
  9. # 插入数据
  10. # 方式一:插入全部字段, 将所有字段名都写出来
  11. INSERT INTO student (id,name,age,sex,address) VALUES(1,'张三',20,'男','北京');
  12. # 方式二:插入全部字段,不写字段名
  13. INSERT INTO student VALUES(1,'张三',20,'男','北京');
  14. # 方式三:插入指定字段的值
  15. INSERT INTO student (name) VALUES('张三');

注意:

  • 值与字段必须要对应,个数&数据类型 都要相同
  • 值的数据大小必须在字段指定的长度范围内
  • varchar、char、date 类型的值必须使用单引号包裹
  • 如果要插入空值,可以不写,或者写 null
  • 如果要插入指定字段的值,必须要写上列名

2)删除数据

  1. # 删除 id 为 1 的数据
  2. DELETE FROM student WHERE id = 1;
  3. # 删除所有数据
  4. DELETE FROM student;

若要删除表中的所有数据,有2种做法:

  • delete form 表名; 不推荐,有多少条记录,就执行多少次删除操作。效率低
  • truncate table 表名; 推荐,先删除整张表,然后再重新创建一张一模一样的表。效率高

当一个表中记录条数很多,又要做删除动作的时候,使用 delete 会很慢,可以使用 truncate。

3)修改数据

  1. # 不带条件的修改
  2. update 表名 set 列名 =
  3. # 带条件的修改
  4. update 表名 set 列名 = where 条件表达式;

4)查询数据
查询的结构:

  1. #方式1:
  2. SELECT ...,....,...
  3. FROM ...,...,....
  4. WHERE 多表的连接条件
  5. AND 不包含组函数的过滤条件
  6. GROUP BY ...,...
  7. HAVING 包含组函数的过滤条件
  8. ORDER BY ... ASC/DESC
  9. LIMIT ...,...
  10. #方式2:
  11. SELECT ...,....,...
  12. FROM ... JOIN ...
  13. ON 多表的连接条件
  14. JOIN ...
  15. ON ...
  16. WHERE 不包含组函数的过滤条件
  17. AND/OR 不包含组函数的过滤条件
  18. GROUP BY ...,...
  19. HAVING 包含组函数的过滤条件
  20. ORDER BY ... ASC/DESC
  21. LIMIT ...,...
  22. #其中:
  23. #(1)from:从哪些表中筛选
  24. #(2)on:关联多表查询时,去除笛卡尔积
  25. #(3)where:从表中筛选的条件
  26. #(4)group by:分组依据
  27. #(5)having:在统计结果中再次筛选
  28. #(6)order by:排序
  29. #(7)limit:分页

SELECT 查询时的两个顺序:
1. 关键字的顺序是不能颠倒的:

SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT…

  1. SELECT 语句的执行顺序(在 MySQL 和 Oracle 中,SELECT 执行顺序基本相同):

    FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT

单表查询:

  1. # 查询所有:使用 * 表示所有列
  2. SELECT * FROM student;
  3. # 查询部分:
  4. SELECT id,name FROM student;
  5. # 别名查询,使用关键字 as
  6. SELECT id as '学号',name as '姓名' FROM student;
  7. # 去重查询,去掉查询出来的重复信息,关键字 distinct
  8. select xxx,xxx from student;
  9. # 运算查询 (查询结果参与运算)
  10. select id, age + 1 from student;

条件查询: :::tips SELECT field1, field2,…fieldN FROM table_name1, table_name2… [WHERE condition1 [AND [OR]] condition2….. :::

  • 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
  • WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。 | 操作符 | 描述 | 实例 | | —- | —- | —- | | = | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 | | <>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 | | > | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 | | < | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 | | >= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 | | <= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |