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

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录

  • DDL数据定义语言
    • 1、创建数据库
    • 2、创建表
    • 3、修改表结构
    • 4、删除
    • 5、数据类型
  • 列的约束
    • 主键约束(`primary key`)
    • 唯一约束(`unique key`)
    • 非空约束
    • 检查约束(`check`)
    • 外键约束(`foreign key`)
  • DCL数据控制语言
    • 1、先创建一个新用户
    • 2、查看用户权限
    • 3、给用户赋予权限
    • 4、回收用户权限
    • 5、MySQL权限分类
      • 数据库/数据表/数据列权限:
      • 全局管理MySQL用户权限:
      • 特别的权限:
    • 6、修改用户密码
    • 7、删除用户
  • TPL事务处理语言
    • 事务理解
    • 事务的四大特性(ACID)
    • 事务操作
    • 事务的隔离级别
    • 隔离级别
  • 常用SQL

MySQL基础知识:DDL、DML、DQL、DCL及TPL的使用
SQL分类
在这里插入图片描述

DDL数据定义语言

针对数据库对象进行操作,如数据库、表、视图等对象

1、创建数据库

create database 数据库名 [default charset utf8] ;

数据库名要求:不区分大小写,英文,见名知义

数据库默认字符集:latin1

2、创建表

create table 表名(列名 数据类型(长度),......列名 数据类型(长度)
) [character set utf8 collate utf8_general_ci] ;

3、修改表结构

修改表名

alter table 原表名 rename [to] 新表名;

修改表中的列(列名、列类型、列长度)

alter table 表名 change 原列名 新列名 新类型(新长度);

新增一个列

alter table 表名 add 新列名 新类型(新长度);

删除一个列

alter table 表名 drop 原列名;

4、删除

删除table

drop table 表名;

删除数据库

drop database 数据库名;

5、数据类型

在这里插入图片描述

列的约束

表格中列的约束全部都是在创建表格之后做的表格列结构的修改。

需要用到DDL语句进行操作(alterdrop

主键约束(primary key

  1. 每一个表格内只能有一个列被设置为主键约束
  2. 主键约束通常是用来标记表格中数据的唯一存在
  3. 主键约束要求当前的列 不能为null
  4. 主键约束要求当前的列 值是唯一存在的 不能重复

添加主键约束:

语法:alter table 表名 add constraint 约束名字 约束类型 (列);

例:alter table myclass add constraint pk_myclass primary key (classid);

简写:alter table 表名 add primary key (列);

主键自增:

语法1:alter table 表名 modify 列名 字段类型 auto_increment;

例:alter table myclass modify classid int(4) auto_increment;

语法2:alter table 表名 change 列名 字段类型 auto_increment;

例:alter table myclass change classid int(4) auto_increment;

没有做起始值的说明,主键列的值会从1开始。

设置自增起始值:alter table 表名 auto_increment = 起始值;

删除主键约束:alter table 表名 drop primary key;

注意:删除主键约束以后,不重复的特性取消了,但非空特性还在。

需要手动取消非空:alter table 表名 modify 字段名 字段类型 null;

唯一约束(unique key

  1. 可以为表格中的某一个列添加唯一约束,唯一约束在表格中可以存在多个列
  2. 唯一约束表示的是列的值不能重复,但可以为空

添加唯一约束:

语法:alter table 表名 add constraint 约束名 约束类型 (列);

例:alter table myclass add constraint uk_myclass unique [key] (loc);

简写:alter table 表名 add unique key(字段); 约束名为默认的列名

删除唯一约束:alter table 表名 drop index 约束名;

非空约束

  1. 在表格中的某一个列上添加非空约束
  2. 当前列的值不能为null

添加非空约束:
语法1:alter table 表名 modify 原列名 原类型 原长度 [not] null default xxx;

语法2:alter table 表名 change 原列名 原列名 原类型 原长度 [not] null default xxx;

删除非空约束:

alter table 表名字 modify 列 类型 长度 null;

alter table 表名字 change 列 列 类型 长度 null;

检查约束(check

列在存值的时候做一个细致的检查

例如:范围是否合理

alter table student add constraint ck_sage check( sage>15 and sage<30);

外键约束(foreign key

  1. 约束自己表格内的信息不能随意填写
  2. 受到另外一个表格某一个列的影响,当前列的值要去另外一张表格内寻找(另外一张表格的列是唯一的【主键、唯一】)
  3. 表格中可以有多个列被设置为外键约束
  4. 当前列的值可以为空,可以重复

添加外键约束:
alter table 表名字 add constraint fk_当前表_关联表 foreign key(列) references 另一个表(列);

简写:
alter table student add foreign key(列) references 另一个表(列);

注意: 如果是简写的形式添加外键,外键的名字不是默认列名

查看外键约束:

通过show keys from 表; desc 表;show create table 表名;

PRI UNI MUL---->multiple(多样 并联)

删除外键约束
alter table 表名字 drop foreign key 约束名字;

注意:通过上述语句其实已经将外键约束删掉了

但会自动在当前表格内添加一个新的key

需要再次手动将这个生成的key删掉,外键约束才真的删除干净

alter table 表名字 drop key 约束名字;

DCL数据控制语言

数据控制语言Data Control Language:控制用户的权限

1、先创建一个新用户

语法:create user '用户名'@'IP' identified by '密码';
在这里插入图片描述

2、查看用户权限

语法:show grants for '用户名'@'IP';
在这里插入图片描述
用户被创建成功 (只有一个默认的权限 Usage 只允许登录 不允许做其他事情)

3、给用户赋予权限

语法:grant 权限 on 数据库名.表名 to '用户'@'IP';

赋予权限之后最好做一个刷新flush privileges;
在这里插入图片描述

在这里插入图片描述

4、回收用户权限

语法:revoke 权限 on 数据库名.表名 from '用户名'@'IP';
在这里插入图片描述

在这里插入图片描述
上述回收了用户删除数据表或数据库的权限。

5、MySQL权限分类

数据库/数据表/数据列权限:

Create: 建立新的数据库或数据表

Alter : 修改已存在的数据表(例如增加/删除列)

Drop : 删除数据表或数据库

Insert: 增加表的记录

Delete: 删除表的记录

Update: 修改表中已存在的记录

Select: 显示/搜索表的记录

References: 允许创建外键

Index : 建立或删除索引

Create View: 允许创建视图

Create Routine: 允许创建存储过程和包

Execute: 允许执行存储过程和包

Trigger: 允许操作触发器

Create User: 允许更改、创建、删除、重命名用户和收回所有权限

全局管理MySQL用户权限:

Grant Option: 允许向其他用户授予或移除权限

Show View: 允许执行SHOW CREATE VIEW语句

Show Databases: 允许账户执行SHOW DATABASE语句来查看数据库

Lock Table: 允许执行LOCK TABLES语句来锁定表

File: 在MySQL服务器上读写文件

Process: 显示或杀死属于其它用户的服务线程

Reload: 重载访问控制表,刷新日志等

ShutDown: 关闭MySQL服务

特别的权限:

All: 允许做任何事(和root一样)

Usage: 只允许登录,其它什么也不允许做

6、修改用户密码

  1. 查看用户密码
    select u.User, u.Host,u.authentication_string from mysql.user u where u.User = 'Lizi';

MySQL10.jpg

  1. 修改用户密码

    update mysql.user set authentication_string = password('新密码') where user = '用户名';

    刷新:flush privileges;

在这里插入图片描述
在这里插入图片描述

7、删除用户

语法:drop user '用户名'@'IP';
在这里插入图片描述

在这里插入图片描述

TPL事务处理语言

事务理解

SQL语句是我们给数据库发送指令,让数据库帮我们做事情。

事务:可以理解为是让数据库做的事情,可能存在多个 SQL 操作。

所有的操作应该是统一的,要么都成功,要么都失败。

事务的本质可以理解成:多线程并发操作同一张表格可能带来的安全问题。

事务的四大特性(ACID)

  1. Atomicity 原子性
    一个事务中的所有操作是一个整体,不可再分。事务中的所有操作要么都成功,要么都失败。

  2. Consistency 一致性
    一个用户操作了数据,提交以后,另一个用户看到的数据效果是一致。

  3. Isolation 隔离性

    • 多个用户并发访问数据库时,一个用户操作数据库,另一个用户不能有所干扰。

    • 多个用户之间的数据事务操作要互相隔离。

  4. Durability 持久性
    一个用户操作数据的事务一旦被提交(缓存–>文件),对数据库底层真实的改变是永久性的。

事务操作

  1. 开启一个事务
    每一次执行的一条sql语句之前,mysql数据库都会默认的开启
    begin;start transaction;

  2. 执行操作(执行SQL)

  3. 事务处理
    mysql数据库会默认的执行提交事务
    提交 commit
    回滚 rollback
    保存还原点 save point xx

事务的隔离级别

事务的隔离性可能会产生多线程并发操作同一个数据库表格的问题,会带来数据的安全隐患。

  1. 脏读:一个人读到了另外一个人还没有提交的数据。
    A、B在操作同一张表格
    A修改了数据,还没有提交,B读取到了
    A不提交了,回滚回来,B刚刚读取到的那些数据就是无用的----脏数据

  2. 不可重复读
    A、B在操作同一个表格
    A先读取了一些数据,读完之后B此时将数据做了修改/删除
    A再按照之前的条件重新读一遍,与第一次读取的不一致

  3. 幻读(虚读)
    A、B在操作同一个表格
    A先读取了一些数据,读完之后B此时将数据做了新增
    A再按照之前的条件重新读一遍,与第一次读取的不一致

隔离级别

  1. Serializable 级别最高,可以避免所有出现的问题,性能很慢

  2. Repeatable Read 可重复读 (避免脏读、不可重复读)

  3. Read Committed 读已提交 (避免脏读)

  4. Read UnCommitted 读未提交 (所有效果均无法保证)

MySQL数据库提供默认隔离级别 Repeatable Read
Oracle数据库提供默认隔离级别 Read Committed
查看数据库隔离级别:select @@tx_isolation;

在这里插入图片描述
修改隔离级别:set session transaction isolation level xxx;
一般情况下不需要改动。

常用SQL

# 显示有哪些database
show databases; #使用哪个数据库
use database名字;# 显示当前数据库有哪些table
show tables;# 查询数据库的字符集
select schema_name, default_character_set_name from information_schema.schemata where schema_name = `查询的数据库名`;# 查询表格信息
show table status from 数据库名 like `表名`;#查看表有什么约束
desc 表名;
show keys from 表名;
show create table 表名;

相关文章:
《数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(下:数据操作与查询》)

相关文章:

数据库管理的艺术(MySQL):DDL、DML、DQL、DCL及TPL的实战应用(上:数据定义与控制)

文章目录 DDL数据定义语言1、创建数据库2、创建表3、修改表结构4、删除5、数据类型 列的约束主键约束&#xff08;primary key&#xff09;唯一约束&#xff08;unique key&#xff09;非空约束检查约束&#xff08;check&#xff09;外键约束&#xff08;foreign key&#xff…...

成为CMake砖家(5): VSCode CMake Tools 插件基本使用

大家好&#xff0c;我是白鱼。 之前提到过&#xff0c;白鱼的主力 编辑器/IDE 是 VSCode&#xff0c; 也提到过使用 CMake Language Support 搭配 dotnet 执行 CMakeLists.txt 语法高亮。 对于阅读 CMakeLists.txt 脚本&#xff0c; 这足够了。 而在 C/C 开发过程中&#xff…...

【简洁明了】调节大模型的prompt的方法【带案例】

简明调节大模型的prompt的方法【简洁明了带案例】 1. 明确任务目标2. 提供上下文3. 指定格式4. 限制输出长度5. 使用示例6. 逐步引导7. 提供反面例子8. 使用CoT思维链9. 反复试验和调整方法九解释&#xff1a;乔哈里窗检视 最后 因为网上给出的调节prompt都 过于详细&#xff…...

【操作系统】文件管理——文件存储空间管理(个人笔记)

学习日期&#xff1a;2024.7.17 内容摘要&#xff1a;文件存储空间管理、文件的基本操作 在上一章中&#xff0c;我们学习了文件物理结构的管理&#xff0c;重点学习了操作系统是如何实现逻辑结构到物理结构的映射&#xff0c;这显然是针对已经存储了文件的磁盘块的&#xff0…...

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…...

数学建模-Topsis(优劣解距离法)

介绍 TOPSIS法&#xff08;Technique for Order Preference by Similarity to Ideal Solution&#xff09; 可翻译为逼近理想解排序法&#xff0c;国内常简称为优劣解距离法 TOPSIS 法是一种常用的综合评价方法&#xff0c;其能充分利用原始数据的信息&#xff0c; 其结果能精…...

嵌入式linux相机 转换模块

convert_manager.c #include <config.h> #include <convert_manager.h> #include <string.h>static PT_VideoConvert g_ptVideoConvertHead NULL;/*********************************************************************** 函数名称&#xff1a; Register…...

【自学安全防御】二、防火墙NAT智能选路综合实验

任务要求&#xff1a; &#xff08;衔接上一个实验所以从第七点开始&#xff0c;但与上一个实验关系不大&#xff09; 7&#xff0c;办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 8&#xff0c;分公司设备可以通过总…...

【Android】传给后端的Url地址被转码问题处理

一、问题 为什么使用Gson().toJson的时候&#xff0c;字符串中的会被转成\u003d 在 Gson 中&#xff0c;默认情况下会对某些特殊字符进行 HTML 转义&#xff0c;以确保生成的 JSON 字符串在 HTML 中是安全的。因此&#xff0c;字符 会被转义为 \u003d。你可以通过禁用 HTML 转…...

1.厦门面试

1.Vue的生命周期阶段 vue生命周期分为四个阶段 第一阶段&#xff08;创建阶段&#xff09;&#xff1a;beforeCreate&#xff0c;created 第二阶段&#xff08;挂载阶段&#xff09;&#xff1a;beforeMount&#xff08;render&#xff09;&#xff0c;mounted 第三阶段&#…...

设计模式使用场景实现示例及优缺点(行为型模式——状态模式)

在一个遥远的国度中&#xff0c;有一个被称为“变幻之城”的神奇城堡。这座城堡有一种特殊的魔法&#xff0c;能够随着王国的需求改变自己的形态和功能。这种神奇的变化是由一个古老的机制控制的&#xff0c;那就是传说中的“状态宝石”。 在变幻之城中&#xff0c;有四颗宝石&…...

抖音短视频seo矩阵系统源码(搭建技术开发分享)

#抖音矩阵系统源码开发 #短视频矩阵系统源码开发 #短视频seo源码开发 一、 抖音短视频seo矩阵系统源码开发&#xff0c;需要掌握以下技术&#xff1a; 网络编程&#xff1a;能够使用Python、Java或其他编程语言进行网络编程&#xff0c;比如使用爬虫技术从抖音平台获取数据。…...

基于 asp.net家庭财务管理系统设计与实现

博主介绍&#xff1a;专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用感兴趣的可以先…...

allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘

踩坑记录 问题描述&#xff1a; 接口自动化测试时出现报错&#xff0c;报错文件是allure_pytest库 问题分析&#xff1a; 自动化测试框架是比较成熟的代码&#xff0c;报错也不是自己写的文件&#xff0c;而是第三方库&#xff0c;首先推测是allure_pytest和某些库有版本不兼…...

C语言 反转链表

题目链接:https://leetcode.cn/problems/reverse-linked-list/description/?envTypestudy-plan-v2&envIdselected-coding-interview 完整代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/// 反转链表…...

MFC CRectTracker 类用法详解

CRectTracker 类并非 Microsoft Foundation Class (MFC) 库中应用很广泛的一个类&#xff0c;一般教科书中很少有提到。在编程中如果需编写选择框绘制以及选择框大小调整、移动等程序时&#xff0c;用CRectTracker 类就会做到事半而功倍。下面详细介绍MFC CRectTracker 类。 M…...

好玩的调度技术-场景编辑器

好玩的调度技术-场景编辑器 文章目录 好玩的调度技术-场景编辑器前言一、演示一、代码总结好玩系列 前言 这两天写前端写上瘾了&#xff0c;顺手做了个好玩的东西&#xff0c;好玩系列也好久没更新&#xff0c;正好作为素材写一篇文章&#xff0c;我真的觉得蛮好玩的&#xff…...

提高自动化测试脚本编写效率 5大关键注意事项

提高自动化测试脚本编写效率能加速测试周期&#xff0c;减少人工错误&#xff0c;提升软件质量&#xff0c;促进项目按时交付&#xff0c;增强团队生产力和项目成功率。而自动化测试脚本编写效率低下&#xff0c;往往会导致测试周期延长&#xff0c;增加项目成本&#xff0c;延…...

护眼落地灯哪个更护眼?2024年度最值得入手的5款护眼大路灯推荐

落地灯和台灯哪个更护眼&#xff1f;之所以我们眼睛经常酸痛&#xff0c;很大部分的原因是因为我们长时间在不良光线下&#xff0c;将注意力集中在屏幕或书本上会导致眼睛肌肉过度使用&#xff0c;引发疲劳和酸痛。但也不排除不正确的坐姿或者工作环境缺乏适当的照明引起的&…...

DP讨论——适配器、桥接、代理、装饰器模式通用理解

学而时习之&#xff0c;温故而知新。 共性 适配器、桥接、代理和装饰器模式&#xff0c;实现上基本没啥区别&#xff0c;怎么区分&#xff1f;只能从上下文理解&#xff0c;看目的是啥。 它们&#xff0c;我左看上看下看右看&#xff0c;发现理解可以这么简单:都是A类调用B/…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...