MySQL基础篇01之SQL语句(笔记整理)

》MySQL概述

一、数据库相关概念

名称概念简称
数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)
数据库管理系统操作和管理数据库的大型软件(比如MySQL)DataBase Management System(DBMS)
SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库的统一标准Structured Query Language(SQL)

二、MySQL数据库

  1. MySQL的安装见另一篇文章

  2. 启动与停止:以管理员身份运行cmd
    启动:net start mysql
    停止:net stop mysql
    其中mysql为自己创建的Windows Service Name

  3. 客户端连接
    方法一:MySQL提供的客户端命令行工具
    方法二:系统的命令行工具执行指令:mysql [-h] [-P] -u root -p

  4. 关系型数据库(RDBMS)
    概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库

  5. 数据模型
    数据模型

》SQL

一、SQL的通用语法

  1. SQL语句可以单行或多行书写,以分号结尾
  2. SQL语句可以使用空格/缩进来增强语句的可读性
  3. MySQL数据库的SQL语句不区分大小写,关键字建议大写
  4. 注释有单行注释和多行注释
    单行注释:-- 注释内容 或 # 注释内容
    多行注释:/* 注释内容 */

二、SQL的数据类型

MySQL中的数据类型主要分成三大类:数值类型字符串类型日期时间类型

(一)整型

类型名称取值范围大小
TINYINT-128〜1271个字节
SMALLINT-32768〜327672个宇节
MEDIUMINT-8388608〜83886073个字节
INT (INTEGHR)-2147483648〜21474836474个字节
BIGINT-9223372036854775808〜92233720368547758078个字节

注意: 无符号在数据类型后加 unsigned 关键字。

(二)浮点型

类型名称说明存储需求
FLOAT单精度浮点数4 个字节
DOUBLE双精度浮点数8 个字节
DECIMAL (M, D),DEC压缩的“严格”定点数M+2 个字节

(三)字符串

类型名称说明存储需求
CHAR(M)固定长度非二进制字符串M 字节,1<=M<=255
VARCHAR(M)变长非二进制字符串L+1字节,在此,L< = M和 1<=M<=255
TINYTEXT非常小的非二进制字符串L+1字节,在此,L<2^8
TEXT小的非二进制字符串L+2字节,在此,L<2^16
MEDIUMTEXT中等大小的非二进制字符串L+3字节,在此,L<2^24
LONGTEXT大的非二进制字符串L+4字节,在此,L<2^32
ENUM枚举类型,只能有一个枚举字符串值1或2个字节,取决于枚举值的数目 (最大值为65535)
SET一个设置,字符串对象可以有零个或多个SET成员1、2、3、4或8个字节,取决于集合 成员的数量(最多64个成员)

(四)日期和时间

类型名称日期格式日期范围存储需求
YEARYYYY1901 ~ 21551 个字节
TIMEHH:MM:SS-838:59:59 ~ 838:59:593 个字节
DATEYYYY-MM-DD1000-01-01 ~ 9999-12-33 个字节
DATETIMEYYYY-MM-DD HH:MM:SS1000-01-01 00:00:00 ~ 9999-12-31 23:59:598 个字节
TIMESTAMPYYYY-MM-DD HH:MM:SS1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC4 个字节

三、SQL分类

分类说明
DDL数据定义语言,用来定义数据库对象(数据库、表、字段)
DML数据操作语言,用来对数据库表中的数据进行增删改
DQL数据查询语言,用来查询数据库中表的记录
DCL数据控制语言,用来创建数据库用户、控制数据库的控制权限

注意以下所有命令中[…]为可选参数

(一) DDL(数据定义语言)

1、数据库操作
(1)数据库操作-查询

– 查询所有数据库:

SHOW DATABASES;

– 查询当前数据库:

SELECT DATABASE();
(2) 数据库操作-创建

– 创建数据库:

CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ];
(3)数据库操作-删除

– 删除数据库:

DROP DATABASE [ IF EXISTS ] 数据库名;
(4)数据库操作-使用

– 使用数据库:

USE 数据库名;
2、表操作
(1)表操作-查询

– 查询当前数据库所有表:

SHOW TABLES;

– 查询表结构:

DESC 表名;

– 查询指定表的建表语句:

SHOW CREATE TABLE 表名;
(2)表操作-创建

– 创建表:

CREATE TABLE 表名(
    字段1 字段1类型 [COMMENT 字段1注释],
    字段2 字段2类型 [COMMENT 字段2注释],
    字段3 字段3类型 [COMMENT 字段3注释],
    ...
    字段n 字段n类型 [COMMENT 字段n注释]
)[ COMMENT 表注释 ];
(3)表操作-修改

– 添加(add)字段:

ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];

– 调整(modify)字段的数据类型:

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

– 改变(change)字段名和字段的数据类型:

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];

– 删除(drop)字段:

ALTER TABLE 表名 DROP 字段名;

– 修改表名(rename to):

ALTER TABLE 表名 RENAME TO 新表名;
(4)表操作-删除

– 删除表:

DROP TABLE [IF EXISTS] 表名;

– 删除表,并重新创建该表:

TRUNCATE TABLE 表名;

(二) DML(数据操作语言)

1、添加(insert)数据

– 给指定字段添加数据:

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (1,2, ...);

– 给全部字段添加数据:

INSERT INTO 表名 VALUES (1,2, ...);

– 批量添加数据:

INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (1,2, ...), (1,2, ...), (1,2, ...);
INSERT INTO 表名 VALUES (1,2, ...), (1,2, ...), (1,2, ...);

注意事项

  • 插入数据时,指定的字段顺序需要和值的顺序一一对应
  • 字符串和日期类型数据应该包含在引号中
  • 插入的数据大小应该在字段的规定范围内

2、更新(updata)数据

– 修改字段数据值:

UPDATE 表名 SET 字段名1 =1, 字段名2 =2, ... [ WHERE 条件 ];

注意事项

  • where 条件 用来指定修改数据的位置
  • 不加where 条件 表示修改整张表该字段的所有数据

3、删除(delete)数据

– 删除记录数据:

DELETE FROM 表名 [ WHERE 条件 ];

注意事项

  • where 条件 用来指定删除哪行记录
  • 不加where 条件 表示删除整张表的所有数据
  • delete语句不能删除某个字段的值

(三) DQL(数据查询语言)

1、DQL语法
SELECT
    字段列表
FROM
    表名字段
WHERE
    条件列表
GROUP BY
    分组字段列表
HAVING
    分组后的条件列表
ORDER BY
    排序字段列表
LIMIT
    分页参数

2、基础查询(select from)
(1)查询多个字段:
SELECT 字段1, 字段2, 字段3, ... FROM 表名;
SELECT * FROM 表名;
(2)设置别名:
SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名;
SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名;
(3)去除重复记录(distinct):
SELECT DISTINCT 字段列表 FROM 表名;

3、条件查询(where)

语法:

SELECT 字段列表 FROM 表名 WHERE 条件列表;
(1)常用的查询条件
查询条件谓词
比较=, >, <, >=, <=, !=, <>, !>, !<,
确定范围between and, not between and
确定集合in, not in
字符匹配like, not like
空值is null, is not null
多重条件(逻辑运算)not, and, or
(2) 比较大小查询
比较功能
=等于
>大于
<小于
>=大于等于
<=小于等于
!=不等于
<>不等于
!>不大于
!<不小于
(3)确定范围查询

语法:

where 字段1 [not] betweenand;
确定范围功能
between…and…元组属性值在指定范围内(包含最小、最大值)
not between…and…元组属性值不在指定范围内(包含最小、最大值)
(4) 确定集合查询

语法:

where 字段1 [not] in 集合;
确定集合功能
in元组属性值在指定的集合
not in元组属性值不在指定的集合
(5)字符匹配查询

语法:

where 字段1 [not] like'<匹配字符串>' [escape'<换码字符>'];
字符匹配功能
like元组的指定属性列值与<匹配字符串>相匹配
not like元组的指定属性列值与<匹配字符串>不匹配

– 其中<匹配字符串>可以是一个完整的字符串、也可以是含有通配符 %(匹配任意个字符) 和 _(匹配单个字符)的字符串。
– 在查询的字符串中本身就含有 % 和 _ 时,需要用到 escape’<换码字符>’ 语句对通配符进行转义,例如:/ 之后的_不作为通配符。

SELECT * FROM 表名 WHERE name LIKE '/_张三' ESCAPE '/'
(6)涉及空值查询

语法:

where 字段1 is [not] null;
涉及空值功能
is null元组属性值为空
is not null元组属性值不为空
(7)多重条件查询

语法:

where 条件1 and/or/not 条件2...;
多重条件功能
and并且(多个条件同时成立)
or或者(多个条件任意一个成立)
not非,不是
(8)聚合查询(聚合函数:count、max、min、avg、sum…)

常见聚合函数:

聚合函数功能
count统计数量
max最大值
min最小值
avg平均值
sum求和

语法:

SELECT 聚合函数(字段列表) FROM 表名;
5、分组查询(group by)

语法:

SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ];

where 和 having 的区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件不参与分组;having是分组后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

注意事项:

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

6、排序查询(order by)

语法:

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;

排序方式:

  • ASC: 升序(默认)
  • DESC: 降序

注意事项:
如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序


7、分页查询(limit)

语法:

SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;

注意事项:

  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数
  • 分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT
  • 如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10

(四) DCL(数据控制语言)

1、管理用户
(1)查询用户:
USE mysql;
SELECT * FROM user;
(2)创建用户:
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
(3)修改用户密码:
ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';
(4)删除用户:
DROP USER '用户名'@'主机名';

例子:

-- 创建用户test,只能在当前主机localhost访问
create user 'test'@'localhost' identified by '12345678';
-- 创建用户test,能在任意主机访问
create user 'test'@'%' identified by '12345678';
create user 'test' identified by '12345678';
-- 修改密码
alter user 'test'@'localhost' identified with mysql_native_password by '1234';
-- 删除用户
drop user 'test'@'localhost';

注意事项
主机名可以使用 % 通配


2、权限控制
(1)常用权限:
权限说明
ALL, ALL PRIVILEGES所有权限
SELECT查询数据
INSERT插入数据
UPDATE修改数据
DELETE删除数据
ALTER修改表
DROP删除数据库/表/视图
CREATE创建数据库/表
(2)查询权限:
SHOW GRANTS FOR '用户名'@'主机名';
(3)授予权限:
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
(4)撤销权限:
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意事项

  • 多个权限用逗号分隔
  • 授权时,数据库名和表名可以用 * 进行通配,代表所有

四、MySQL 图形化界面工具

  • Workbench(免费): http://dev.mysql.com/downloads/workbench/
  • navicat(收费,试用版30天): https://www.navicat.com/en/download/navicat-for-mysql Sequel
  • Pro(开源免费,仅支持Mac OS): http://www.sequelpro.com/
  • HeidiSQL(免费): http://www.heidisql.com/ phpMyAdmin(免费): https://www.phpmyadmin.net/
  • SQLyog: https://sqlyog.en.softonic.com/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值