mysql 基础笔记一

1.SQL通用语法

  1. SQL语句可以单行或多行书写,以分号结尾

  2. SQL语句可以使用空格/缩进来增强语句的可读性

  3. 不区分大小写,关键字建议使用大写

  4. 注释

    1. 单行注释:-- 注释内容# 注释内容(MySQL特有)

    2. 多行注释:/* 注释内容 */

2.SQL分类

  1. DDL:数据定义语言,用来定义数据库对象(数据库,表,字段)

  2. DML:数据操作语言,用来对数据库表中的数据进行增删改

  3. DQL:数据查询语言,用来查询数据库中表的记录

  4. DCL:数据控制语言,用来创建数据库用户、控制数据库的访问权限

3.数据定义语言DDL

3.1 DDL-数据库操作

查询所有数据库

SHOW DATABASES;

查询当前数据库

SELECT DATABASE();

创建数据库

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排序规则];

默认的字符集和排序规则分别是utf8mb4字符集和utf8mb4_unicode_ci排序规则,也是推荐使用的字符集和排序规则

删除数据库

DROP DATABASE [IF EXISTS] 数据库名;

使用数据库

USE 数据库名;

3.2 DDL-表操作-查询

查询当前数据库所有表

SHOW TABLES;

查询表结构

DESC 表名;

查询指定表的建表语句

SHOW CREATE TABLE 表名;

3.3 DDL-表操作-创建

复制代码

3.4 DDL-表操作-数据类型

3.4.1 数值类型
整数类型:
  • TINYINT:1字节,小整数,范围:-128 ~ 127(有符号)或 0 ~ 255(无符号)

  • SMALLINT:2字节,大整数,范围:-32,768 ~ 32,767(有符号)或 0 ~ 65,535(无符号)

  • MEDIUMINT:3字节,大整数,范围:-8,388,608 ~ 8,388,607(有符号)或 0 ~ 16,777,215(无符号)

  • INT或INTEGER:4字节,大整数,范围:-2,147,483,648 ~ 2,147,483,647(有符号)或 0 ~ 4,294,967,295(无符号)

  • BIGINT:8字节,极大整数,范围:-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807(有符号)或 0 ~ 18,446,744,073,709,551,615(无符号)

浮点数类型:
  • FLOAT:4字节,单精度浮点数,范围:-3.402823466 E+38 ~ 3.402823466351 E+38(有符号)或 0 和 1.175494351 E-38 ~ 3.402823466 E+38,近似值

  • DOUBLE:8字节,双精度浮点数,范围:-1.7976931348623157 E+308 ~ 1.7976931348623157 E+308 或 0 和 2.2250738585072014 E-308 ~ 1.7976931348623157 E+308,近似值

  • DECIMAL(M, D):精确值,M 是总位数,D 是小数位数。例如,DECIMAL(5, 2)可以存储 123.45

3.4.2 字符串类型
  • CHAR(N):固定长度字符串,最多 255 个字符

  • VARCHAR(N):可变长度字符串,最多 65,535 个字符

  • TINYBLOB:不超过 255 个字符的二进制数据

  • TINYTEXT:短文本字符串,最多 255 个字符

  • BLOB:二进制形式的长文本数据,最多 65,535 个字符

  • TEXT:长文本数据,最多65,535个字符

  • MEDIUMBLOB:二进制形式的中等长度文本数据,最多 16,777,215 个字符

  • MEDIUMTEXT:中等长度文本数据,最多 16,777,215 个字符

  • LONGBLOB:二进制形式的极大文本数据,最多 4,294,967,295 个字符

  • LONGTEXT:极大文本数据,最多 4,294,967,295 个字符

3.4.3 日期时间类型
  • DATE:日期值,3字节,格式为YYYY-MM-DD,范围是1000-01-01 至 9999-12-31

  • TIME:时间值或持续时间,3字节,格式为HH:MM:SS,范围是-838:59:59 至 838:59:59

  • YEAR:年份值,1字节,格式为YYYY,范围是1901 至 2155

  • DATETIME:混合日期和时间值,8字节,格式为YYYY-MM-DD HH:MM:SS,范围是1000-01-01 00:00:00 至 9999-12-31 23:59:59

  • TIMESTAMP:混合日期和时间值,时间戳,4字节,格式为YYYY-MM-DD HH:MM:SS,范围是1970-01-01 00:00:01 至 2038-01-19 03:14:07

3.4.4 布尔类型
  • BOOLEAN或BOOL:底层会自动转换成TINYINT(1),赋值时可以用FALSE和TRUE,也可以使用0和1

3.5 DDL-表操作-修改

添加字段

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

修改数据类型

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

修改字段名和字段类型

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

删除字段

ALTER TABLE 表名 DROP 字段名;

修改表名

ALTER TABLE 表名 RENAME TO 新表名;

3.6 DDL-表操作-删除

删除表

DROP TABLE [IF EXISTS] 表名;

删除指定表,并重新创建该表

TRUNCATE TABLE 表名;

4.数据操作语言DML

4.1 DML-添加数据

给指定字段添加数据

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,...);

插入数据时,指定的字段顺序需要与值的顺序是一一对应

字符串和日期型数据应该包含在单引号中

插入的数据大小,应该在字段的规定范围内

4.2 DML-修改数据

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

如果没有条件,会修改整张表的所有数据

4.3 DML-删除数据

DELETE FROM 表名 [WHERE 条件];

DELETE如果没有指定条件,会删除整张表的所有数据

DELETE不能删除某一个字段的值(可以使用UPDATE)

DELETE仅仅删除表中的数据,DROP会把整张表和数据一起删除

5.数据查询语言DQL

5.1 DQL-语法

5.2 DQL-基本查询

查询多个字段

SELECT 字段1,字段2,... FROM 表名;

-- *代表所有字段,因为不够直观,不建议使用

设置别名

SELECT 字段1 [AS 别名1],字段2 [AS 别名2]... FROM 表名; -- AS可以省略

去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

5.3 DQL-条件查询

SELECT 字段列表 FROM 表名 WHERE 条件列表;

条件:

比较运算符 说明
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<>或!= 不等于
BETWEEN 最小值 AND 最大值 在最小值和最大值之间(包含最小值和最大值)
IN(...) 在in之后的列表中的值,多选一
LIKE 占位符 模糊匹配(_匹配单个字符, %匹配任意个字符)
IS NULL 是NULL
IS NOT NULL 不是NULL
逻辑运算符 说明
AND 或 && 并且 (多个条件同时成立)
OR 或 || 或者 (多个条件任意一个成立)
NOT 或 ! 非 , 不是

LIKE 后如果要表示单纯的_%,需要用到转义字符\

5.4 DQL-聚合函数

SELECT 聚合函数(字段列表) FROM 表名;

常见聚合函数

函数 功能
COUNT 统计个数
MAX 最大值
MIN 最小值
AVG 平均值
SUM 求和

NULL值不参与聚合函数的运算

5.5 DQL-分组查询

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

WHERE和HAVING的区别
  1. 执行时机不同:执行时机不同:WHERE是分组之前进行过滤,不满足WHERE条件,不参与分组;而HAVING是分组之后对结果进行过滤

  2. 判断条件不同:WHERE不能对聚合函数进行判断,而HAVING可以

执行顺序:where > 聚合函数 > having

5.6 DQL-排序查询

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

排序方式:ASC升序排列(默认值)DESC降序排列

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

5.7 DQL-分页查询

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

  • 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数

  • 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT

  • 如果查询的是第一页数据,起始索引可以省略,直接简写为 limit 10

5.8 DQL-执行顺序

6.数据控制语言DCL

6.1 DCL-管理用户

查询用户

USE mysql SELECT * FROM user;

创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

修改用户密码

-- MySQL 5.7.6 及以上版本使用

ALTER USER '用户名'@'主机名' IDENTIFIED [WITH mysql_native_password] BY '新密码';

-- MySQL 5.7.6 以下版本使用

SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('new_password');

修改用户名和主机名

RENAME USER '用户名'@'主机名' TO '新用户名'@'新主机名';

删除用户

DROP USER '用户名'@'主机名';

主机名可以用%通配,表示所有主机

localhost代表当前主机

这类语言主要是DBA使用

6.2 DCL-权限控制

权限 说明
ALL, ALL PRIVILEGES 所有权限
SELECT 查询数据
INSERT 插入数据
UPDATE 修改数据
DELETE 删除数据
ALTER 修改表结构
DROP 删除数据库/表/视图
CREATE 创建数据库/表

查询权限

SHOW GRANTS FOR '用户名'@'主机名';

授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

  • 多个权限之间,使用逗号分隔

  • USAGE代表用户没有任何权限,创建一个用户后用户权限默认是USAGE

  • 授权时,数据库名或表名可以使用*通配符,代表所有数据库或表

相关推荐
xcLeigh7 分钟前
KES数据库表空间目录自动创建特性详解与存储运维最佳实践
大数据·运维·服务器·数据库·表空间·存储
小陈工8 分钟前
2026年4月8日技术资讯洞察:边缘AI推理框架竞争白热化,Python后端开发者的机遇与挑战
开发语言·数据库·人工智能·python·微服务·回归
卡布叻_星星15 分钟前
AI大模型之采用DeepSeek-Coder:6.7b + Ollama + Continue离线部署
笔记
wb18916 分钟前
NoSQL数据库Redis集群重习
数据库·redis·笔记·云计算·nosql
许杰小刀16 分钟前
MyBatis-Plus实战:Spring Boot数据库操作效率提升10倍
数据库·spring boot·mybatis
Navicat中国17 分钟前
Navicat 结构同步:一键解决多库结构不一致难题
数据库·navicat·结构同步
薿夜42 分钟前
SpringSecurity(二)
数据库
宵时待雨1 小时前
优选算法专题1:双指针
数据结构·c++·笔记·算法·leetcode
Stella Blog1 小时前
狂神Java基础学习笔记Day01
java·笔记·学习
tq10861 小时前
时间、决断与主体性:从“存在决定自我”到对“存在即本质”的批判
笔记