数据库管理的艺术(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的实战应用(下:数据操作与查询》)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

水域救援装备的详细简介_鼎跃安全

水域救援行动需要救援人员配备全面、专业的装备&#xff0c;以应对各种复杂的水域环境和救援任务。水域救援套装应运而生&#xff0c;它集合了水域救援所需的各类关键装备&#xff0c;为救援人员提供全方位的保护和辅助&#xff0c;确保数援行动的高效与安全。 水域救援头盔&am…

S参数入门

一、说明 S参数全称为散射参数&#xff0c;主要用来作为描述线性无源互联结构的一种行为模型&#xff0c;来源于网络分析方法。网络分析法是一种频域方法&#xff0c;在一组离散的频率点上&#xff0c;通过在输入和输出端口得到的参量完全描述线性时不变系统&#xff08;定义参…

npm install 出现canvas错误

npm install canvas2.8.0 --ignore-scripts只要是&#xff1a;npm ERR! Failed at the XXXX.X.X install script 这种错误 都可以&#xff1a;npm install XXXX.X.X --ignore-scripts进行更改 https://blog.csdn.net/YXWik/article/details/119039561

PyTorch 深度学习实践-循环神经网络基础篇

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记基于RNNCell实现总代码 基于RNN实现总代码 含嵌入层的RNN网络嵌入层的作用含嵌入层的RNN网络架构总代码 其他RNN扩展基本注意力机制自注意力机制&#xff08;Self-Attention&#xff09;自注意力计算多头注意力机制&#xf…

浏览器的卡顿与react的解决思路

以下内容是阅读过程中结合自己的思考而诞生的产物&#xff0c;不一定准确&#xff0c;但相反的&#xff0c;可能个人对实际情况有很大的误解。 仅做参考&#xff0c;欢迎指正。 前面提到浏览器显示的其实是渲染流程最后渲染出来的一张图片&#xff0c;而一个行为引起的副作用需…

系统架构师(每日一练4)

每日一练 1.在网络操作系统环境中&#xff0c;若用户UserA的文件或文件夹被共享后&#xff0c;则()。 答案与解析 A.UserA 的安全性与未共享时相比将会有所提高 B.UserA 的安全性与未共享时相比将会有所下降 C.UserA 的可靠性与未共享时相比将会有所提高 D.UserA 的方便性与未…

redis笔记和测试

redis是用c语言写的,放不频繁更新的数据&#xff08;用户数据。课程数据&#xff09; Redis 中&#xff0c;"穿透"通常指的是缓存穿透&#xff08;Cache Penetration&#xff09;问题&#xff0c;这是指一种恶意或非法请求直接绕过缓存层&#xff0c;直接访问数据库或…

Nginx(详解)

1. 什么是Nginx&#xff1f; Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在BSD-like 协议下发行。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表…

使用ElementUI和element-china-area-data库实现省市区三级联动组件封装

在前端开发中&#xff0c;省市区三级联动是一个常见的需求。今天我们将使用Vue.js和ElementUI组件库&#xff0c;结合element-china-area-data库&#xff0c;来实现一个省市区三级联动的组件。这个组件不仅可以提高用户体验&#xff0c;还能大大简化我们的代码。接下来&#xf…

解决用PicGo为typora配置github图床失败的问题

问题 用PicGo给typora配置图床之&#xff0c;试了好几次&#xff0c;验证图片上传选项时一直都是success:false。 解决办法 安装了github-plus插件后&#xff0c;PicGo的图床设置里会出现github-plus&#xff0c;按照在GitHub选项里的信息在github-plus里再设置一遍&#xf…

swift小知识点(二)

1、 Swift 枚举 Swift 中使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内&#xff1a; enum enumname {// 枚举定义放在这里 } 如下事例&#xff1a; // 定义枚举 enum DaysofaWeek {case Sundaycase Mondaycase TUESDAYcase WEDNESDAYcase THURSDAYcase…

elementUI在手机端使用遇到的问题总结

之前的博客有写过用vue2elementUI封装手机端选择器picker组件&#xff0c;支持单选、多选、远程搜索多选&#xff0c;最终真机调试的时候发现有很多细节样式需要调整。此篇博客记录下我调试过程中遇到的问题和解决方法。 一、手机真机怎么连电脑本地代码调试&#xff1f; 1.确…

C++版OpenCV_02_几何变换

几何变换&#xff0c;持续更新 2.1 仿射变换2.2 投影变换2.3 极坐标变换 几何变换&#xff1a; 仿射变换&#xff1a;平移、放大缩小、旋转、计算仿射矩阵&#xff08;方程法、矩阵法&#xff09;、插值&#xff08;最近邻、双线性插值&#xff09;、投影变换极坐标变换 2.1 仿…

Blender4.2版本正式上线,新版本的5个主要功能!

​Blender刚刚推出了备受瞩目的 Blender 4.2 版本&#xff0c;这款软件专为那些在视觉特效、动画制作、游戏开发和可视化设计领域工作的艺术家们量身打造。作为最新的长期稳定更新&#xff0c;Blender 4.2 不仅稳定可靠&#xff0c;还引入了备受期待的“Eevee Next”实时渲染引…

Milvus 实践(1) --- 文本-图片交互式search搭建及原理

目录 背景 训练素材 download torchvision 简介 python代码 执行结果 模型训练 模型训练参数 训练模型 注意事项 模型加载 录入vectorDB 使用预加载的模型参数对图片进行编码 录入milvus 查询效果 查询编码 milvus search 模型适用列表 总结 背景 应该说Mi…

什么是人工智能的黑盒效应

人工智能的黑盒效应是指AI模型的内部运作机制不透明&#xff0c;人们难以理解其如何从输入得到输出的现象。 黑盒效应一直是人工智能发展中的一大挑战。在许多情况下&#xff0c;AI模型被视作一个“黑盒子”&#xff0c;只能看到输入和输出&#xff0c;却无法观察其内部的逻辑和…

LabVIEW在CRIO中串口通讯数据异常问题

排查与解决步骤 检查硬件连接&#xff1a; 确保CRIO的串口模块正确连接&#xff0c;并且电缆无损坏。 确认串口模块在CRIO中被正确识别和配置。 验证串口配置&#xff1a; 在LabVIEW项目中&#xff0c;检查CRIO目标下的串口配置&#xff0c;确保波特率、数据位、停止位和校验…

ASPICE过程改进原则:确保汽车软件开发的卓越性能

"在汽车行业中&#xff0c;软件已经成为驱动创新和增强产品功能的核心要素。然而&#xff0c;随着软件复杂性的增加&#xff0c;确保软件质量、可靠性和性能成为了一项严峻的挑战。ASPICE标准的引入&#xff0c;为汽车软件开发提供了一套全面的过程改进框架&#xff0c;以…

用EXCEL和python 计算马尔可夫链转移矩阵

目录 目标&#xff1a;用EXCEL和python 计算马尔可夫链转移矩阵 1 用EXCEL计算 1.1 马尔可夫链的基本应用 1.2 具体计算 2 用python计算马尔可夫转移矩阵 2.1 py代码 2.2 运行结果 3 上面2者计算结果相同 目标&#xff1a;用EXCEL和python 计算马尔可夫链转移矩阵 1 用…

【信号频率估计】MVDR算法及MATLAB仿真

目录 一、MVDR算法1.1 简介1.2 原理1.3 特点1.3.1 优点1.3.2 缺点 二、算法应用实例2.1 信号的频率估计2.2 MATLAB仿真代码 三、参考文献 一、MVDR算法 1.1 简介 最小方差无失真响应&#xff08;Mininum Variance Distortionless Response&#xff0c;MVDR&#xff09;算法最…