前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

MySQL

作者头像
爱学习的小超人
发布2022-11-22 17:29:14
7150
发布2022-11-22 17:29:14
举报
文章被收录于专栏:SuperXCRMySQLSuperXCRMySQL

1. MySQL

1. 数据库模型
  • 层次模型
  • 网络模型
  • 关系型数据库

目前主要使用关系型数据库

2. 关系型数据库

关系型数据库模型就是把复杂的数据结构归结于简单的二元关系(即二维表格形式)。在关系数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联表的表格分类,合并,连接或选取等运算来实现数据的管理。

SQL

SQL就是结构化查询语言

用于从数据库中有结构的查询

NoSQL(非关系型数据库)

NoSQL,泛指非关系型数据库

MySQL相关命令

代码语言:javascript
复制
---登录
mysql -uroot -p
---查看表
show databases;
---创建数据库
CREATE DATABASE <数据库名称>;
---退出数据库
quit

2. CRUD

1. 表的结构
1.1 表名

一般使用英文小写字母来约定表,多个单词之间使用_分隔

1.2 主键
  • 主键是一个特殊字段
  • 表格可以没有主键,但最多只能拥有一个主键
  • 主键的值不能为NULL ,必须有对应的值
  • 主键的值必须绝对唯一的,即不能出现两个相同的主键值,如名字就不可以作为主键,因为会有重名
  • 一般使用主键和其他表进行关联
1.3 SQL常用数据类型

类型

含义

VARCHAR

可变的长字符串,可以类比于Java中的String类型

INT

整形,和Java中的int类型一致

DOUBLE

浮点型,和Java中的double类型一致,一般不加长度限制

DATETIME

时间类型,长度为0,格式为YYYY-MM-DD HH:MM:SS,值为2022-12-12 12:12:12

BIGINT

长整型,和Java中的long类型一致

1.4 CRUD

英文

中文

SQL

HTTP

CREATE

创建

INSERT(插入)

POST

READ

读取

SELECT(查询)

GET

UPDATE

更新

UPDATE

POST

DELETE

删除

DELETE

DELETE

2. 创建表格
2.1 创建表格格式
代码语言:javascript
复制
create table table_name (    --- 创建表
    `id` INT(10) NOT NULL.   --- 表单头部格式
    `gmt_created` datetime,
    PRIMARY KEY (`id`)       --- 设置主键
)ENGINE=InnoDB DEFAULT CHARSET=utf8 --- 设置存储引擎和编码方式
2.2 删除表格
代码语言:javascript
复制
drop table table_name;
//或者
drop table if exists table_name;
3. 插入语句(INSERT)

语法

代码语言:javascript
复制
INSERT TNTO table_name(field1, field2,...,fieldN)
VALUES
(value1,value2,...,valueN);


INSERT INTO
  `user` (`id`, `mobile`, `nickname`,`gmt_created`)
VALUES
   (1,'13426069530','XXX',now());
// 插入语句简化
INSERT INTO table_name
VALUES
(value1,value2,...valueN);
// 批量插入数据
INSERT INTO table_name
VALUES
(value1,value2,...valueN),
(value1,value2,...valueN);
4. 查询(SELECT)

语法

代码语言:javascript
复制
SELECT field1,field2... FROM table_name; --- 查询指定列的信息
// 
SELECT
	id,
	hero_name
FROM
	timi_adc

// 查询所有字段
SELECT * FROM timi_adc;
WHERE子句

语法

代码语言:javascript
复制
SELECT * FROM table_name WHERE condition;

// 举例
SELECT 
   *
FROM
	table_name
where
	win_rate > 0.5;
5 Limit子句

语法

代码语言:javascript
复制
SELECT * FROM table_name LIMIT parameter

查询x-y行

代码语言:javascript
复制
SELECT
	*
FROM
	timi_adc
LIMIT
	5,6;
	
-- 表示从第6行开始查,查6条记录

0-x行z

代码语言:javascript
复制
SELECT * FROM timi_adc LIMIT 5;

查询第x行

代码语言:javascript
复制
SELECT * FROM timi_adc LIMIT 4,1;

和WHERE子句联合使用

代码语言:javascript
复制
SELECT 
	* 
FROM 
	timi_adc
WHERE
	appearance_rate > 0.1
LIMIT
	5;
6 排序(ORFER BY子句)

语法

代码语言:javascript
复制
SELECT * FROM table_name ORDER BY field_name;
代码语言:javascript
复制
SELECT 
	* 
FROM
	timi_adc
ORDER BY	
	win_rate;
	
-- 排序默认按照升序排序,对于int double 从小到大,对于varchar 从字母A-Z,对于datetime,从过去到现在

DESC关键字

代码语言:javascript
复制
SELECT
	*
FROM
	timi_adc
ORDER BY
	win_rate DESC
-- DESC使排序变为逆序

和其他子句连用

代码语言:javascript
复制
Select
	*
from
	timi_adc
ORDER BY
	win_rate DESC
LIMIT
	3;
7 更新/删除

更新

语法

代码语言:javascript
复制
UPDATE 表名称 SET 列名称 = WHERE 列名称 = 某值

UPDATE语句必须加入WHERE限制条件,否则的话UPDATE 语句就会对整列起作用。

删除语句(DELECT)

语法

代码语言:javascript
复制
DELETE FROM table_name [WHERE Clause]

删除user表中id为4的行:

代码语言:javascript
复制
delete from user where id=4;

删除user表中所有id小于20的数据:

代码语言:javascript
复制
delete from `user` where id < 20;

删除user表中的所有数据:

代码语言:javascript
复制
delete from user;

3 查询优化

1 LIKE查询

语法

代码语言:javascript
复制
SELECT * FROM table_name where condition LIKE condition;

%

SQL LIKE 子句中,% 字符来表示任意字符,如果没有使用任何字符LIKE 就相当于=

_

如果记不清全名,可以使用_来表示

2 AND%OR

语法

代码语言:javascript
复制
SELECT * FROM tble_name WHERE condition AND/OR condtionB;

有时需要加上()来分割条件

要注意分清逻辑条件

3 IN/NOT IN

语法

代码语言:javascript
复制
SELECT * FROM table_name WHERE colum IN (condtionA, condtionB);

NOT IN / NOT LIKE

代码语言:javascript
复制
SELECT * FROM timi_adc WHERE NOT IN(condtion);
4 NIULL 值的处理

NULL 不是空值,空值不占空间,NULL占用存储空间

如何处理空值

  1. IS NULL: 当列的空值是NULL时,这个·运算符返回true
  2. IS NOT NULL: 当列的值不为NULL,这个运算符返回true
  3. <=>: 比较操作符 =,当比较的两个值都是为NULL时或者相等时,返回为true

4 MySQL处理字符串

1. CONCAT 函数

语法

代码语言:javascript
复制
select colume_name1,COMCAT(column_name2,str,column_name3),column_name4 FROM table_name;
  • CONCAT函数可以拼接列名,也可以拼接字符串
  • 在使用CONCAT函数的时候可以同时查询其他的列
  • CONCAT函数的参数之间用英文,分隔

如果拼接的值有NULL,则结果一律为NULL,NULL本身特性决定

配合WHERE语句查询

代码语言:javascript
复制
SELECT
	id,
	CONCAT(hero_name,'的胜率是',win_rate)
FROM
	timi_adc
WHERE
	id = 3;

别名

查询结果列名叫result

代码语言:javascript
复制
SELECT
	id,
	CONCAT(hero_name,'的胜率是',win_rate) as result --- 例如
2. TRIM 函数

为了保证数据格式的正确性,我们会使用TRIM函数来清理数据

语法

代码语言:javascript
复制
TRIM(str)

示例(⊙﹏⊙)

代码语言:javascript
复制
SELECT
	TRIM(hero_name),
	TRIM(fever)
FROM
	timi_adc
WHERE
	id = 20;

语法拓展

trim()函数也可以精准去掉前面或者后面的空格,或者其他的字符

代码语言:javascript
复制
TRIM( BOTH|LEADING|TRALING remove_str FROM str);
  • TRIM加上LEADING来去除前面的空格
  • TRAILING来只去除后面的空格
  • 如果都不加,默认删除空格

例子(⊙﹏⊙)

代码语言:javascript
复制
SELECT 
	TRIM(
        LEADING ' '
        FROM
        	hero_name
    )
FROM
	timi_adc
WHERE
	id = 21;

REPLACE()函数

TRIM()函数不能去除字符串中间的值,使用REPLACE()函数可以

代码语言:javascript
复制
UPDATE table_name
SET colunm_name = 
REPLACE(colunm_name,string_find,string_to_replace)
WHERE conditions;

5 MySQL关联查询

1 左连接

语法

代码语言:javascript
复制
SELECT
	*
FROM
	TableA LEFT JOIN
	TanleB
	ON condition;
  • JOIN 是查询关键词,基础结构是TableA JOIN TableB ,即表A关联表B查询,LEFT表示左连接
  • ON 是关联查询的条件
  • 左连接就是返回左表的所有数据,即使右表没有匹配的数据(右表会以NULL的形式匹配数据)

举例(⊙﹏⊙)

代码语言:javascript
复制
SELECT
	*
FROM
	teacher
	LEFT JOIN course ON teacher.id = course.teacher.id;
  • teacher 是A表,course是B表
  • teacher.id 是指这张表的id字段,course.teacher.id是指teacher_id这个字段

表结构设计规范

  1. 表必须有主键
  2. 一个字段只表示一个含义
  3. 总是包含两个日期:gmt_created(创建日期),gmt_modified(修改日期),且这两个字段不应该包含额外的业务逻辑
  4. MySQL中,gmt_created,gmt_modified 使用DATATIME类型
  5. 禁止使用复杂数据类型(数组,自定义类型等)
  6. 禁止使用物理外键,使用逻辑外键
  7. 禁止物理删除,使用逻辑删除 is_deleted
  • 逻辑删除 又称软删除,假删除,是一种数据库操作,使用标记将数据不可用,而不从数据库删除数据本身
2 右连接

语法

代码语言:javascript
复制
SELECT
	*
FROM
	TableA RIGHT JOIN
	TableB
	ON condition

多表关联

语法

代码语言:javascript
复制
SELECT
	*
FROM
	TableA
	LEFT JOIN TableB ON conditionA
	LEFT JOIN TableC ON conditionB;
3 内连接

INNER连接

例如两个表TableA,TableB

查找A,B同时符合某一条件的数据

代码语言:javascript
复制
SELECT
	*
FROM
	TableA
	INNER JOIN TableB
ON
	TableA.id = TableB.student_id;
		

外连接的拓展

指除了A,B重合部分外,如A部分或者B部分

代码语言:javascript
复制
SELECT
	*
FROM
	TableA
	LEFT JOIN TableB ON TableA.id = TableB.student_id
WHERE
	TableB.student_id IS NULL;

UNION关键字

代码语言:javascript
复制
SELECT
	*
FROM
	TableA
	LEFT JOIN TableB
ON
	TableA.id = TableB.student_id
UNION DISTINCT
SELECT
	*
FROM
	TableA
	RIGHT JOIN TableB 0N TableA.id = TableB.student_id;

相当于AB左右连接

UNION 关键字可以将两个查询语句的结果合并,并去除重复数据

笛卡尔积

代码语言:javascript
复制
cross join

6. 补充

1. 查询结果去重
代码语言:javascript
复制
select distinct ... from table_name
2. 总和
代码语言:javascript
复制
cout(列明);
3. 计算平均值
代码语言:javascript
复制
avg(列名)  --- 计算该列的平均值
round(avg(列名), 1) --- round指定保留小数位数
4.UNION 和 UNION ALL
代码语言:javascript
复制
--- 我们需要将两个select语句的结果作为一个整体输出
--- UNION 会对两个结果取并集(也就是自动去除重复的结果)
--- UNION ALL 是将所有结果输出
5.字符串截取

substring_index(str,delim,count)

  • str:要处理的字符串
  • delim:分隔符
  • count:计数(如果为负数就表示从后面开始)

例如:str = www.liqur.xyz

​ substring_index(str,’.’,1) 结果就是www

6. 窗口函数

语法

代码语言:javascript
复制
<窗口函数> over (partition by <用于分组的列名>
            order by <用于排序的列明>)

<窗口函数>的位置,可以放以下两种函数:

  1. 专用窗口函数,比如rank,dense_rank,row_number等
  2. 聚集函数,如sum,avg,count,max,min等

功能

  1. 同时具有分组和排序的功能
  2. 不减少原表的行数

注意

原则只能写在select子句中

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. MySQL
    • 1. 数据库模型
      • 2. 关系型数据库
        • SQL
          • NoSQL(非关系型数据库)
          • 2. CRUD
            • 1. 表的结构
              • 1.1 表名
              • 1.2 主键
              • 1.3 SQL常用数据类型
              • 1.4 CRUD
            • 2. 创建表格
              • 2.1 创建表格格式
              • 2.2 删除表格
            • 3. 插入语句(INSERT)
              • 4. 查询(SELECT)
                • WHERE子句
              • 5 Limit子句
                • 6 排序(ORFER BY子句)
                  • 7 更新/删除
                  • 3 查询优化
                    • 1 LIKE查询
                      • 2 AND%OR
                        • 3 IN/NOT IN
                          • 4 NIULL 值的处理
                          • 4 MySQL处理字符串
                            • 1. CONCAT 函数
                              • 2. TRIM 函数
                              • 5 MySQL关联查询
                                • 1 左连接
                                  • 2 右连接
                                    • 3 内连接
                                      • 1. 查询结果去重
                                  • 6. 补充
                                  相关产品与服务
                                  云数据库 SQL Server
                                  腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档