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

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

相关推荐
zzh0812 小时前
数据库初识与安装
数据库
m0_738098022 小时前
使用Python操作文件和目录(os, pathlib, shutil)
jvm·数据库·python
standovon2 小时前
【MySQL基础篇】概述及SQL指令:DDL及DML
sql·mysql·oracle
AI成长日志2 小时前
【实用工具教程】数据库基础操作实战:SQLite/MySQL连接、CRUD操作与查询优化
数据库·mysql·sqlite
l1t2 小时前
DeepSeek总结的 DuckDB 1.5 功能亮点
数据库·sql·duckdb
2501_926978332 小时前
“术“与“道“的平衡---“缺失“与“完整”的统一
经验分享·笔记·ai写作
Bdygsl2 小时前
MySQL(4)—— 表设计
数据库·mysql
2301_819414303 小时前
使用Python进行图像识别:CNN卷积神经网络实战
jvm·数据库·python