MySQL之数据库相关操作学习笔记(一)
数据库相关操作
数据库表创建
定义逻辑库、数据表
- DML
- 添加
- 修改
- 删除
- 查询
- DCL
- 用户
- 权限
- 事务
- DDL
- 逻辑库
- 数据表
- 视图
- 索引
DCL (Data Control Language) 示例
DCL(数据控制语言)主要用于控制数据库用户的访问权限和管理事务。DCL 主要包含两类语句:用户和权限管理语句,以及事务管理语句。
1. 用户管理
创建用户
创建一个新的数据库用户:
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
删除用户
删除一个数据库用户:
DROP USER 'newuser'@'localhost';
修改用户密码
修改用户的密码:
ALTER USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword';
2. 权限管理
授予权限
授予用户对某个数据库的所有权限:
GRANT ALL PRIVILEGES ON mydatabase.* TO 'newuser'@'localhost';
授予用户对某个表的特定权限:
GRANT SELECT, INSERT, UPDATE ON mydatabase.mytable TO 'newuser'@'localhost';
撤销权限
撤销用户对某个数据库的所有权限:
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'newuser'@'localhost';
撤销用户对某个表的特定权限:
REVOKE SELECT, INSERT, UPDATE ON mydatabase.mytable FROM 'newuser'@'localhost';
刷新权限
刷新权限表,使权限变更生效:
FLUSH PRIVILEGES;
查看权限
查看用户的权限:
SHOW GRANTS FOR 'newuser'@'localhost';
3. 事务管理
事务管理用于确保数据库操作的原子性、一致性、隔离性和持久性(ACID)。
开始事务
开始一个事务:
START TRANSACTION;
提交事务
提交当前事务,使所有更改永久生效:
COMMIT;
回滚事务
回滚当前事务,撤销所有未提交的更改:
ROLLBACK;
设置保存点
设置一个事务的保存点,可以部分回滚到该保存点:
SAVEPOINT savepoint_name;
回滚到保存点
回滚到指定的保存点:
ROLLBACK TO SAVEPOINT savepoint_name;
释放保存点
释放指定的保存点,使其无法再回滚:
RELEASE SAVEPOINT savepoint_name;
示例操作
示例 1:创建用户并授予权限
-- 创建用户
CREATE USER 'alice'@'localhost' IDENTIFIED BY 'alice123';-- 授予对整个数据库的所有权限
GRANT ALL PRIVILEGES ON mydatabase.* TO 'alice'@'localhost';-- 刷新权限
FLUSH PRIVILEGES;-- 查看权限
SHOW GRANTS FOR 'alice'@'localhost';
示例 2:管理事务
-- 开始事务
START TRANSACTION;-- 插入数据
INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');-- 更新数据
UPDATE users SET email = 'bob@newdomain.com' WHERE username = 'bob';-- 设置保存点
SAVEPOINT before_delete;-- 删除数据
DELETE FROM users WHERE username = 'bob';-- 回滚到保存点
ROLLBACK TO SAVEPOINT before_delete;-- 提交事务
COMMIT;
这些示例展示了如何使用 DCL 语句来管理 MySQL 数据库中的用户、权限和事务。通过掌握这些操作,可以有效地控制数据库的访问权限和确保数据的一致性和完整性。
DDL (Data Definition Language) 示例
DDL(数据定义语言)用于创建、修改和删除数据库对象,包括逻辑库、数据表、视图和索引等。以下是针对逻辑库、数据表、视图和索引的常见 DDL 操作示例。
1. 逻辑库
创建逻辑库
CREATE DATABASE mydatabase;
删除逻辑库
DROP DATABASE mydatabase;
2. 数据表
创建数据表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
修改数据表
添加新的列:
ALTER TABLE users ADD COLUMN age INT;
修改列的数据类型:
ALTER TABLE users MODIFY COLUMN email VARCHAR(255);
删除列:
ALTER TABLE users DROP COLUMN age;
删除数据表
DROP TABLE users;
3. 视图
创建视图
CREATE VIEW user_emails AS
SELECT username, email FROM users;
删除视图
DROP VIEW user_emails;
4. 索引
创建索引
在单个列上创建索引:
CREATE INDEX idx_username ON users (username);
在多个列上创建复合索引:
CREATE INDEX idx_username_email ON users (username, email);
删除索引
DROP INDEX idx_username ON users;
示例操作
示例 1:创建逻辑库和数据表
-- 创建逻辑库
CREATE DATABASE mydatabase;-- 使用逻辑库
USE mydatabase;-- 创建数据表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
示例 2:创建视图和索引
-- 创建视图
CREATE VIEW user_emails AS
SELECT username, email FROM users;-- 创建索引
CREATE INDEX idx_username ON users (username);
通过这些示例,你可以学习如何使用 DDL 操作来管理数据库的逻辑库、数据表、视图和索引。掌握这些基本操作能够有效地设计和维护数据库结构,以满足应用程序的需求。
DML (Data Manipulation Language) 示例
DML(数据操纵语言)用于对数据库中的数据进行增、删、改、查操作。以下是关于添加、修改、删除和查询数据的 DML 操作示例。
1. 添加数据
单行添加数据
INSERT INTO users (username, email) VALUES ('john', 'john@example.com');
批量添加数据
INSERT INTO users (username, email)
VALUES ('alice', 'alice@example.com'),('bob', 'bob@example.com'),('charlie', 'charlie@example.com');
2. 修改数据
更新单行数据
UPDATE users SET email = 'new_email@example.com' WHERE username = 'john';
批量更新数据
UPDATE users SET email = 'new_email@example.com' WHERE id > 10;
3. 删除数据
删除单行数据
DELETE FROM users WHERE username = 'john';
删除多行数据
DELETE FROM users WHERE id > 10;
4. 查询数据
查询所有数据
SELECT * FROM users;
查询特定数据
SELECT * FROM users WHERE username = 'alice';
查询特定列
SELECT username, email FROM users;
查询排序结果
SELECT * FROM users ORDER BY created_at DESC;
查询分页结果
SELECT * FROM users LIMIT 10 OFFSET 20;
示例操作
示例 1:添加数据
-- 单行添加数据
INSERT INTO users (username, email) VALUES ('john', 'john@example.com');-- 批量添加数据
INSERT INTO users (username, email)
VALUES ('alice', 'alice@example.com'),('bob', 'bob@example.com'),('charlie', 'charlie@example.com');
示例 2:修改数据
-- 更新单行数据
UPDATE users SET email = 'new_email@example.com' WHERE username = 'john';-- 批量更新数据
UPDATE users SET email = 'new_email@example.com' WHERE id > 10;
示例 3:删除数据
-- 删除单行数据
DELETE FROM users WHERE username = 'john';-- 删除多行数据
DELETE FROM users WHERE id > 10;
示例 4:查询数据
-- 查询所有数据
SELECT * FROM users;-- 查询特定数据
SELECT * FROM users WHERE username = 'alice';-- 查询特定列
SELECT username, email FROM users;-- 查询排序结果
SELECT * FROM users ORDER BY created_at DESC;-- 查询分页结果
SELECT * FROM users LIMIT 10 OFFSET 20;
通过这些示例,你可以学习如何使用 DML 操作对数据库中的数据进行添加、修改、删除和查询操作。这些基本操作是数据库应用开发中的常见需求,掌握它们能够有效地管理和操作数据库中的数据。
相关文章:
MySQL之数据库相关操作学习笔记(一)
数据库相关操作 数据库表创建 定义逻辑库、数据表 DML 添加修改删除查询 DCL 用户权限事务 DDL 逻辑库数据表视图索引 DCL (Data Control Language) 示例 DCL(数据控制语言)主要用于控制数据库用户的访问权限和管理事务。DCL 主要包含两类语句&…...
【Node】node的Events模块(事件模块)的介绍和使用
文章目录 简言EventsPassing arguments and this to listeners 向监听器传递参数Asynchronous vs. synchronous 异步和同步Handling events only once 只一次处理事件Error events 错误事件Capture rejections of promises 捕捉拒绝承诺的情况Class: EventEmitter 事件类Event:…...
C#中字节数组(byte[])末尾继续添加字节的示例
方法一:使用List 使用List可以很容易地在末尾添加字节,然后如果需要,可以将其转换回byte[]。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…...
Socket编程学习笔记之TCP与UDP
Socket: Socket是什么呢? 是一套用于不同主机间通讯的API,是应用层与TCP/IP协议族通信的中间软件抽象层。 是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面&#…...
JavaScript第九讲BOM编程的练习题
前言 上一节有BOM的讲解,有需要的码客们可以去看一下 以下是一个结合了上述BOM(Browser Object Model)相关内容的练习题及其源代码示例: 练习题: 编写一个JavaScript脚本,该脚本应该执行以下操作&#…...
JavaScript 中创建函数的多种方式
在 JavaScript 中,可以通过多种方式创建函数。每种方式都有其特定的用途、优点和缺点,以及适用的使用场景。以下是几种常见的创建函数的方式及其详细说明。 1. 函数声明(Function Declaration) 示例 function add(a, b) {retur…...
对称二叉树[简单]
优质博文:IT-BLOG-CN 一、题目 给你一个二叉树的根节点root, 检查它是否轴对称。 示例 1: 输入:root [1,2,2,3,4,4,3] 输出:true 示例 2: 输入:root [1,2,2,null,3,null,3] 输出…...
判断GIF类型并使用ImageDecoder解析GIF图
一、判断是否为GIF图片类型 在JavaScript中,判断用户上传的文件是否为GIF文件类型时,通常可以通过检查文件的type属性或文件的拓展名来判断,但是由于文件拓展名可以轻易被用户修改,type属性是由浏览器根据文件拓展名猜测得出的&a…...
数组对象数据修改后页面没有更新,无法进行编辑,校验失效问题
在 Vue 中,当你通过 Object.assign 或其他方式修改了对象中的某个属性时,Vue 并不会触发组件重新渲染,因此表单中的 input 框无法及时更新。这可能导致在修改表单数据后,页面没有更新,而且表单校验也失效的情况。这是因…...
什么是低代码?有什么特点?
低代码是一种高效的软件开发方法,它允许开发者通过图形化界面和预构建的代码块,以最小化传统手写代码的方式快速构建应用程序。这种方法旨在加速应用程序的开发周期,同时降低技术门槛和成本。以下是根据驰骋低代码设计者的观念与主张…...
Kafka 消息保留时长由 24 小时变更为 72 小时的影响分析
目录 Kafka 消息保留时长由 24 小时变更为 72 小时的影响分析Kafka 消息存储机制保留时长对生产速度的影响保留时长对消费速度的影响底层分析与优化建议附加:将 Kafka 消息保留时长从 24 小时更改为 72 小时后,CPU 使用率从 40% 上升到 70% 的现象1. 增加…...
MySQL A表的字段值更新为B表的字段值
MySQL A表的字段值更新为B表的字段值 准备数据表 create table person (id int unsigned auto_increment comment 主键 primary key,uuid varchar(32) not null comment 系统唯一标识符32个长度的字符串,mobile varchar(11) null comment 中国国内手机号,nickn…...
TCP 建链(三次握手)和断链(四次握手)
TCP 建链(三次握手)和断链(四次挥手) 背景简介建链(三次握手)断链(四次挥手)序号及标志位延伸问题为什么建立连接需要握手三次,两次行不行?三次握手可以携带数…...
SpringBoot集成JOOQ加Mybatis-plus使用@Slf4j日志
遇到个问题记录下,就是SpringBoot使用Mybatis和Mybatis-plus时可以正常打印日志,但是JOOQ的操作日志确打印不出来? 下面的解决方法就是将JOOQ的日志单独配置出来,直接给你们配置吧! 在项目的resources目录下创建日志…...
浅谈JavaScript中的对象赋值
目录 常见的对象赋值方式 直接赋值和对象扩展(浅拷贝)两种赋值方式区别 区别 联系 常见的对象赋值方式 1. 直接赋值:this.info this.deviceInfo,将一个对象的引用赋给另一个变量,它们引用同一个对象。 2. 对象扩…...
Java面试题-集合
Java面试题-集合 1、什么是集合?2、集合和数组的区别是什么?3、集合有哪些特点?4、常用的集合类有哪些?5、List, Set, Map三者的区别?6、说说集合框架底层数据结构?7、线程安全的集合…...
从当当网批量获取图书信息
爬取当当网图书数据并保存到本地,使用request、lxml的etree模块、pandas保存数据为excel到本地。 爬取网页的url为: http://search.dangdang.com/?key{}&actinput&page_index{} 其中key为搜索关键字,page_index为页码。 爬取的数据…...
python爬虫之JS逆向——网页数据解析
目录 一、正则 1 正则基础 元字符 基本使用 通配符: . 字符集: [] 重复 位置 管道符和括号 转义符 转义功能 转义元字符 2 正则进阶 元字符组合(常用) 模式修正符 re模块的方法 有名分组 compile编译 二、bs4 1 四种对象 2 导航文档树 嵌套选择 子节点、…...
VL53L4CX TOF开发(2)----修改测距范围及测量频率
VL53L4CX TOF开发.2--修改测距范围及测量频率 概述视频教学样品申请完整代码下载测距范围测量频率硬件准备技术规格系统框图应用示意图生成STM32CUBEMX选择MCU串口配置IIC配置 XSHUTGPIO1X-CUBE-TOF1app_tof.c详细解释测量频率修改修改测距范围 概述 最近在弄ST和瑞萨RA的课程…...
C++之noexcept
目录 1.概述 2.noexcept作为说明符 3.noexcept作为运算符 4.传统throw与noexcept比较 5.原理剖析 6.总结 1.概述 在C中,noexcept是一个关键字,用于指定函数不会抛出异常。如果函数保证不会抛出异常,编译器可以进行更多优化,…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
tauri项目,如何在rust端读取电脑环境变量
如果想在前端通过调用来获取环境变量的值,可以通过标准的依赖: std::env::var(name).ok() 想在前端通过调用来获取,可以写一个command函数: #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
