sql语法

目录

  1. 1. Introduce
  2. 2. MySQL基本操作
    1. 2.1. 创建、删除表单
  3. 3. sql命令
    1. 3.1. 插入-insert into
    2. 3.2. 删除-delete from
      1. 3.2.1. 备注
    3. 3.3. 查找 select (核心)
      1. 3.3.1. 查找结果-消除重复内容项
      2. 3.3.2. 查找-where语法
      3. 3.3.3. 在where基础上,加入and 和or
    4. 3.4. 排序-orde by
      1. 3.4.1. 一个参数参与排序
      2. 3.4.2. 多个参数参与排序
      3. 3.4.3. 逆序排序
      4. 3.4.4. 正、逆序共同作用排序
    5. 3.5. 修改表中的数据-update
    6. 3.6. 修改表中列的数据类型-alter
    7. 3.7. 增加或者删除一列-alter
  4. 4. 题外话
    1. 4.1. 清理MySQL日志垃圾
    2. 4.2. 参考资料

Introduce

安装数据库软件管理系统,以MySql为例,参考:超详细MySQL安装及基本使用教程_数据库

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

库表=>库=>表单=>sql语言操作

MySQL基本操作

  1. 进入MySQL数据库管理系统
    先进入对应安装目录,进入下面的bin目录,shift+右键选择在此打开命令窗口,进入cmd界面输入:mysql -u root -p 返回:Enter password: 输入密码。

  2. 显示数据库:
    show databases;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sakila |
    | sys |
    | test |
    | world |
    +--------------------+
  3. 创建数据库:
    create database hello; 返回结果:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    +--------------------+
    | Database |
    +--------------------+
    | hello | 增加的
    | information_schema |
    | mysql |
    | performance_schema |
    | sakila |
    | sys |
    | test |
    | world |
    +--------------------+
  4. 删除数据库

    drop database db_name;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | performance_schema |
    | sakila |
    | sys |
    | test |
    | world |
    +--------------------+
  5. 显示众多表格,进入某个数据库中,以hello为例:use hello; 显示该数据库中的表单详情:show tables; 返回:Empty set (0.00 sec) 空表。

    1
    2
    3
    4
    5
    6
    7
    show databases;
    use hello;
    show tables;
    drop table saff;
    show tables;
    ---------------
    只显示有stu表

    创建、删除表单

    a. create table table_name(column_name column_type);
    例如:create table stu(id integer, name varchar(8), grade integer); 创建数据表的命令前需要使用use指明你要使用的数据库。
    b. 删除表:drop table table_name; 例如:drop table staff;
    在MySQL操作命令台:

sql命令

前提:在数据库中,表已经创建,但是是空表。

插入-insert into

语法:

根据行的顺序:INSERT INTO table_name VALUES (值1, 值2,....) 可小写,insert into stu values(60, '张三', 98);

根据列的顺序:INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

删除-delete from

  1. 只能行里面删除
    语法:
    DELETE FROM 表名称 WHERE 列名称 = 值

备注: 当不小心多插入几行有相似的内容,而删除条件(主键)恰好是相似内容的列,系统会报错,于是将SET SQL_SAFE_UPDATES = 0; 输入命令框中,降低系统安全值。之后再SET SQL_SAFE_UPDATES = 1; 恢复系统安全值。

  1. 可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
    DELETE FROM table_name 或者:DELETE * FROM table_name

    备注

    插入和删除都只能删除一行,或者说一个对象

    查找 select (核心)

select语法,SQL SELECT 语句

查找其中列的数据,SELECT 列名称 FROM 表名称 列和列之间用隔开,列名称是要显示的部分。

1
2
3
4
5
6
7
8
9
select id, name from stu;

+------+--------+
| id | name |
+------+--------+
| 60 | 张三 |
| 5 | 王麻子 |
| 56 | 这届 |
+------+--------+
1
2
3
4
5
6
7
8
select name from stu;
+--------+
| name |
+--------+
| 张三 |
| 王麻子 |
| 这届 |
+--------+

再或者是全部显示stu表的详细信息:

1
2
3
4
5
6
7
8
select * from stu;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 60 | 张三 | 98 |
| 5 | 王麻子 | 80 |
| 56 | 这届 | 100 |
+------+--------+-------+

查找结果-消除重复内容项

消除重复内容的显示,SQL SELECT DISTINCT 语句

SELECT DISTINCT 列名称 FROM 表名称

1
2
3
4
5
6
7
8
9
10
mysql> select *from stu;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 60 | 张三 | 98 |
| 56 | 惹杰 | 100 |
| 123 | 李白 | 96 |
| 5 | 王麻子 | 80 |
| 5 | 王麻子 | 80 |
+------+--------+-------+
1
2
3
4
5
6
7
8
mysql> select distinct * from stu;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 60 | 张三 | 98 |
| 56 | 这届 | 100 |
| 5 | 王麻子 | 80 |
+------+--------+-------+
1
2
3
4
5
6
7
8
9
mysql> select distinct name from stu;
+--------+
| name |
+--------+
| 张三 |
| 惹杰 |
| 李白 |
| 王麻子 |
+--------+

查找-where语法

操作符 描述
= 等于
<> 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

注释:在某些版本的 SQL 中,操作符 <> 可以写为 !=。

全表查找对应条件得出结果:SELECT * FROM table_name WHERE 列 操作符 值

1
2
3
4
5
6
7
select * from stu where name = '王麻子';
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 5 | 王麻子 | 80 |
| 5 | 王麻子 | 80 |
+------+--------+-------+

某些表中的列中查找符合条件得出结果:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 前面的那个列名称其实是要显示的内容,核心在FROMWHERE上面。

1
2
3
4
5
6
7
8
9
mysql> select id, name from stu where grade>0;
+------+--------+
| id | name |
+------+--------+
| 60 | 张三 |
| 5 | 王麻子 |
| 56 | 这届 |
| 5 | 王麻子 |
+------+--------+
1
2
3
4
5
6
7
8
mysql> select * from stu where grade between 90 and 100;
+------+------+-------+
| id | name | grade |
+------+------+-------+
| 60 | 张三 | 98 |
| 56 | 惹杰 | 100 |
| 123 | 李白 | 96 |
+------+------+-------+
1
2
3
4
5
6
7
8
mysql> select * from stu where grade>=90 and grade<=100;
+------+------+-------+
| id | name | grade |
+------+------+-------+
| 60 | 张三 | 98 |
| 56 | 惹杰 | 100 |
| 123 | 李白 | 96 |
+------+------+-------+

在where基础上,加入and 和or

原始数据:

1
2
3
4
5
6
7
8
9
mysql> select * from stu;
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 60 | 张三 | 98 |
| 5 | 王麻子 | 80 |
| 56 | 这届 | 100 |
| 5 | 王麻子 | 80 |
+------+--------+-------+

AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。

  1. 如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。

  2. 如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

select id, name from stu where id>1 and grade>=60;

1
2
3
4
5
6
7
8
+------+--------+
| id | name |
+------+--------+
| 60 | 张三 |
| 5 | 王麻子 |
| 56 | 这届 |
| 5 | 王麻子 |
+------+--------+

select id, name from stu where id>=60 or grade >= 60;

1
2
3
4
5
6
7
8
+------+--------+
| id | name |
+------+--------+
| 60 | 张三 |
| 5 | 王麻子 |
| 56 | 这届 |
| 5 | 王麻子 |
+------+--------+

排序-orde by

ORDER BY 语句用于对结果集进行排序。
ORDER BY 语句用于根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。

一个参数参与排序

select * from stu order by id; (所有列全显)

1
2
3
4
5
6
7
8
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 5 | 王麻子 | 80 |
| 5 | 王麻子 | 80 |
| 56 | 这届 | 100 |
| 60 | 张三 | 98 |
+------+--------+-------+

select id, name from stu order by id;(只显示id name列)

1
2
3
4
5
6
7
8
+------+--------+
| id | name |
+------+--------+
| 5 | 王麻子 |
| 5 | 王麻子 |
| 56 | 这届 |
| 60 | 张三 |
+------+--------+

多个参数参与排序

select * from stu order by id, grade;

1
2
3
4
5
6
7
8
+------+--------+-------+
| id | name | grade |
+------+--------+-------+
| 5 | 王麻子 | 80 |
| 5 | 王麻子 | 80 |
| 56 | 这届 | 100 |
| 60 | 张三 | 98 |
+------+--------+-------+

逆序排序

SELECT 列名_1, 列名_2 FROM 表名 ORDER BY 列名_3 DESC 输出结果只显示列名1、 列名 2 、排序依据列名_3 DESC :逆序的意思

1
2
3
4
5
6
7
8
9
mysql> select id, name from stu order by id desc;
+------+--------+
| id | name |
+------+--------+
| 60 | 张三 |
| 56 | 这届 |
| 5 | 王麻子 |
| 5 | 王麻子 |
+------+--------+

正、逆序共同作用排序

以逆字母顺序显示xxx,并以数字顺序显示xx:

SELECT 列名1, 列名2 FROM 表名 ORDER BY 列名1 DESC, 列名2 ASC 只显示列名1和列名2的内容,优先以列名1 逆序排序,之后才以列名2正序排序。后面两个列名要和前面要显示列名对应,前面显示列名可以多于后者。

1
2
3
4
5
6
7
8
9
10

mysql> select id, grade from stu order by id desc, grade asc;
+------+-------+
| id | grade |
+------+-------+
| 60 | 98 |
| 56 | 100 |
| 5 | 80 |
| 5 | 80 |
+------+-------+

修改表中的数据-update

Update 语句用于修改表中的数据。

UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> select * from stu;
+------+------+-------+
| id | name | grade |
+------+------+-------+
| 60 | 张三 | 98 |
| 56 | 惹杰 | 100 |
| 123 | 李白 | 76 |
+------+------+-------+
-------------------------------
mysql> update stu set grade=96 where id = 123;
-------------------------------
mysql> select * from stu;
+------+------+-------+
| id | name | grade |
+------+------+-------+
| 60 | 张三 | 98 |
| 56 | 惹杰 | 100 |
| 123 | 李白 | 96 |
+------+------+-------+

修改表中列的数据类型-alter

MySQl /Oracle
alter table table_name modify column column_name datatype;
Oracle 10G之后:
alter table table_name modify column_name data_type;
这个应用最多的是修改数据类型,扩容的目的。

增加或者删除一列-alter

  1. 增加一列,默认其值为NULL,可以参考修改表中的数据
    alter table table_name add column_name data_type;
  2. 删除一列
    alter table table_name drop column column_name;

题外话

清理MySQL日志垃圾

关于MySQL 数据库垃圾清理

  1. 查看日志文件:show binary logs 例如我的笔记本电脑里面的数据库反映的:

    1
    2
    3
    4
    5
    6
    7
    +--------------------+-----------+-----------+
    | Log_name | File_size | Encrypted |
    +--------------------+-----------+-----------+
    | JTJIANG-bin.000001 | 179 | No |
    | JTJIANG-bin.000002 | 298215 | No |
    | JTJIANG-bin.000003 | 156 | No |
    +--------------------+-----------+-----------+
  2. 查看正使用的日志文件:show master status;

    1
    2
    3
    4
    5
    +--------------------+----------+--
    | File | Position | B ....
    +--------------------+----------+--
    | JTJIANG-bin.000003 | 156 | ....
    +--------------------+----------+--
  3. 除正在使用的日志外,其余日志全部删除:purge binary logs to 'JTJIANG-bin.000003';

    1
    Query OK, 0 rows affected (0.98 sec)
  4. 重复第一步,查看日志。

    参考资料

    1.SQL教程 | W3school
    2.MySQL教程 | 菜鸟教程