结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
SQL语句主要分为三个类别:DDL语句、DML语句和DCL语句。

目录

  1. DDL语句
    1. 连接到mysql数据库
    2. 查看数据库
    3. 创建数据库
    4. 选择数据库
    5. 删除数据库
    6. 创建表
    7. 查看表定义
    8. 查看创建表的SQL语句
    9. 删除表
    10. 修改表
  2. DML语句
    1. 插入记录
    2. 更新记录
    3. 删除记录
    4. 查询记录
  3. DCL语句
    1. 创建用户
    2. 查看所有用户(root 用户下)
    3. 修改用户密码
    4. 删除用户
    5. 用户授权
    6. 查看授权(root 用户下)
    7. 撤销授权
  4. Mysql帮助
    1. 按照层次看帮助
    2. 快速查阅帮助

DDL语句

DDL(Data Definition Languages)语句:数据定义语言,是对数据库内部的对象进行创建、删除、修改等操作的语言。它和DML语句的最大区别是DML只是对表内部数据操作,而不涉及表的定义、结构的修改,更不会涉及其他对象。常用的语句关键字包括create、drop、alter等。

  • 连接到mysql数据库

    1
    mysql -uroot -p<password>
  • 查看数据库

    1
    mysql> show databases;
  • 创建数据库

    1
    mysql> create database <database_name>;
  • 选择数据库

    1
    mysql> use <databaseName>
  • 删除数据库

    1
    mysql> drop database <database_name>;
  • 创建表

    1
    2
    3
    4
    5
    6
    7
    mysql> create table <table_name>(
    <column_name_1> <column_type_1> <constraints>,
    <column_name_2> <column_type_2> <constraints>,
    <column_name_3> <column_type_3> <constraints>,
    ......
    <column_name_n> <column_type_n> <constraints>
    );
  • 查看表定义

    1
    mysql> desc <table_name>;
  • 查看创建表的SQL语句

    1
    mysql> show create table <table_name>;
  • 删除表

    1
    mysql> drop table <table_name>;
  • 修改表

    1. 修改表类型

      1
      mysql> alter table <table_name> modify <column_name> <new_column_type>;
    2. 增加表字段

      1
      mysql> alter table <table_name> add column <new_column_name> <new_column_type>;
    3. 删除表字段

      1
      mysql> alter table <table_name> drop column <column_name>;
    4. 字段改名

      1
      mysql> alter table <table_name> change <column_name> <new_column_name> <new_column_type>;
    5. 修改字段排序

      1
      2
      3
      4
      5
      mysql> alter table <table_name> modify <column_name> <new_column_type> first | after <another_column_name>;

      mysql> alter table <table_name> add column <new_column_name> <new_column_type> first | after <another_column_name>;

      mysql> alter table <table_name> change <column_name> <new_column_name> <new_column_type> first | after <another_column_name>;
    6. 更改表名

      1
      mysql> alter table <table_name> rename <new_table_name>;

DML语句

DML(Data Manipulation Language)语句:数据操纵语句。用于对数据表中记录的操作,主要包括表记录的插入(insert)、更新(update)、删除(delete)和查询(select)。

  • 插入记录

    1
    2
    3
    4
    5
    mysql> insert into <table_name> (column_name_1,column_name_2,...,column_name_n) values
    (record_1_value_1,record_1_value_2,...,record_1_value_n),
    (record_2_value_1,record_2_value_2,...,record_2_value_n),
    ......
    (record_n_value_1,record_n_value_2,...,record_n_value_n);
  • 更新记录

    1
    mysql> update <table_name> set field_1 = value_1,field_2 = value_2,...,field_n = value_n <where condition>;
  • 删除记录

    1
    mysql> delete from <table_name> <where condition>;
  • 查询记录

    1
    mysql> select * from <table_name> <where condition>;
    1. 去重(distinct)

      1
      mysql> select <field> distinct from <table_name> <where condition>;
    2. 条件查询(>,<,>=,<=,!=,=,or,and,between…and…)

    3. 排序(order by)

      1
      2
      3
      4
      mysql> select * from <table_name> <where condition> order by field_1 <desc|asc>,
      field_2 <desc|asc>,
      ......
      field_n <desc|asc>;

      desc和asc是排序关键字,desc表示字段按照降序排列,asc表示升序排列。默认是asc。

    4. 限制(limit)

      1
      mysql> select * from <table_name> limit <n,m>;

      第(n+1)条开始,选择m条记录。
      n偏移量默认为0时,可以不写。

    5. 聚合

      1
      2
      3
      4
      5
      mysql> select <field_1,field_2,...,field_n> <fun_name>
      from <table_name>
      where <where condition>
      group by field_1,field_2,...,field_n
      having <where condition>

      聚合函数(fun_name)

      • sum()求和
      • avg()平均数
      • count()计数
      • max()最大值
      • min()最小值

      group by 表示进行分类聚合的字段。
      having 表示对分类后的结果再进行条件过滤。

      having 和 where 的区别在于,having 是对聚合后的结果进行条件过滤,而 where 是在 聚合前就对记录进行过滤。

      如果逻辑允许,尽可能用 where 先进行过滤,减小结果集,提高聚合效率,最后再根据逻辑看是否用 having 再进行过滤。

    6. 表连接

      • 外连接

        • 左连接(left join)
          包含所有左表中的记录甚至是右表中没有和它匹配的记录。

        • 右连接(right join)
          包含所有右表中的记录甚至是左表中没有和它匹配的记录。

      • 内连接(inner join)最常用

    7. 子查询(in,not in,=,!=,exists,not exists)

      子查询记录数唯一,还可以用=代替in。

    8. 记录联合(union,union all)

      1
      2
      3
      4
      5
      6
      mysql> select * from t1
      union | union
      all select * from t2
      ......
      union | union
      all select * from tn;

      union 和 union all 的主要区别是:
      union all 是把结果直接合并在一起,而 union 是将 union all 后的结果进行一次 distinct ,去除重复记录后的结果。

DCL语句

DCL(Data Control Language)语句:数据控制语句。用于控制不同数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句的关键字包括grant、revoke等。

  • 创建用户

    1
    mysql> create user <user_name>@<localhost | ip> identified by '<password>';

    mysql_create_user

  • 查看所有用户(root 用户下)

    1
    2
    mysql> use mysql;
    mysql> select user from mysql.user;

    mysql_select_user

  • 修改用户密码

    1
    mysql> alter user <user_name>@<localhost | ip> identified by '<new_password>';

    mysql_alter_user

  • 删除用户

    1
    mysql> drop user <user_name>@<localhost | ip>;
  • 用户授权

    1
    mysql> grant <insert,delete,alter,select | all> on <database>.<*|table_name> to <user_name>@<localhost | ip>;

    mysql_grant

  • 查看授权(root 用户下)

    1
    mysql> show grants for <user_name>@<localhost | ip>;

    mysql_show_grants

  • 撤销授权

    1
    mysql> revoke <insert,delete,alter,select | all> on <database>.<*|table_name> from <user_name>@<localhost | ip>;

Mysql帮助

  • 按照层次看帮助

    1
    mysql> ? content;

    mysql_content

    1
    mysql> ? data types;

    mysql_data_tpye

    1
    mysql> ? double;

    mysql_double

  • 快速查阅帮助

    1
    mysql> ? show;

    mysql_show

    1
    mysql> ? create table;

    mysql_create_table