当前位置: 首页 > news >正文

mysql与msql2数据驱动

mysql基本使用

数据库操作(DDL)

-- 数据考操作
-- 1.查询所有数据库
SHOW DATABASES;-- 2.选择数据库
USE learn_mysql;-- 3.当前正在使用的数据库
SELECT DATABASE();-- 4.创建数据库
CREATE DATABASE IF NOT EXISTS learn_mysql;-- 5.删除数据库
DROP DATABASE IF EXISTS test_database;-- 6.修改数据库
ALTER DATABASE test_database CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;

表结构操作(DDL)

-- 表操作
-- 1.查询所有表
SHOW TABLES;-- 2.查看表结构
DESC `user`;-- 3.创建表
CREATE TABLE IF NOT EXISTS `user` (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(10) UNIQUE NOT NULL,age INT DEFAULT 1
);-- 4.删除表
DROP TABLE IF EXISTS `user`;-- 5.修改表
-- 5.1修改表名
ALTER TABLE `t_user` RENAME TO `user`;
-- 5.2增加表字段
ALTER TABLE `user` ADD createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
-- ALTER TABLE `user` ADD updateTime TIMESTAMP;
-- 修改表格数据后,根据当前时间戳更新updateTime
ALTER TABLE `user` ADD updateTime TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
-- 5.3修改表字段名及类型
ALTER TABLE `user` CHANGE createTime createAt DATETIME;
-- 5.4只修改表字段类型
ALTER TABLE `user` MODIFY id BIGINT AUTO_INCREMENT;
-- 5.5删除字段
ALTER TABLE `user` DROP createAt;

表数据操作(DML)

-- 1.向表增加数据
INSERT INTO `user` ( `name`, `age`) VALUES ('cjc', 100);
INSERT INTO `user` ( `name`, `age`) VALUES ('ccc', 999);
INSERT INTO `user` ( `name`, `age`) VALUES ('aaa', 111);-- 2.删除数据
-- 删除所有数据
DELETE FROM `user`
DELETE FROM `user` WHERE `name` = 'aaa' -- 3.修改数据
UPDATE `user` SET `name` = 'CJC',`age` = 10000 WHERE `name` = 'cjc'
-- 修改数据时,手动加上时间的更新
UPDATE `user` SET `name` = 'CCC',`age` = 99999,`updateTime` = CURRENT_TIMESTAMP WHERE `name` = 'ccc'-- 修改了数据,根据当前时间戳更新updateTime
ALTER TABLE `user` ADD `updateTime` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

表数据查询(DQL)

-- 1.条件查询
SELECT * FROM `user`
-- %任意字符0个或多个 _任意字符1个
SELECT `name` AS `user_name` FROM `user` WHERE `name` LIKE 'C%' 
-- 第二个字符为c
SELECT * FROM `user` WHERE `name` LIKE '_c%' -- 2.分页查询
-- 偏移1条数据后,查询前20条数据
SELECT * FROM `user` LIMIT 20 OFFSET 1

查询语句执行顺序

SELECT tagname as "tag1",tagname2 as "tag2",[聚合函数]...FROM table1
[LEFT] JOIN table2
on xxx
[LEFT] JOIN table3
on xxx
WHERE 不含聚合函数的条件
GROUP BY tag1,tag2...等所有非聚合函数字段
HAVING 含聚合函数的条件ORDER BY tag1,tag2 DESC
LIMIT [偏移量],显示的记录数;  # LIMIT 显示的记录数 OFFSET 偏移量;/*筛选 分组 查看 排序FROM  -> ON -> [left/right] joinWHEREGROUP BY -> HAVINGSELECT -> distinctORDER BY  -> LIMIT 
*/

多表查询

在这里插入图片描述

多对多关系

-- 1.创建表
-- 学生表
CREATE TABLE IF NOT EXISTS `student` (id INT PRIMARY KEY AUTO_INCREMENT,`name` VARCHAR(10) UNIQUE NOT NULL
);-- 课程表
CREATE TABLE IF NOT EXISTS `course` (id INT PRIMARY KEY AUTO_INCREMENT,course_name VARCHAR(20) UNIQUE NOT NULL
);-- 关系表
-- 多对多,一个学生能选择多门课程,一门课程被多个学生选择
CREATE TABLE IF NOT EXISTS `student_course` (id INT PRIMARY KEY AUTO_INCREMENT,-- 也可以使用联合主键	-- 	student_course_pk PRIMARY KEY(userId,hobbyId),-- 外键约束,更新/删除时,相关联的表也同步更新/删除	student_id INT NOT NULL,course_id INT NOT NULL,FOREIGN KEY (student_id) REFERENCES student(id) ON UPDATE CASCADE ON DELETE CASCADE,FOREIGN KEY (course_id) REFERENCES course(id) ON UPDATE CASCADE ON DELETE CASCADE,-- 记录创建时间及更新时间	createTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updateTime TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
);-- 2.插入数据
INSERT INTO `student` ( `name`) VALUES ('a');
INSERT INTO `student` ( `name`) VALUES ('b');
INSERT INTO `student` ( `name`) VALUES ('c');
INSERT INTO `student` ( `name`) VALUES ('d');INSERT INTO `course` ( `course_name`) VALUES ('计算机网络');
INSERT INTO `course` ( `course_name`) VALUES ('数据结构');
INSERT INTO `course` ( `course_name`) VALUES ('操作系统');
INSERT INTO `course` ( `course_name`) VALUES ('计算机组成原理');
INSERT INTO `course` ( `course_name`) VALUES ('没人选的课程');INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (1,1);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (2,1);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (2,2);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (3,1);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (3,2);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (3,3);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,1);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,2);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,3);
INSERT INTO `student_course` ( `student_id`,`course_id`) VALUES (4,4);-- 3.多表查询
-- 所有学生的选课情况
SELECT student.`name`,course.course_name FROM `student`
LEFT JOIN `student_course` ON student.id = student_course.student_id
LEFT JOIN `course` ON course.id = student_course.course_idSELECT student.`name`,COUNT(*) '课程数量' FROM `student`
LEFT JOIN `student_course` ON student.id = student_course.student_id
LEFT JOIN `course` ON course.id = student_course.course_id
GROUP BY student.`name`

将查询结果转化为JSON

在这里插入图片描述
将查询到的课程信息转化为json格式:

-- 使用聚合函数
JSON_OBJECT([key, val[, key, val] ...])

在这里插入图片描述

将查询结果转化为数组

-- 使用聚合函数
JSON_ARRAYAGG(col_or_expr)

在这里插入图片描述

mysql2数据库驱动

基本使用

const mysql = require('mysql2')// 1.创建一个连接
const connect = mysql.createConnection({host: 'localhost',port: 13306,user: 'root',password: 'root',database: 'learn_mysql'
})// 2.定义sql语句
const statement = 'SELECT * FROM `student`'// 3.执行sql语句
connect.query(statement, (err, val, fields) => {if (err) {console.log(err);return}// 打印查询结果console.log(val);
})

预处理语句

1.提高性能
将语句模块发送给mysql编译、优化、转换,然后存储它但不执行。之后传入实参时,真正执行。多次执行,也只编译一次。

2.防止sql注入

const mysql = require('mysql2')// 1.创建连接池
const connectionPool = mysql.createPool({host: 'localhost',port: 13306,user: 'root',password: 'root',database: 'koa-apis',connectionLimit: 5
})// 2.测试是否连接成功
connectionPool.getConnection((err, connection) => {if (err) {console.log('数据库连接失败', err);return}connection.connect(err => {if (err) {console.log('和数据库交互成功', err);} else {console.log('和数据库交互成功');}})
})// 3.定义预处理语句
// const statement = 'SELECT * FROM `student` WHERE id > 2 AND name LIKE "%c%"'
const statement = 'SELECT * FROM `student` WHERE id > ? AND name LIKE ?'// 4.执行sql语句
// 使用promise语法
const connection = connectionPool.promise()
connection.execute(statement, [2, '%c%']).then(res => {const [val, fields] = resconsole.log(val);
}).catch(err => {console.log(err);
})

相关文章:

mysql与msql2数据驱动

mysql基本使用 数据库操作(DDL) -- 数据考操作 -- 1.查询所有数据库 SHOW DATABASES;-- 2.选择数据库 USE learn_mysql;-- 3.当前正在使用的数据库 SELECT DATABASE();-- 4.创建数据库 CREATE DATABASE IF NOT EXISTS learn_mysql;-- 5.删除数据库 DRO…...

解决微信小程序回调地狱问题

一、背景 小程序开发经常遇到根据网络请求结果,然后继续 处理下一步业务操作,代码如下: //1第一个请求 wx.request({url:"https://example.com/api/",data:data,success:function(res){//2第二个请求 wx.request({url:"http…...

cron介绍

cron表达式在线生成 在使用定时调度任务的时候,我们最常用的,就是cron表达式了。通过cron表达式来指定任务在某个时间点或者周期性的执行。 cron表达式的组成 cron表达式是一个字符串,由6到7个字段组成,用空格分隔。其中前6个字…...

mkp勒索病毒的介绍和防范,勒索病毒解密,数据恢复

mkp勒索病毒是一种新兴的电脑病毒,它会对感染的电脑进行加密,并要求用户支付一定的赎金才能解锁。这种病毒已经引起了全球范围内的关注,因为它不仅具有高危害性,而且还有很强的传播能力。本文将对mkp勒索病毒进行详细介绍&#xf…...

【面试精品】关于面试会遇到的Apache相关的面试题

1. Apache HTTP Server 基于什么协议提供网页浏览服务? 答:基于标准的http网络协议提供网页浏览服务。 2. 简述编译安装httpd软件包的基本过程? 答:解包,配置,编译,安装。 3. 编译安装httpd软…...

python对文件转md5,用于文件重复过滤

直接上代码 import hashlibdef calculate_md5(file_path):# 创建 MD5 哈希对象md5_hash hashlib.md5()# 打开文件并逐块读取,更新哈希值with open(file_path, rb) as file:while True:data file.read(8192) # 逐块读取文件,每块大小为 8192 字节if n…...

mac苹果电脑删除顽固残留软件图标

核心:删除“启动台”数据库里对应app的信息 1、打开访达(Finder),点击最顶部菜单栏的【前往》前往文件夹】,接着输入【/private/var/folders】 2、在弹出的访达(Finder)窗口搜索栏输入【com.ap…...

【jsvue】联合gtp仿写一个简单的vue框架,以此深度学习JavaScript

用 gtp 学习 Vue 生命周期的原理 lifecycle.js function Vue(options) {// 将选项保存到实例的 $options 属性中this.$options options;// 若存在 beforeCreate 钩子函数,则调用之if (typeof options.beforeCreate function) {options.beforeCreate.call(this);…...

linux centos7 系统之编程:求水仙花数

在Python编程中,有列表、元组和字典三类变量可以使用,方便数据的存储与处理,而bash中仅有字符串变量、数组、函数可用,方法运用上受到限制,这与bash基于C语言,注重语法结构的严谨有关。而Python等高级语言更…...

git中的cherry-pick和merge有些区别以及cherry-pick怎么用

git中的cherry-pick和merge在使用场景上有些区别: cherry-pick用于将另一个分支的某一次或几次commit应用到当前分支。它可以选择性地拉取代码修改。merge用于将两个分支合并成一个新分支。它会把整个分支上的所有修改都合并过来。 具体区别:cherry-pick通常用于将bug修复从发…...

【前端】CSS-Flex弹性盒模型布局

目录 一、前言二、Flex布局是什么1、任何一个容器都可以指定为Flex布局2、行内元素也可以使用Flex布局3、Webkit内核的浏览器,必须加上-webkit前缀 三、基本概念四、flex常用的两种属性1、容器属性2、项目属性 五、容器属性1、flex-direction①、定义②、语句1&…...

Android AAPT: error: resource color 异常原因处理

异常体现: Android resource linking failed ERROR:E:\software\Developer\APP\GaoDeTest2\app\src\main\res\values\themes.xml:3:5-9:13: AAPT: error: resource color/purple_500 (aka com.example.gaodetest2:color/purple_500) not found.ERROR:E:\software\De…...

C++std::function和std::bind()的概念

std::function: 一个通用的函数封装器,它允许你存储和调用任何可以被调用的东西,例如函数、函数指针、函数对象、Lambda 表达式等。 std::bind: 用于创建函数对象。一个可调用对象的绑定版本,可以提前绑定某些参数&am…...

QT Creator工具介绍及使用

一、QT的基本概念 QT主要用于图形化界面的开发, QT是基于C编写的一套界面相关的类库,如进程线程库,网络编程的库,数据库操作的库,文件操作的库等。 如何使用这个类库:类库实例化对象(构造函数) --> 学习…...

python爬虫13:pymysql库

python爬虫13:pymysql库 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生…...

权限管理 ACL、RBAC、ABAC的学习

ACL(Access Control List:访问控制列表) 最简单的一种方式,将权限直接与用户或用户组相关联,管理员直接给用户授予某些权限即可。 这种模型适用于小型和简单系统,权限一块较为简单,并且角色和权限的变化较少。 RBAC(R…...

python的re正则表达式

一、正在表达式的方法(): re是Python中用于处理正则表达式的内置库,提供了许多有用的方法。以下是其中几个常用的方法: re.match(pattern, string): 尝试从字符串的开头匹配一个模式,如果匹配成功则返回匹…...

【算法与数据结构】700、LeetCode二叉搜索树中的搜索

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;二叉搜索树的性质&#xff1a;左节点键值 < 中间节点键值 < 右节点键值。那么我们根据此性质&am…...

SpringBoot v2.7.x+ 整合Swagger3入坑记?

目录 一、依赖 二、集成Swagger Java Config 三、配置完毕 四、解决方案 彩蛋 想尝鲜&#xff0c;坑也多&#xff0c;一起入个坑~ 一、依赖 SpringBoot版本&#xff1a;2.7.14 Swagger版本&#xff1a;3.0.0 <dependency><groupId>com.github.xiaoymin<…...

说说你了解的 CDC

分析&回答 什么是 CDC CDC,Change Data Capture,变更数据获取的简称&#xff0c;使用CDC我们可以从数据库中获取已提交的更改并将这些更改发送到下游&#xff0c;供下游使用。这些变更可以包括INSERT,DELETE,UPDATE等。用户可以在以下的场景下使用CDC&#xff1a; 使用f…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式&#xff0c;避免服务器受到各种恶意攻击和网络威胁&#xff0c;那么&#xff0c;服务器硬防通常都会应用在哪些场景当中呢&#xff1f; 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...