MySQL常用命令

前言

MySQL语句多而杂,记录下来方便自己回顾和查询。官网安装MySQL client,我多安装了一个work bench,图形化界面,对于一些操作还是十分方便的。

配置好环境变量之后就可以开始运行了。


运行MySQL

直接打开命令行输入mysql -u root -p,root是用户名(可更改),p表示之后输入密码,成功后就连接到MySQL服务器了:
如图显示连接MySQL服务器成功

以上是本地连接,如果需要更详细的或者连接远程数据库,输入指令:
mysql –u用户名 [–h主机名或者IP地址,-P端口号] –p密码

  1. 该命令是在命令行窗口下执行,而不是MySQL的命令行;
  2. 输入-p后可以直接跟上密码,也可以按回车,会提示你输入密码,二者都是相同的效果;
  3. –p密码选项不一定是要在最后;
  4. –u、-h、-p后无空格。(端口号一般为3306,不过也可以更改)

连接远程数据库时,如果无法连接,提示密码错误的话,需要更改host值为"%",我的做法是用MySQL WorkBench客户端:
如图所示操作,修改为"%"

创建数据库

如下脚本创建test数据库,并且在test数据库下创建students表classes表,以及必要的初始化数据。源自廖雪峰

可以作为一个创建的范本:

-- 如果test数据库不存在,就创建test数据库:
CREATE DATABASE IF NOT EXISTS test;

-- 切换到test数据库
USE test;

-- 删除classes表和students表(如果存在):
DROP TABLE IF EXISTS classes;
DROP TABLE IF EXISTS students;

-- 创建classes表:
CREATE TABLE classes (
    id BIGINT NOT NULL AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 创建students表:
CREATE TABLE students (
    id BIGINT NOT NULL AUTO_INCREMENT,
    class_id BIGINT NOT NULL,
    name VARCHAR(100) NOT NULL,
    gender VARCHAR(1) NOT NULL,
    score INT NOT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入classes记录:
INSERT INTO classes(id, name) VALUES (1, '一班');
INSERT INTO classes(id, name) VALUES (2, '二班');
INSERT INTO classes(id, name) VALUES (3, '三班');
INSERT INTO classes(id, name) VALUES (4, '四班');

-- 插入students记录:
INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'M', 90);
INSERT INTO students (id, class_id, name, gender, score) VALUES (2, 1, '小红', 'F', 95);
INSERT INTO students (id, class_id, name, gender, score) VALUES (3, 1, '小军', 'M', 88);
INSERT INTO students (id, class_id, name, gender, score) VALUES (4, 1, '小米', 'F', 73);
INSERT INTO students (id, class_id, name, gender, score) VALUES (5, 2, '小白', 'F', 81);
INSERT INTO students (id, class_id, name, gender, score) VALUES (6, 2, '小兵', 'M', 55);
INSERT INTO students (id, class_id, name, gender, score) VALUES (7, 2, '小林', 'M', 85);
INSERT INTO students (id, class_id, name, gender, score) VALUES (8, 3, '小新', 'F', 91);
INSERT INTO students (id, class_id, name, gender, score) VALUES (9, 3, '小王', 'M', 89);
INSERT INTO students (id, class_id, name, gender, score) VALUES (10, 3, '小丽', 'F', 85);

-- OK:
SELECT 'ok' as 'result:';


查询数据

基本查询

SELECT * FROM <表名>

select * from students;

*表示“完整的整个二维表”/“所有列”,from表示从哪个表查询。

SELECT语句其实并不要求一定要有FROM子句:

SELECT 100+200;//返回300

上述查询会直接计算出表达式的结果。虽然SELECT可以用作计算,但它并不是SQL的强项。但是,不带FROM子句的SELECT语句有一个有用的用途,就是用来判断当前到数据库的连接是否有效。许多检测工具会执行一条SELECT 1;来测试数据库连接。

小结

使用SELECT查询的基本语句SELECT * FROM <表名>可以查询一个表的所有行和所有列的数据。

SELECT查询的结果是一个二维表


条件查询

SELECT * FROM <表名> WHERE <条件表达式>
可以多个条件:

select * from students where score >= 80 and score <= 90;

常用条件表达式

条件 表达式举例 说明
使用=判断相等 score = 80 字符串需要用单引号括起来
使用>判断大于 score > 80
使用>=判断大于或相等 score >= 80
使用<判断小于 score < 80
使用<=判断小于或相等 score <= 80
使用<>判断不相等 /not score <> 80/not score = 80
使用LIKE判断相似 name LIKE ‘ab%’/name LIKE ‘%bc%’ %表示任意字符,例如’ab%‘将匹配’ab’,‘abc’,‘abcd’

加上括号可以改变优先级。


投影查询

如果我们只希望返回某些列的数据,而不是所有列的数据,我们可以用SELECT 列1, 列2, 列3 FROM ...,让结果集仅包含指定列。这种操作称为投影查询。

SELECT id, score, name FROM students;

使用SELECT 列1, 列2, 列3 FROM …时,还可以给每一列起个别名,这样,结果集的列名就可以与原表的列名不同。它的语法是SELECT 列1 别名1, 列2 别名2, 列3 别名3 FROM ...

例如,以下SELECT语句将列名score重命名为points,而id和name列名保持不变:

SELECT id, score points, name FROM students;

将结果排序显示

我们使用SELECT查询时,查询结果集通常是按照id排序的,也就是根据主键排序。这也是大部分数据库的做法。如果我们要根据其他条件排序怎么办?可以加上ORDER BY子句。例如按照成绩从低到高进行排序:

SELECT id, name, gender, score FROM students ORDER BY score;

默认是升序asc,如果要反过来,按照成绩从高到底排序,我们可以加上DESC表示“倒序”

SELECT id, name, gender, score FROM students ORDER BY score DESC;

分页查询

使用SELECT查询时,如果结果集数据量很大,比如几万行数据,放在一个页面显示的话数据量太大,不如分页显示,每次显示100条。

要实现分页功能,实际上就是从结果集中显示第1-100条记录作为第1页,显示第101-200条记录作为第2页,以此类推。

因此,分页实际上就是从结果集中“截取”出第M~N条记录。这个查询可以通过LIMIT <M> OFFSET <N>子句实现。

把结果集分页,每页3条记录。要获取第1页的记录,可以使用LIMIT 3 OFFSET 0

SELECT id, name, gender, score
FROM students
ORDER BY score DESC
LIMIT 3 OFFSET 0;

LIMIT总是设定为pageSize
OFFSET计算公式为pageSize * (pageIndex - 1)


聚合查询

COUNT(*)表示查询所有列的行数,要注意聚合的计算结果虽然是一个数字,但查询的结果仍然是一个二维表,只是这个二维表只有一行一列,并且列名是COUNT(*)。

通常,使用聚合查询时,我们应该给列名设置一个别名,便于处理结果:

SELECT COUNT(*) num FROM students;
SELECT COUNT(id) num FROM students;//效果相同
函数 说明
SUM 计算某一列的合计值,该列必须为数值类型
AVG 计算某一列的平均值,该列必须为数值类型
MAX 计算某一列的最大值
MIN 计算某一列的最小值

分组

group by
查询男女同学分别的平均分:

select gender, avg(score) average from students group by gender;


连接查询

多表查询时,通过外键将一个表和另外一个表相关联,并显示两张表的内容。

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;

  1. 先确定主表,仍然使用FROM <表1>的语法;
  2. 再确定需要连接的表,使用INNER JOIN <表2>的语法;
  3. 然后确定连接条件,使用ON <条件…>,这里的条件是s.class_id = c.id,表示students表的class_id列与classes表的id列相同的行需要连接;
  4. 可选:加上WHERE子句、ORDER BY等子句。

注意区分几个连接语句:

  1. inner join返回同时存在于两张表的行数据;
  2. left outer join返回左表都存在的行;
  3. right outer join返回右表都存在的行。

修改数据

关系数据库的基本操作就是增删改查,即CRUD:Create、Retrieve、Update、Delete。其中,对于查询,就是前面的select。

INSERT


UPDATE


DELETE


初学前端,记录学习的内容和进度~
原文地址:https://www.cnblogs.com/xiuhua/p/13398782.html