sql语法

Introduce

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

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。

MySQL 是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

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

MySQL基本操作

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

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test               |
| world              |
+--------------------+
  1. 创建数据库: create database hello; 返回结果:

+--------------------+
| Database           |
+--------------------+
| hello              |  增加的
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| test               |
| world              |
+--------------------+
  1. 删除数据库

drop database db_name;


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

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; 恢复系统安全值。

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

备注

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

查找 select (核心)

select语法,SQL SELECT 语句

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


select id, name from stu;

+------+--------+
| id   | name   |
+------+--------+
|   60 | 张三   |
|    5 | 王麻子 |
|   56 | 这届   |
+------+--------+

select name from stu;
+--------+
| name   |
+--------+
| 张三   |
| 王麻子 |
| 这届   |
+--------+

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


select * from stu;
+------+--------+-------+
| id   | name   | grade |
+------+--------+-------+
|   60 | 张三   |    98 |
|    5 | 王麻子 |    80 |
|   56 | 这届   |   100 |
+------+--------+-------+

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

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

SELECT DISTINCT 列名称 FROM 表名称


mysql> select *from stu;
+------+--------+-------+
| id   | name   | grade |
+------+--------+-------+
|   60 | 张三   |    98 |
|   56 | 惹杰   |   100 |
|  123 | 李白   |    96 |
|    5 | 王麻子 |    80 |
|    5 | 王麻子 |    80 |
+------+--------+-------+

mysql> select distinct * from stu;
+------+--------+-------+
| id   | name   | grade |
+------+--------+-------+
|   60 | 张三   |    98 |
|   56 | 这届   |   100 |
|    5 | 王麻子 |    80 |
+------+--------+-------+

mysql> select distinct name from stu;
+--------+
| name   |
+--------+
| 张三   |
| 惹杰   |
| 李白   |
| 王麻子 |
+--------+

查找-where语法

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

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

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


select * from stu where name = '王麻子';
+------+--------+-------+
| id   | name   | grade |
+------+--------+-------+
|    5 | 王麻子 |    80 |
|    5 | 王麻子 |    80 |
+------+--------+-------+

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


mysql> select id, name from stu where grade>0;
+------+--------+
| id   | name   |
+------+--------+
|   60 | 张三   |
|    5 | 王麻子 |
|   56 | 这届   |
|    5 | 王麻子 |
+------+--------+

mysql> select * from stu where grade between 90 and 100;
+------+------+-------+
| id   | name | grade |
+------+------+-------+
|   60 | 张三 |    98 |
|   56 | 惹杰 |   100 |
|  123 | 李白 |    96 |
+------+------+-------+

mysql> select * from stu where grade>=90 and grade<=100;
+------+------+-------+
| id   | name | grade |
+------+------+-------+
|   60 | 张三 |    98 |
|   56 | 惹杰 |   100 |
|  123 | 李白 |    96 |
+------+------+-------+

在where基础上,加入and 和or

原始数据:


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;


+------+--------+
| id   | name   |
+------+--------+
|   60 | 张三   |
|    5 | 王麻子 |
|   56 | 这届   |
|    5 | 王麻子 |
+------+--------+

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


+------+--------+
| id   | name   |
+------+--------+
|   60 | 张三   |
|    5 | 王麻子 |
|   56 | 这届   |
|    5 | 王麻子 |
+------+--------+

排序-orde by

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

一个参数参与排序

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


+------+--------+-------+
| id   | name   | grade |
+------+--------+-------+
|    5 | 王麻子 |    80 |
|    5 | 王麻子 |    80 |
|   56 | 这届   |   100 |
|   60 | 张三   |    98 |
+------+--------+-------+

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


+------+--------+
| id   | name   |
+------+--------+
|    5 | 王麻子 |
|    5 | 王麻子 |
|   56 | 这届   |
|   60 | 张三   |
+------+--------+

多个参数参与排序

select * from stu order by id, grade;


+------+--------+-------+
| id   | name   | grade |
+------+--------+-------+
|    5 | 王麻子 |    80 |
|    5 | 王麻子 |    80 |
|   56 | 这届   |   100 |
|   60 | 张三   |    98 |
+------+--------+-------+

逆序排序

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


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正序排序。后面两个列名要和前面要显示列名对应,前面显示列名可以多于后者。


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 列名称 = 某值


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 例如我的笔记本电脑里面的数据库反映的:


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

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

Query OK, 0 rows affected (0.98 sec)

4.重复第一步,查看日志。

参考资料

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