MYSQL基础篇(1)| 青训营笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: MYSQL基础篇(1)| 青训营笔记

1.2 常见函数


1.2.1 字符函数


1670049591245.jpg

LOWER('MYSQL') ##mysql
UPPER('mysql') ##MYSQL
CONCATC('MY','SOL') ##MYSQL                  ##此处CONCAT这个函数可以理解为拼接字符串的作用 
SUBSTR('Good Morning',1,4)                    ##Good ##此处的“1.4”分别代表“截取”这一动作的头部和尾部;注意,空格也会被计算在内
LENGTH('Birthday') ##8                           ##此处的LENGTH函数即是统计字符串长度;注意,空格也会被计算在内 
INSTR('china',i) ##3                                ##此外的TNSTR多数可以理解为“选中”,根据给出的字符出后面的字符来确定是在该字符出的第几个位置
LPAD('MORNING',3,'*') ##***NING            ##此外的IPAD函数可以理解为月最后一个字符去“遮盖”相对应的字符位数(从第一个字符开始计数),具体数目见字符串后面一个数字,其余数字保持不变,“拼接"起来
RPAD('MORNING',3,'*') ##MORN***           ##此处的RPAD函数可以理解为用最后一个字符去“遮盖”相对应的字符位数(从最后一个字符开始计数),具体数字见字符串后面的一个数字,其余数字保持不变,“拼接"起来
TRIM('G' FROM 'GoodMorning') ##oodmorning   ##此处的TRIM函数可以理解为用第一个字符串去“抹除”该字符串在后面一串函数中的位置,其余字符串保持不变,“拼接"起来
REPLACE('Hello', 'e' 'o') ##Hollo                 ##顾名思义,此处的REPLACE函数可以理解为用最后一个字符串去替换原文中相对应的字符串的位置,其余位置保持不变,“拼接"起来


1.2.1 数字函数


ROUND:四舍五入
ROUND(45.926,2)  ##45.93    ##此处需要考虑小数点四舍五入的问题
TRUNCATE:截断
TRUNC(45.993,1)  ##45.9    ##此处起到截断作用,不需要考虑四舍五入问题,根据函数TRUNC第二个字符串来截取相对应小数点的位数
MOD:求余
MOD(1600,300)    ##100     ##此处的MOD函数理解如下,MOD(x,y)即可用x % y,得到的数字即为答案


1.2.2 日期函数


NOW:获取当前日期
str_to_date:将日期格式的字符转换成指定格式的日期
STR_TO_DATE('9-30-2002','%m-%d-%Y')   ##2002-09-30     ##此处是格式转换函数,注意年份的Y是大写字母,其余均为小写,同时要注意月份和日都是两位数,不足自动补齐
date_format:将日期转换成字符
DATE_FORMAT('2002/9/30','%Y年%m月%d日')    ##2002年09月30日    ##此处是格式转换函数,注意年份的Y是大写字母,其余均为小写,同时要注意月份和日都是两位数,不足自动补齐
序号 格式符 功能
1 %Y 四位的年份
2 %y 二位的年份
3 %m 月份(双数字)
4 %c 月份(单数字)
5 %d 日(双数字)
6 %H 小时(24小时制)
7 %h 小时(12小时制)
8 %i 分钟(双数字)
9 %s 秒(双数字)


1.2.3 流程控制函数


(1)在SQL语句中使用IF-THEN-ELSE逻辑

CASE expr WHEN comparison_expr1 THEN return_expr1
[
    WHEN comparison_expr2 THEN return_expr2
    WHEN comparison_exprn THEN return_exprn
    ELSE else_expr
]
END


1.3 数据处理之增删改


1.3.1 INSERT


(1)使用INSERT语句向表中插入数据

INSERT INTO table [(column[,column...])]
VALUES (value[,value...])

使用这种语法一次只能向表中插入一条数据


1.3.2 插入数据


(1)为每一列添加一个新值

(2)按列的默认顺序列出每个列的值

(3)在INSERT子句中随意列出列名和它们的值

(4)字符和日期型数据应包含在单引号

INSERT INTO departments(
department_id , department_name , manager_id , location_id)
VALUES(70,'Public Relations',70,1700);
)

上方代码详解

该SQL语句的即向departments这个表中插入department_id , department_name , manager_id , location_id这四个字段所对应的数值,即70,'Public Relations',70,1700

注意:使用INSERT语句插入相关数据时要确保字段位置。不可随意更改,否则可能会报Error

INSERT INTO employees(employee_id , last_name , email , hire_date , job_id)
VALUES(
300 , 'Tom' , 'tom@126.com' , to_date('2012-3-21','yyyy-mm-dd'),'SA_RAP');
)

上方代码详解

该SQL语句即向employees这个表插入employee_id , last_name , email , hire_date , job_id这五个字段所对应的数值,即300 , 'Tom' , 'tom@126.com'2012-3-21SA_RAP

注意:使用INSERT语句插入相关数据时要确保字段位置。不可随意更改,否则可能会报Error


1.3.3 向表中插入空值


(1)隐性方式:在列名表中省略该列的值

INSERT INTO departments(
department_id , department_name   )
VALUES(30,'Purchasing')
);

(2)显示方式:在VALUES子句中指定空值

INSERT INTO departments
VALUES(100,'Finance',NULL,NULL);


1.3.4 插入指定的值


NOW()函数:记录当前系统的日期和时间

INSERT INTO employees(
employee_id , first_name , last_name , email , phone_number , hire_date , job_id , salary , commission_pct , manager_id , department_id
)
VALUES(
113,'Louis','Popp','LPOPP','515.124.4567',NOW(),'AC_ACCOUNT' , 6900 , NULL , 205 , 100
);

该SQL语句即向employees这个表插入employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,commission_pct,manager_id,department_id这些字段所对应的数值,即113,'Louis','Popp','LPOPP','515.12'4.4567'NOW()'AC_ACCOUNT'6900NULL205100

注意:使用INSERT语句插入相关数据时要确保字段位置。不可随意更改,否则可能会报Error


1.3.5 从其它表中拷贝数据


在 INSERT 语句中加入子查询

ISNERT INTO emp2
SELECT * FROM employees
WHERE department id = 90 ;
INSERT INTO sales_reps(id , name , salary , commission_pct)
SELECT employee_id , last_name , salary , commission_pct
FROM employees
WHERE job_id LIKE '%REP%'

(1)不必书写VALUES子句

(2)子查询中的值列表应与INSERT子句中的列名对应

(3)上述语句不必了解,后续会讲


1.3.6 更新数据


1.3.6.1 UPDATE 语句语法


使用 UPDATE 语句更新数据

UPDATE table
SET column = value [, column = value , ...]
[WHERE condition]

(1)可以一次更新多条数据

(2)如果需要回滚数据,需要保证在DML之前,进行设置 SET AUTOCOMMIT = FALSE ;


1.3.6.2 更新数据


(1)使用WHERE子句指定需要更新的数据

UPDATE employees 
SET department_id = 70
WHERE employee_id = 113 ;

(2)如果省略WHERE子句,则表中的所有数据都将被更新

UPDATE copy_emp
SET department_id = 110 ;

1.3.6.3 更新数据的完整性错误


UPDATE employees
SET department_id = 55 
WHERE department_id = 110 ;

错误原因:不存在55号部门


1.3.7 删除数据


1.3.7.1 DELETE 语句


使用DELETE语句从表中删除数据

DELETE FROM table
[WHERE     condition];


1.3.7.2 删除数据


(1)使用WHERE子句删除指定的记录

DELETE FROM departments
WHERE department_name = 'Finance'

如果省略 WHERE 子句,则表中的全部数据将会被清除

DELETE FROM copy_emp;


1.3.7.3 删除中的数据完整性错误


DELETE FROM departments
WHERE department_id = 60 ;

存在primary key问题


1.4 数据处理之查询


SELECT *|{[DISTINCT]}  column | expression [alias], ...}
FROM table;

SELECT 表示选择哪些列

FROM 标识从哪个表中选择


1.4.1 选择全部列


SELECT * 
FROM departments;

此处的*即代表 "选择全部列"


1.4.2 选择特定的列


SELECT department_id , location_id
FROM departments;

department_id , location_id这两列都是指定的列,故上方代码查询的是指定这两列的内容


1.4.3 注意事项


(1)SQL语言大小写不敏感

(2)SQL可以写在一行或者多行

(3)关键字不能被缩写也不能被分行

(4)各子句一般要分行写

(5)使用缩进提高语句的可读性

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
关系型数据库 MySQL
【MySQL实战笔记】07 | 行锁功过:怎么减少行锁对性能的影响?-01
【4月更文挑战第18天】MySQL的InnoDB引擎支持行锁,而MyISAM只支持表锁。行锁在事务开始时添加,事务结束时释放,遵循两阶段锁协议。为减少锁冲突影响并发,应将可能导致最大冲突的锁操作放在事务最后。例如,在电影票交易中,应将更新影院账户余额的操作安排在事务末尾,以缩短锁住关键行的时间,提高系统并发性能。
19 4
|
18天前
|
关系型数据库 MySQL 数据库
【MySQL实战笔记】 06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?-01
【4月更文挑战第17天】MySQL的锁分为全局锁、表级锁和行锁。全局锁用于全库备份,可能导致业务暂停或主从延迟。不加锁备份会导致逻辑不一致。推荐使用`FTWRL`而非`readonly=true`因后者可能影响其他逻辑且异常处理不同。表级锁如`lock tables`限制读写并限定操作对象,常用于并发控制。元数据锁(MDL)在访问表时自动加锁,确保读写正确性。
70 31
|
18天前
|
存储 关系型数据库 MySQL
【MySQL实战笔记】 04 | 深入浅出索引(上)-01
【4月更文挑战第8天】这篇文章除了介绍索引的作用和提高查询效率的原理,还探讨了三种常见的数据结构:哈希表、有序数组和搜索树。哈希表适合等值查询,但不支持范围查询;有序数组利用二分查找实现快速等值查询,但更新成本高;二叉搜索树保持平衡时查询高效,但磁盘存储时效率低。文章指出,由于磁盘读取延迟,实际数据库索引设计需考虑减少磁盘访问次数。
37 5
|
18天前
|
SQL 安全 关系型数据库
【MySQL实战笔记】03.事务隔离:为什么你改了我还看不见?-01
【4月更文挑战第6天】MySQL事务的隔离性确保数据操作的完整性和一致性,ACID原则包括原子性、一致性、隔离性和持久性。事务隔离级别有四种:读未提交、读提交、可重复读和串行化,分别解决并发问题如脏读、不可重复读和幻读。不同隔离级别在效率和安全性间权衡,例如读未提交允许未提交变更可见,而串行化通过锁保证安全但可能降低效率。在不同隔离级别下,事务看到的数据状态会有所变化,例如在可重复读级别,事务始终看到初始数据,而在串行化级别,事务会等待其他事务完成再继续,避免数据冲突。
280 10
|
16天前
|
SQL 存储 关系型数据库
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记,阿里P7亲自教你
|
18天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】分库分表
分库分表是一种数据库架构设计的方法,用于解决大规模数据存储和处理的问题。 分库分表可以简单理解为原来一个表存储数据现在改为通过多个数据库及多个表去存储,这就相当于原来一台服务器提供服务现在改成多台服务器组成集群共同提供服务。
38 8
|
18天前
|
存储 SQL 关系型数据库
MySQL万字超详细笔记❗❗❗
MySQL万字超详细笔记❗❗❗
81 1
MySQL万字超详细笔记❗❗❗
|
18天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】MySQL总结
MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query Language ,结构化的查询语言,它是一种针对表关联关系所设计的一门语言,也就是说,学好 MySQL,SQL 是基础和重中之重。SQL 不只是 MySQL 中特有的一门语言,大多数关系型数据库都支持这门语言。
251 8
|
18天前
|
SQL 关系型数据库 MySQL
【MySQL系列笔记】常用SQL
常用SQL分为三种类型,分别为DDL,DML和DQL;这三种类型的SQL语句分别用于管理数据库结构、操作数据、以及查询数据,是数据库操作中最常用的语句类型。 在后面学习的多表联查中,SQL是分析业务后业务后能否实现的基础,以及后面如何书写动态SQL,以及完成级联查询的关键。
216 6
|
18天前
|
存储 关系型数据库 MySQL
【MySQL系列笔记】InnoDB引擎-数据存储结构
InnoDB 存储引擎是MySQL的默认存储引擎,是事务安全的MySQL存储引擎。该存储引擎是第一个完整ACID事务的MySQL存储引擎,其特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和 CPU。因此很有必要学习下InnoDB存储引擎,它的很多架构设计思路都可以应用到我们的应用系统设计中。
214 4