MySQL的一些基本操作

2023-10-31

现在有的时候线上数据不能直接操作IDE工具,SQL是避免不了的,而且即使是开发也会用到一些语句,将常用的聚集在一起。

一 字段

a 表结构修改
(1)增加字段
TABLE关键字不能少

ALTER TABLE xxx_order ADD `order_id` bigint(20) DEFAULT NULL COMMENT '订单ID'

(2)修改字段
这里要注意修改字段,也要把信息给全,不能说你只想改类型,结果只给一个类型

这里修改的关键字是MODIFY

alter table xxx_order MODIFY `order_id` bigint(20) NOT NULL NULL COMMENT '订单ID'

(3)删除字段

关键字是DROP COLUMN

ALTER TABLE  xxx_order DROP COLUMN `order_id` 

二 表数据

a 表数据修改
基本的修改就不做示例,
这里展示的是关联另一个表的数据,然后更新表中的数据

UPDATE ams_employee_login_log aell ,ams_employee ae SET aell.merchant_id = ae.merchant_id WHERE aell.employee_id = ae.id

再来一个带case when 和ifnull的

18:16
UPDATE ams_material_inventory_order_detail amiod,
ams_stock_order aso,
ams_material_inventory_order amio 
SET amiod.congeal_count =  IFNULL(aso.congeal_count,0),
amiod.commit_stock_count = (CASE WHEN amiod.commit_stock_count IS NULL THEN NULL ELSE amiod.commit_stock_count - IFNULL(aso.congeal_count,0) END),
amiod.except_stock_count = ( amiod.except_stock_count -  IFNULL(aso.congeal_count,0) ) 
WHERE
  amiod.material_id = aso.material_id 
  AND amiod.storage_id = aso.storage_id 
  AND amiod.merchant_id = aso.merchant_id 
  AND aso.data_status = 1 
  AND amiod.data_status = 1 
  AND amio.data_status = 1 
  AND amio.inventory_status IN (0,1) 
  AND aso.congeal_count IS NOT NULL 
  AND amiod.inventory_order_id = amio.id 
  AND amiod.inventory_order_id = 298

b 表数据删除
这里说的是物理删除,平时数据尽量不要删做物理删除,但有些数据无关紧要或者是脏数据可以直接物理删除,就是从数据库删掉。

这里删除整行数据 直接delete不需要像是select加个*

删除部分的话,可以是delete xxx from XXX table

DELETE FROM ams_user_login_log WHERE user_id IN (10000084502,10000084504,10000084508,10000084610) 

c 表数据的新增
INSERT INTO xxx_customer (merchant_id , data_status , customer_no , external_customer_no , customer_name , bind_state , create_time , create_user , update_time , update_user , company_id , sync_rent_type , mall_account )
VALUES ( 1002013 , 1 , ‘LXCC-1000-20190514-00298’ ,‘UQFV5X’ , ‘才华有限科技有限公司’ ,2, NOW(), -1, NOW(), -1 , NOW(), -1, NULL, NULL, ‘13828842494’ );

三 关于统计的部分

统计维度分组

关于函数的使用,sum,div这些统计类的函数要搭配好group by来使用有奇效,比如说我想统计各个订单类型的维度的订单价格总和:

这里涉及到一个是 订单类型 order_type 一个是amount 金额

如何统计

select
order_type,
order_type_name,
sum(amount),
from order
order by order_type

有的时候我们会涉及到多个统计维度,group by就是一个非常好的工具,配合sum div这些

统计分组后的总数

有时候我们要统计的分组的总数,假设多个维度分组出现的结果肯能很多,我们想统计这个分组的总数,这时候我们count就失效了,如下面的情况:

SELECT
	aosd.count,
	SUM(aosd.count) AS material_count,
	aosd.out_storage_amount,
	SUM(aosd.out_storage_amount) AS material_amount,
	aosd.total_amount,
	SUM(aosd.total_amount) AS total_material_amount,
	aosd.merchant_id,
	aos.company_id,
	ac.company_name,
	aos.department_id,
	ao.organization_name AS department_name,
	ae.employee_name,
	ae.employee_code,
	aos.employee_id,
	aosd.count,
	aosd.total_amount,
	amc.category_name AS category_name,
	ama.material_name,
	ama.unit,
	aos.out_storage_code,
	ast.storage_name,
	aos.out_storage_date,
	ama.brand,
	ama.model,
	amc.id
FROM
	ams_out_storage_detail aosd
LEFT JOIN ams_out_storage aos ON aosd.out_storage_id = aos.id
LEFT JOIN ams_company ac ON aos.company_id = ac.id
LEFT JOIN ams_organization ao ON aos.department_id = ao.id
LEFT JOIN ams_employee ae ON aos.employee_id = ae.id
LEFT JOIN ams_material_archives ama ON ama.id = aosd.material_archives_id
LEFT JOIN ams_material_category amc ON ama.category_id = amc.id
LEFT JOIN ams_storage ast ON aos.storage_id = ast.id
WHERE
	aosd.data_status = 1
AND aosd.merchant_id = 372
AND aos.out_storage_date >= '2021-3-11 0:00:00'
AND aos.out_storage_date <= '2022-3-11 0:00:00'
AND aos.out_storage_status IN (1, 5)
GROUP BY
	aos.employee_id,
	aos.employee_id,
	amc.category_name,
	ama.material_name,
	ama.unit,
	aos.out_storage_code,
	ast.storage_name,
	aos.out_storage_date
ORDER BY
	aos.employee_id,
	aos.employee_id,
	amc.category_name,
	ama.material_name,
	ama.unit,
	aos.out_storage_code,
	ast.storage_name,
	aos.out_storage_date

导出的结果如下:
在这里插入图片描述
我想统计他的条数怎么做
加一个select sum(1) from ( 查询 )别名的形式

select sum(1) from (

SELECT
	aosd.count,
	SUM(aosd.count) AS material_count,
	aosd.out_storage_amount,
	SUM(aosd.out_storage_amount) AS material_amount,
	aosd.total_amount,
	SUM(aosd.total_amount) AS total_material_amount,
	aosd.merchant_id,
	aos.company_id,
	ac.company_name,
	aos.department_id,
	ao.organization_name AS department_name,
	ae.employee_name,
	ae.employee_code,
	aos.employee_id,
	aosd.count AS detail_count,
	amc.category_name AS category_name,
	ama.material_name,
	ama.unit,
	aos.out_storage_code,
	ast.storage_name,
	aos.out_storage_date,
	ama.brand,
	ama.model,
	amc.id
FROM
	ams_out_storage_detail aosd
LEFT JOIN ams_out_storage aos ON aosd.out_storage_id = aos.id
LEFT JOIN ams_company ac ON aos.company_id = ac.id
LEFT JOIN ams_organization ao ON aos.department_id = ao.id
LEFT JOIN ams_employee ae ON aos.employee_id = ae.id
LEFT JOIN ams_material_archives ama ON ama.id = aosd.material_archives_id
LEFT JOIN ams_material_category amc ON ama.category_id = amc.id
LEFT JOIN ams_storage ast ON aos.storage_id = ast.id
WHERE
	aosd.data_status = 1
AND aosd.merchant_id = 372
AND aos.out_storage_date >= '2021-3-11 0:00:00'
AND aos.out_storage_date <= '2022-3-11 0:00:00'
AND aos.out_storage_status IN (1, 5)
GROUP BY
	aos.employee_id,
	aos.employee_id,
	amc.category_name,
	ama.material_name,
	ama.unit,
	aos.out_storage_code,
	ast.storage_name,
	aos.out_storage_date
ORDER BY
	aos.employee_id,
	aos.employee_id,
	amc.category_name,
	ama.material_name,
	ama.unit,
	aos.out_storage_code,
	ast.storage_name,
	aos.out_storage_date
) a

四 SQL优化

创建索引,一般可以已解决大多数慢SQL的问题,一种是建表的时候直接创建索引,另一种是对已存在表创建索引。

alter table table_name add index index_name(column)

五 MySQL的case when

有时候我们需要把一些字段筛选出来,做个条件处理比如说根据分数算等级,根据性别字段直接设置成汉字和英文。
但是目前很多晚上的内容看起来很别扭,我会举两个例子

第一个例子是我实地测过的一个

SELECT
	(
	CASE
			
			WHEN amiod.except_stock_count = 0 THEN
			'新增盘盈' 
			WHEN amiod.except_stock_count > amiod.commit_stock_count THEN
			'盘亏' 
			WHEN amiod.commit_stock_count > amiod.except_stock_count THEN
			'盘盈' ELSE '正常' 
		END 
		) AS status_text,
		amio.inventory_order_no,
		amiod.except_stock_count,
		amiod.commit_stock_count,
		aso.id,
		aso.stock_count,
		aso.congeal_count,
		amiod.material_id,
		amiod.storage_id,
		aso.id AS stock_id,
		amiod.merchant_id,
		amiod.inventory_order_id,
		amio.inventory_status,
		amio.data_status 
	FROM
		ams_material_inventory_order_detail amiod
		LEFT JOIN ams_material_inventory_order amio ON amiod.inventory_order_id = amio.id
		LEFT JOIN ams_stock_order aso ON amiod.material_id = aso.material_id 
		AND amiod.storage_id = aso.storage_id 
		AND amiod.merchant_id = aso.merchant_id 
		AND aso.data_status = 1 
	WHERE
		amiod.data_status = 1 
		AND amio.data_status = 1 
		AND amio.inventory_status = 1 
		AND amiod.commit_stock_count IS NOT NULL 
	AND amiod.except_stock_count != amiod.commit_stock_count 
	LIMIT 10000

这里因为字段太多,我搞了个简化版的,关于SQL case when语句区分性别(因为不像上面那个直接关联那么多,你自己建一个新的表都可以)

select (CASE WHEN sex='1' THEN '男' WHEN sex='0' THEN '女' ELSE '保密' END) as sex_text
from user where data_status = 1;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL的一些基本操作 的相关文章

  • 在一个后台为MYSQL的网站上集成搜索

    我有一个位置搜索website http www jammulinks com对于一个城市 我们首先收集该城市所有可能类别的数据 如学校 学院 百货商店等 并将其信息存储在单独的表中 因为每个条目除了名称 地址和电话号码外都有不同的详细信息
  • 猪的组连接等效吗?

    试图在 Pig 上完成这个任务 寻找 MySQL 的 group concat 等效项 例如 在我的表中 我有以下内容 3fields userid clickcount pagenumber 155 2 12 155 3 133 155
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • 如何在查询语句之外从mysql查询中获取值?

    这是下面的函数console log function quo value value connection query SELECT role from roles where id 1 function error results fi
  • mysql-connector-c++ - “get_driver_instance”不是“sql::mysql”的成员

    我是 C 的初学者 我认为学习的唯一方法就是接触一些代码 我正在尝试构建一个连接到 mysql 数据库的程序 我在 Linux 上使用 g 没有想法 我运行 make 这是我的错误 hello cpp 38 error get driver
  • 连接到 OpenShift (Redhat Paas) mysql 实例

    我正在尝试将我的 C 应用程序与 openshift 数据库连接 但我得到了这个例外conn Open Eccezione gt MySql Data MySqlClient MySqlException 0x80004005 Unable
  • MySQL 和 PHP 参数 1 作为资源

    好吧 当我运行下面提到的代码时 PHP 向我抛出此错误 在日志中 Error mysql num rows 期望参数 1 为资源 第 10 行 place 中给出的字符串 9 11号线 queryFP SELECT FROM db coun
  • MVCC 如何与 MySql 中的 Lock 配合使用?

    我知道Mysql中使用锁或者MVCC可以实现并发控制 比如可重复读 但我不知道MVCC如何避免幻读 在其他地方了解到一般是通过MVCC和Gap Lock来实现的 但是目前我理解的是MVCC不需要锁 即更新和删除都是使用undo log来实现
  • 将IP保存到数据库中

    当用户登录时 我想将他们的 IP 保存在数据库中 我该怎么做呢 MySQL 字段最适合使用哪种类型 获取IP的PHP代码是什么样的 我正在考虑将其用作登录 会话内容的额外安全功能 我正在考虑使用用户现在拥有的 IP 检查用户从数据库登录的
  • “修改列”与“更改列”

    我知道 我们不能使用重命名列MODIFY COLUMN语法 但我们可以使用CHANGE COLUMN syntax 我的问题是 主要用途是什么modify syntax 例如 ALATER TABLE tablename CHANGE co
  • MySQL:如何仅获取正值的平均值?

    假设我有 INT 列 并且我使用 1 来表示插入时没有可用数据 我想获得该列中所有 0 或更大值的平均值 这可能吗 Thanks 我忘了提及 我正在与其他 AVG 一起执行此操作 因此从选项卡中选择 avg a avg b avg d 所以
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 如何为 MySQL 中的字段或列添加别名?

    我正在尝试做这样的事情 但我收到未知的列错误 SELECT SUM field1 field2 AS col1 col1 field3 AS col3 from core 基本上 我只想使用别名 这样我就不需要执行之前执行的操作 这在mys
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • CakePHP 查找 - 按字符串到整数排序?

    我想使用 CakePHP 从数据库中提取照片数组 按照片标题排序 0 1 2 3 我的查询当前看起来像 ss photos this gt Asset gt find all array conditions gt array kind g
  • MySQL如何获取unix时间戳的时间差

    我有一个保存值1506947452的变量 需要使用公式从该日期提取分钟 started data now date 但started date采用unix时间戳格式10位int数字 我以ajax形式收到并需要放入mysql查询i试试这个 S
  • 奇怪的 MySQL Python mod_wsgi 无法连接到 'localhost' (49) 上的 MySQL 服务器问题

    StackOverflow上也有类似的问题 但我还没有发现完全相同的情况 这是在使用 MySQL 的 OS X Leopard 机器上 一些起始信息 MySQL Server version 5 1 30 Apache 2 2 13 Uni

随机推荐

  • Failed connect to 192.168.213.129:8080; No route to host

    在VMware虚拟机中运行tomcat 但是在主机访问虚拟机中的Tomcat的时候出现无法访问的情况 但是两者又能ping的通 在另一个虚拟机中用curl命令来运行的时候抛出如下异常 命令如下 curl XGET http 192 168
  • 为什么要坚持写博客?

    我是一个一直不喜欢做笔记的人 从小学开始一直到研究生 好记性不如烂笔头的话一直都深知其意 但是一直对它没能形成一个较为深刻的认识 感觉很耗时间 做笔记也总是找不到重点 好几次决定开始好好做笔记 记录自己的进步以及于自己有用的知识点 到头来
  • 大小堆以及TOP K问题

    完全二叉树 如上图所示 我们可以将完全二叉树的结点按照层序遍历的顺序储存在一个数组中 那么当完全二叉树中的某个结点位于array的i处时 其左子节点必位于2i 1处 i gt 0 其右结点必位于array的2i 2处 这样我们就可以轻易的实
  • 互联网摸鱼日报(2023-04-03)

    互联网摸鱼日报 2023 04 03 博客园新闻 华为为什么要守住 不造车 底线 蔚来李斌 蔚来手机将于三季度发布和交付 电商价格战 淘宝舞剑 意在何处 ChatGPT科研神器 论文翻译润色一键搞定 还能帮你读代码 一夜蹿红 又一款中国出海
  • loadrunner关于回放脚本时session失效的问题

    在使用loadrunner录制脚本后 进行回放时 会出现session已经失效的情况 为解决这个问题 就应该将请求中的userSession进行参数化 使其自动获得当前的userSession 具体脚本如下 在我们打开连接时 首先我们会向服
  • CreateEvent自动重置事件对象

    include
  • git查看和切换账号

    查看当前登录账号 git config user name 查看当前登录邮箱 git config user email 修改用户名和邮箱 git config global user name your name git config g
  • 论文理解之增加换脸效果 FaceShifter: Towards High Fidelity And Occlusion Aware Face Swapping

    论文 FaceShifter Towards High Fidelity And Occlusion Aware Face Swapping 论文地址 https arxiv org pdf 1912 13457 pdf 换脸是非常吸引人的
  • uniapp 自定义弹窗组件

    先上效果 组件源码 slot modal vue
  • npm配置文件

    npm配置文件是 npmrc 默认在用户目录下 如果没有找到 用命令来看 npm config get userconfig 查看配置文件路径 以下config命令也是很好用 npm config ls l 查看所有配置项 npm conf
  • I2C总线上的上拉电阻设置

    https wenku baidu com view 985db25e4a7302768e9939f8 fr ViewCollect i2c原理讲解 问 如题 除了地址不重复外 听说IC 数量只受到总线的最大电容 400pF 限制 那么电容
  • HTTP请求响应系列02_响应报文的详解

    响应报文 1 响应报文的详解 上篇文字讲的 请求报文 本篇主要解释响应报文包括的内容 响应报文的内容也包括三部分 分别是 响应行 响应头 响应体 这三部分放的都是信息 是S端发给B端的信息 道理是一样的 响应 就是请求后的结果 栗子 接上篇
  • Http 响应头 Transfer-Encoding : chunked 导致 浏览器客户端请求错误问题

    生产环境服务器规划如下 服务器 类型 网络环境 cal com nginx 外网 192 168 7 15 9200 tomcat 内网 192 168 7 16 9200 tomcat 内网 sdd com nginx 内网 192 16
  • 如何在当前目录下查看npm已安装了哪些库

    要查看在当前目录下 npm 已安装的库 可以在命令行中输入以下命令 npm list
  • html下拉菜单栏代码

  • 记一次Redhat7无法正常开机的解决过程

    事情的起源是使用VMWare虚拟平台克隆一个虚拟机的时候 克隆之前将网络配置全部删掉 然后将虚拟机关机 然后克隆出来一台之后 发现两台都无法正常的开机 症状是监视器会显示一个灰色的7背景 然后虽然没有死机但是也无法进入登录窗口 由于克隆之前
  • Failed to restart ssh.service: Unit not found. Centos7不能启动ssh服务

    升级ssh后重启服务 systemctl restart sshd service 遇到报错 Failed to restart ssh service Unit not found 解决方法 执行以下命令即可 进入 etc init d
  • PostgreSQL REPMGR 灾难恢复过程复盘

    大家肯能注意到 最近一直都是各种数据库的灾难恢复的复盘 本身作为一个TEAM 的LEADER 我想到的是在紧急情况下 我们应该有一个应对的措施 对每一个 TEAM 的 DBA 都应该在那个时候沉着冷静 并且知道那些是应该做的 那些是不该做的
  • 记录Mysql使用小技巧

    1 统计用逗号分隔字段中的元素 例如 有如下数据 需要把participants中每个元素出现的次数及对应的id统计出来 id participants 169 吉利 搜狗 1 170 吉利 搜狗 2 171 吉利 3 172 吉利 4 1
  • MySQL的一些基本操作

    现在有的时候线上数据不能直接操作IDE工具 SQL是避免不了的 而且即使是开发也会用到一些语句 将常用的聚集在一起 一 字段 a 表结构修改 1 增加字段 TABLE关键字不能少 ALTER TABLE xxx order ADD orde