MYSQL速通(1/5)

由于我之前已经学过一大半了,但由于时间可能隔得比较远有些遗忘,故重新来一遍

采用的是在wsl2中的docker部署MySQL

一、基础概述

二、部署MySQL并进入

  # 进入你的发行版,我使用的是Ubuntu
  wsl -d Ubuntu
  # 如果设置了用普通用户的密码登录则需要输入密码,否则默认root用户登录
  ​
  # 拉取镜像,不写版本号默认最新版
  docker pull mysql
  # 查看是否拉取成功
  docker images
  ​
  # 运行一个容器
  docker run --name <你设置的容器名> -p 3306:3306 -e MYSQL_ROOT_PASSWORD=<你要设置的密码> -d mysql
  # 查看正在运行的容器
  docker ps
  # 如果没启动使用docker start <你的容器名>即可,不要使用docker run,那样会创建一个新容器并启动
  ​
  # 进入MySQL
  docker exec -it <你的容器名> /bin/bash
  mysql -u root -p
  # 当然也可一步到位
  docker exec -it <你的容器名> mysql -u root -p
  # 之后输入你运行容器时设置的密码即可

注意:只有你成功启动了你的MySQL容器(docker start),你才可以通过图形化界面(datagrip、navicat等等)连接到MySQL进行接下来的操作

我的datagrip破解版可参考B站视频:【DataGrip2024中文破解版安装教程】DataGrip2024中文破解版安装教程_哔哩哔哩_bilibili

三、SQL

1、SQL通用语法:

①、可单行/多行书写,分号结尾

②、可通过缩进/空格来强调

③、不区分大小写,关键字建议使用大写

④、注释方式

  • -- 这是注释

  • # 这是注释

  • /* 这是注释 */

2、SQL分类

①、DDL

DDL(Data Definition Language),数据定义语言,用来定义数据库对象(数据库,表,字段)包括对数据库、表等的操作

Ⅰ、操作数据库
  # 1、查询数据库
  # 查询所有数据库
  SHOW DATABASES;
  # 查询当前数据库
  SELECT DATABASE();
  ​
  # 2、创建数据库
  # 中括号的选写,IF NOT EXISTS 没有就创建,有就不创建
  CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [ COLLATE 排序规则];
  ​
  # 3、删除数据库
  # 中括号的选写,IF EXISTS 有就删除,没有不报错
  DROP DATABASE [ IF EXISTS ] 数据库名;
  ​
  # 4、使用数据库
  USE 数据库名;
Ⅱ、操作表
  # 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、修改表
  # 添加字段
  ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束];
  # 修改数据类型
  ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);
  # 修改字段名和字段类型
  ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束];
  # 删除字段
  ALTER TABLE 表名 DROP 字段名;
  # 修改表名
  ALTER TABLE 表名 RENAME TO 新表名;
  ​
  # 4、删除表
  # 删除表
  DROP TABLE [ IF EXISTS ] 表名;
  # 删除指定表,并重新创建该表
  TRUNCATE TABLE 表名;
②、DML

DML(Data Manipulation Language),数据操作语言,用来对数据库表中的数据进行增删改

  # 1、添加数据
  # 给指定字段添加数据
  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、修改数据
  UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ];
  ​
  # 3、删除数据
  DELETE FROM 表名 [ WHERE 条件 ]
③、DQL

DQL(Data Query Language),数据查询语言,用来查询数据库中表的记录

  
  # 1、基本查询
  # 查询多个字段
  SELECT 字段1, 字段2, 字段3 ... FROM 表名;
  # 查询所有信息
  SELECT * FROM 表名;
  # 设置别名
  SELECT 字段1 [AS 别名1], 字段2 [AS 别名2] ... FROM 表名;
  # 去除重复记录
  SELECT DISTINCT 字段列表 FROM 表名;
  ​
  # 2、条件查询
  SELECT 字段列表 FROM 表名 WHERE 条件列表;
  # 常见条件:>、>=、<、<=、=、<> 或 !=、BETWEEN...AND...、IN(...)、IS NULL、AND 或 &&、OR 或 ||、NOT 或 !、like占位符
  # 注意between.小.and.大.,且是(小,大]
  # 注意like占位符,'_'表示一位数,'_3'表示以3结尾的二位数,'%3'表示所有以3结尾的数
  ​
  # 3、聚合函数
  SELECT 聚合函数(字段列表) FROM 表名;
  # 常见聚合函数:count(统计数量)、max(最大值)、min(最小值)、avg(平均值)、sum(求和)
  # 所有null值不参与聚合函数的运算
  ​
  # 4、分组查询
  SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后过滤条件 ];
  # where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  # where不能对聚合函数进行判断,而having可以。
  # 注意:执行顺序: where > 聚合函数 > having
  ​
  # 5、排序查询
  SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;
  # 排序方式:ASC:升序(默认值)、DESC:降序
  # 注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。
  ​
  # 6、分页查询
  SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;
  # 注意:
  # 起始索引从0开始,起始索引 = (查询页码 - 1)* 每页显示记录数。
  # 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  # 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
④、DCL
DCL(Data Control Language),数据控制语言,用来创建数据库用户、控制数据库的访问权限

  
  # 1、管理用户
  # 查询用户
  USE mysql;
  SELECT * FROM user;
  # 创建用户
  CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  # 修改用户密码
  # 注意:MySQL8.0之后默认认证插件已经从mysql_native_password改为caching_sha2_password
  ALTER USER '用户名'@'主机名' IDENTIFIED WITH caching_sha2_password BY '新密码';
  # 删除用户
  DROP USER '用户名'@'主机名';
  ​
  # 2、权限控制
  # 查询权限
  SHOW GRANTS FOR '用户名'@'主机名';
  # 授予权限
  GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  # 撤销权限
  REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

除了使用以上命令行方式创建,还可以通过图形化界面创建表、列等等

3、部分实操

不进行对数据库、表、数据、查询的实操,只展示DCL部分(因为这部分之前很少做,可能不太熟悉)

创建一个测试用户test_user

此处将对mysql数据库的user表的所有权限给了test_user(此处只是做演示,不建议真正这么做,mysql.user是系统表不建议给普通用户直接管理的权限)

四、函数

1、字符串函数

函数功能
CONCAT(S1,S2,...Sn)字符串拼接,将S1,S2,...Sn拼接成一个字符串
LOWER(str)将字符串str全部转为小写
UPPER(str)将字符串str全部转为大写
LPAD(str,n,pad)左填充,用字符串pad对str的左边进行填充,达到n个字符串长度
RPAD(str,n,pad)右填充,用字符串pad对str的右边进行填充,达到n个字符串长度
TRIM(str)去掉字符串头部和尾部的空格
SUBSTRING(str,start,len)返回从字符串str从start位置起的len个长度的字符串

2、数值函数

函数功能
CEIL(x)向上取整
FLOOR(x)向下取整
MOD(x,y)返回x/y的模
RAND()返回0~1内的随机数
ROUND(x,y)求参数x的四舍五入的值,保留y位小数

3、日期函数

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前日期和时间
YEAR(date)获取指定date的年份
MONTH(date)获取指定date的月份
DAY(date)获取指定date的日期
DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
DATEDIFF(date1,date2)返回起始时间date1和结束时间date2之间的天数

4、流程函数

函数功能
IF(value , t, f)如果value为true,则返回t,否则返回f
IFNULL(value1 , value2)如果value1不为空,返回value1,否则返回value2
CASE WHEN [ val1 ] THEN [ res1 ] ... ELSE [ default ] END如果val1为true,返回res1,... 否则返回default默认值
CASE [ expr ] WHEN [ val1 ] THEN [ res1 ] ... ELSE [ default ] END如果expr的值等于val1,返回res1,... 否则返回default默认值

五、约束

概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。

目的:保证数据库中数据的正确、有效性和完整性。

外键约束所引用的列一般要是唯一的,即要么unique要么primary key

约束描述关键字
非空约束限制该字段的数据不能为nullNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束(8.0.16版本之后)保证字段值满足某一个条件CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY
  # 添加外键
  CREATE TABLE 表名(
    字段名 数据类型,
    ...
    [CONSTRAINT] [外键名称] FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名)
  );
  ​
  ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键字段名) REFERENCES 主表(主表列名);
  ​
  # 删除外键
  ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
行为说明
NO ACTION当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 RESTRICT 一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。(与 NO ACTION 一致)
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这就要求该外键允许取null)。
SET DEFAULT父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持)
  ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名(主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
  # 此处是CASCADE的使用
  # 完整使用是在添加外键约束的后面加上
  # On update+行为①+on delete+行为 ②
  # 即更新时用行为①,删除时用行为②

前两个约束(NO ACTION,RESTRICT)是默认的,不用单独额外设置

### MySQL入门笔记与学习指南 MySQL 是一种广泛使用的关系型数据库管理系统,以其高效性、可靠性以及易于使用的特性受到众多开发者的青睐。对于初学者而言,掌握 MySQL 的基本概念和操作方法至关重要。 #### 安装与配置 开始学习 MySQL 之前,需要先完成其安装与配置[^1]。可以从官方网站下载适合您操作系统的 MySQL 版本,并按照官方提供的安装向导进行安装。安装过程中需要注意选择合适的配置选项,例如服务器类型、安全设置等,以满足不同的使用需求。 #### 基础概念 了解 MySQL 中的基础概念是学习的第一步,包括但不限于数据库、表、字段、记录等。此外,熟悉 SQL(Structured Query Language)语言的基本语法也是必不可少的,它允许用户执行各种数据库操作,如创建数据库、定义表结构、插入数据、查询数据等。 #### 运算符与函数 MySQL 支持多种运算符,包括算术运算符、比较运算符、逻辑运算符及位运算符等,这些运算符可以用于处理和计算数据库中的数据[^2]。例如,利用算术运算符可以基于现有的字段值计算出新的信息,如学生的年龄可以过当前年份减去出生年份来得出。同时,MySQL 还提供了丰富的内置函数,用于字符串处理、日期时间处理、数学计算等功能,极大地丰富了数据处理的能力。 #### 数据操作语言 (DML) 数据操作语言主要用于对数据库中的数据进行增删改查等操作。常见的 DML 命令有 `INSERT`、`UPDATE`、`DELETE` 和 `SELECT`。过这些命令,可以有效地管理和维护数据库中的数据[^4]。 #### 数据定义语言 (DDL) 数据定义语言涉及数据库对象的创建、修改和删除,如使用 `CREATE TABLE` 创建新表、`ALTER TABLE` 修改现有表结构或 `DROP TABLE` 删除表等操作[^4]。 #### 约束与索引 为了保证数据的完整性和一致性,MySQL 提供了多种约束机制,包括主键约束、唯一性约束、外键约束等。合理地使用这些约束可以帮助避免无效的数据被插入到数据库中。此外,索引的创建能够显著提高查询效率,尤其是在大型数据库中[^3]。 #### 示例代码:创建与修改表 ```sql -- 创建一个简单的学生表 CREATE TABLE students ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, birth DATE ); -- 添加唯一性约束 ALTER TABLE students ADD UNIQUE (name); -- 移除唯一性约束 ALTER TABLE students DROP INDEX name; -- 修改列属性 ALTER TABLE students MODIFY name VARCHAR(20) NOT NULL; ``` #### 事务控制与权限管理 事务控制语言 (TCL) 用于管理数据库中的事务,确保数据的一致性和完整性。而数据控制语言 (DCL) 则涉及到用户的权限管理,如授予或撤销用户对特定数据库对象的操作权限[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值