MYSQL初阶(暂为自用草稿)

目录

基本操作

database操作

table操作

数据类型

INT类型

bit类型

FLOAT类型

CHAR类型

DATE类型

SEL类型

表的约束

列约束

NULL

DEFAULT

PRIMARY KEY

UNIQUE KEY

表约束

PRIMARY KEY

FOREIGN KEY

其他补充 

AUTO_INCREMENT

COMMENT

ZEROFILL

表的CRUD

Create 创建

create table 创建表

insert into 插入数据

Read 读取

Updata 更新

Delete 删除

聚合函数

内置函数

复合查找

表的索引

MYSQL事务

MYSQL视图


基本操作

database操作

登录MYSQL(终端输入)
mysql -h 主机地址 -u 用户 -p 密码mysq -u root -p创建数据库
create database if not exists db_name [create_specification];显示所有数据库
show databases;使用数据库
use db_name;显示创建数据库语句
show create database db_name \G;修改数据库
alter database db_name [alter_spacification];删除数据库
drop database if exists db_name;导出数据库
mysqldump -p3306 -u root -p -B db_name > file_path;导入数据库
source file_path;

table操作

创建一张表
create table if no exists table_name(
field1 datatype,
field2 datatype
);展示当前数据库所有表
show tables;查看表结构
desc table_name;显示创建表的语句
show create table table_name \G;修改表名
alter table table_name rename to new_table_name;修改列
alter table table_name modify col datatype;删除列
alter table table_name drop col;在col1后面添加col2列
alter table table_name add col2 datatype after col1;删除表
drop table if exists tb_name;

数据类型

在mysql中向特定类型插入不合法数据,会被直接截断<==>能插入mysql的数据一定是合法的。

数据类型本身也是一种约束,约束使用者合法插入数据。

INT类型

类型字节最小值最大值
tinyint1- 2^72^7 - 1
tinyint unsigned102^8 - 1
smallint2- 2^152^15 - 1
smallint unsigned202^16 - 1
mediumint3- 2^232^23 - 1
mediumint unsigned302^24 - 1
int4- 2^312^31 - 1
int unsigned402^32 - 1
bigint8- 2^632^63 - 1
bigint unsigned802^64 - 1

bit类型

bit(M)
M表示每个数据所占用的比特数,范围从1到64。
如果M被忽略,默认为1。

FLOAT类型

float[(m, d)] [unsigned]
m指定显示长度(整数位+小数位)
d指定小数位数
占用4字节decimal(m, d) [unsigned]
m指定显示长度(整数位+小数位)
d指定小数位数
占用16字节
相较于float会更加精确

CHAR类型

char(L)
固定长度字符串
L表示字符长度,单位为字符,不是字节
L范围为1到255,默认为1varchar(L)
可变长度字符串
L表示字符长度,单位为字符,不是字节
L范围为1到255,默认为65535varchar会自动节省没有用上的空间,但管理消耗更大。总结:手机号,身份证号等固定长度用char(L),其他使用varchar(L)。

DATE类型

date
日期格式 'yyyy-mm-dd'
占用三字节datetime
时间日期格式 'yyyy-mm-dd HH:ii:ss'
占用八字节timestamp
时间戳格式 'yyyy-mm-dd HH:ii:ss'
占用四字节
在插入数据时,timestamp列会自动更新

SEL类型

enum(opt1, opt2, opt3,...);
枚举单选
下标从1开始set(opt1, opt2, opt3,...);
集合多选
每个选项有1个比特位标志状态find_in_set(opt,field);
将field列中数据包含opt选项的行筛选出来

表的约束

create table table_name (field1 datatype [列约束],field2 datatype [列约束],...[表约束]
);

列约束

NULL

null
默认选项
可以为空,表示此列选填not null
不可为空,表示此列必填field datatype not null,

DEFAULT

defult
就是cpp的缺省值,备胎field datatype default data,

 not null 与default 功能并不重合或冲突,not null只管数据是否为空,default只有在用户不输入的时候才起作用。另外,在不设置default与not null时,系统自带default null,不显示。

PRIMARY KEY

primary key
用于约束某列数据,无法重复,无法为空field datatype primary key,去掉主键
alter table table_name drop primary key;加上主键
alter table table_name add primary key(field);
在使用表前就应提前使用主键,之后再加主键会要求之前的所有数据数据不能重复或为null复合主键
create table if no exists table_name(
field1 datatype1,
field2 datatype2,
primary key(field1,field2)
);
用于约束多列数据,无法所有列数据都完全重复,无法为空常常配合主键列实现自动编号,一般该列无需用户主动填写
create table if no exists table_name(
field1 datatype1 primary key auto_increment,
field2 datatype2,
auto_increment = start_num;--赋予初始值
);

UNIQUE KEY

unique key
用于约束某列数据,无法重复,可以为空field datatype unique key,

表约束

PRIMARY KEY

复合主键
create table if no exists table_name(
field1 datatype1,
field2 datatype2,
primary key(field1,field2)
);
用于约束多列数据,无法所有列数据都完全重复,无法为空常常配合主键列实现自动编号,一般该列无需用户主动填写
create table if no exists table_name(
field1 datatype1 primary key auto_increment,
field2 datatype2,
auto_increment = start_num;--赋予初始值
);

FOREIGN KEY

foreign key外键用于​​连接两个表​​,并​​确保数据的一致性和完整性​​。保证数据关联正确​​:确保子表中的数据(如订单的客户ID)必须存在于父表中(如客户表的客户ID)。​​自动处理相关数据​​:当父表(如客户表)中的记录被删除或更新时,子表(如订单表)中相关的记录可以自动删除或更新。--主表
create table if no exists Mtable_name(
field1 datatype,
field2 datatype
);
--从表
create table if no exists Stable_name(
field3 datatype,
field4 datatype,
--外键约束
foreign key field3 references Mtable_name(field1)
);
--

其他补充 

AUTO_INCREMENT

auto_increment自增长只能用于整数配合主键列实现自动编号,一般该列无需用户主动填写不填写默认填本列最大值加1create table if no exists table_name(
field1 datatype1 primary key auto_increment,
field2 datatype2,
auto_increment = start_num;--赋予初始值
);

COMMENT

comment
注释,提高可读性,无实际作用field datatype comment'注释',

ZEROFILL

zerofill
该列数据显示时会自动用0补到目标宽度Lfield datatype(L) zerofill,

表的CRUD

Create 创建

create table 创建表

create table table_name(field1 datatype,field2 datatype,
);复制一份表(只复制表的结构,不复制表的数据)
create table 表名2 like 表名1;

insert into 插入数据

insert into table_name (field1, field2) values(data1, data2);

Read 读取

select        列筛选 

where        行筛选

order by 排序

asc升序(默认)

desc降序

order by 列名1 asc/desc, 列名2 asc/desc;

limit a 从第1行开始读a行数据

limit b,a 从第b + 1行开始读a行的数据

limit a offset b  从第b + 1行开始读a行的数据

这种写法表达更明确,推荐使用

limit的本质是辅助显示,并不是筛选

select distinct * from 表名;去重复值

Updata 更新

对查询到的结果进行列值更新

updata 表名 set 列名 = 数据 where子句

更新替换

on duplicate key update

replace into 表名 (列名1, 列名2) values(数据1, 数据2);

Delete 删除

delete from 表名 子句

truncate table 表名 截断表

完全初始化

自增id也重新置位

不走事务,直接清空

insert into 表名1 select * from 表名2 子句;

表格的重命名

rename table 旧表名 to 新表名;

聚合函数

count数量

sum总和

avg平均值

max最大值

min最小值

distinct 做前缀,去重

group by

分组查询

分组的目的是为了进行分组后,方便进行聚合统计

select 分组列名 需要分组统计的各项数据 from 表名 group by 分组列名 having 约束子句; 

having相当于where,用来对聚合统计的最终结果进行条件筛选

having VS where

having对分组聚合后的结果进行条件筛选

where对具体的任意列进行条件筛选

导入表格

source 文件路径

内置函数

日期函数

字符串函数

数学函数

其他函数

查询当前用户

user()

md5(str)对一个字符串进行md5摘要,摘要后得到一个32位字符串
database()显示当前正在使用的数据库
password()函数,MySQL数据库使用该函数对用户加密 varchar(41)

ifnull(val1, val2) 如果val1为null,返回val2,否则返回val1的值

复合查找

笛卡尔积

取并集

union去重

union all不去重

alter table EMP add index(empno);

表的索引

MYSQL事务

启动事务

start transaction

begain启动事务,必须手动提交

存档点

savepoint point_name;

操作回滚

rollback;整体回滚

rollback to point_name;

MYSQL事务

事务开始

begin;

事务提交(提交后无法回滚)

commit;

创建保存点

savepoint sp_name;

回滚到指定保存点

rollback to sp_name;

回滚到begin

rollback;

查看当前自动提交模式

show variables like 'autocommit';

 关闭自动提交模式

set autocommit = 0;

开启自动提交模式

set autocommit = 1;

自动提交模式只对单条sql起作用,对begin与commit圈起的多sql事务没作用

终止异常SQL,模拟客户端崩溃

crl + /

如果事务未commit,客户端崩溃时系统会自动回滚到begin

事务提交后将无法回滚

只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。

事务可以手动回滚,同时,当操作异常,MySQL会自动回滚

对于 InnoDB 每一条 SQL 语言都默认封装成事务,自动提交。(select有特殊情况,因为MySQL 有 MVCC )

查看全局隔离级别

select @@global.tx_isolation;

查看会话隔离级别
select @@session.tx_isolation;

会话隔离级别只在当次会话有效,没次会话启动时会用全级隔离级别初始化会话隔离级别


设置隔离级别

set [session | global] transaction isolation level [read uncommitted | read committed |

repeatable read | serializable]

隔离级别

读未提交【Read Uncommitted】

未提交就可以读到数据


读提交【Read Committed】

提交了才可以读到数据


可重复读【Repeatable Read】(系统默认)

一次事务前后读到的数据保持一致


串行化【Serializable】

读操作不加锁,写的时候不能有其他人读或写,先开的事务先运行完。等待时间过长事务自动回滚关闭。
 

MYSQL视图

 create view v_table_name as select field from table_name [where 筛选语句]; 

create view v_name as (select_table);

视图与基表修改数据会相互影响

删除视图

drop view v_name

视图不能添加索引

review是事务可见性的一个类,不是事务创建出来就有的,而是这个事务首次快照读的时候才形成

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

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

相关文章

MVC/MVVM 高级应用的深度解析

状态共享与同步 跨组件状态管理策略 状态变更的传播机制优化 状态快照与时间旅行调试 状态持久化 本地存储策略 状态序列化与反序列化 与服务端状态同步 数据绑定进阶 双向绑定优化 脏检查机制优化 基于Proxy/Object.defineProperty的实现差异 批量更新策略 自定义…

AI 边缘计算盒子:开启智能物联新时代

一、什么是 AI 边缘计算盒子 AI 边缘计算盒子是一种集成了高性能芯片、AI 算法和数据处理能力的硬件设备。它部署在数据源的边缘侧&#xff0c;如工厂、商场、交通路口等&#xff0c;能够在本地进行数据采集、预处理、分析和决策&#xff0c;而无需将所有数据上传到云端。这种…

LeetCode 5:最长回文子串

1、题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的 回文 子串。 示例 1: 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba" 同样是符合题意的答案。 示例 2: 输入&#xff1a;s "cbbd" 输出&#…

简易 Python 爬虫实现,10min可完成带效果源码

目录 准备工作 编写爬虫代码 运行爬虫 查看结果 遇到的问题及解决 总结 前言和效果 本文记录了使用 Python 实现一个简单网页爬虫的过程&#xff0c;目标是爬取 quotes.toscrape.com 的名言和作者&#xff0c;并将结果保存到文本文件。以下是完整步骤&#xff0c;包含环境…

【KWDB 创作者计划】_上位机知识篇---Docker容器

文章目录 前言1. Docker 容器是什么&#xff1f;隔离性轻量级可移植性可复用性 2. Docker 核心概念镜像容器仓库Dockerfile 3. Docker 基本使用(1) 安装 Docker(2) 容器生命周期管理(3) 镜像管理(4) 进入容器内部(5) 数据持久化&#xff08;挂载卷&#xff09;(6) 网络管理 4. …

树莓派练习

1.守护进程 守护进程含义&#xff1a;守护进程在树莓派上电后开始运行&#xff0c;断电后结束运行的进程&#xff0c;即使你的终端退出也不会停止&#xff0c;我们可以手动关闭它 使用nohup创建守护进程 先创建一个c语言文件&#xff08;long_task.c&#xff09; #include …

详细解释浏览器是如何渲染页面的?

渲染流程概述 渲染的目标&#xff1a;将HTML文本转化为可以看到的像素点 当浏览器的网络线程收到 HTML 文档后&#xff0c;会产生一个渲染任务&#xff0c;并将其传递给渲染主线程的消息队列。在事件循环机制的作用下&#xff0c;渲染主线程取出消息队列中的渲染任务&#xff0…

java+postgresql+swagger-多表关联insert操作(九)

入参为json&#xff0c;然后根据需要对多张表进行操作&#xff1a; 入参格式&#xff1a; {"username": "车主01","usertel": "11111111111","useridtype": "2","useridcard": null,"proname&qu…

JavaSpring 中使用 Redis

创建项目 配置 Redis 服务地址 创建 Controller 类 由于当前只是些简单的测试代码&#xff0c;所以就不进行分层了&#xff0c;只创建一个 Controller 来实现 jedis 通过 jedis 对象里的各种方法来操作 Redis 此处通过 StringRedisTemplate 来操作 Redis 最原始提供的类是 Re…

AI文生图工具推荐

一、AI文生图技术实现原理 AI文生图&#xff08;Text-to-Image&#xff09;基于生成对抗网络&#xff08;GAN&#xff09;或扩散模型&#xff08;Diffusion Model&#xff09;实现&#xff0c;通过深度学习将文本描述转化为图像。其核心流程包括&#xff1a; 文本编码&#xf…

数据结构——快排和归并排序(非递归)

快速排序和归并排序一般都是用递归来实现的&#xff0c;但是掌握非递归也是很重要的&#xff0c;说不定在面试的时候面试官突然问你快排或者归并非递归实现&#xff0c;递归有时候并不好&#xff0c;在数据量非常大的时候效率就不好&#xff0c;但是使用非递归结果就不一样了&a…

【笔记】网络安全管理

计算机硬件中,运算器和控制器通常集成在一块芯片内,一般称为()。 数据库DB、数据库系统DBS、数据库管理系统DBMS,三者之间的关系是()。 OSI/RM体系结构中的网络层与TCP/IP体系结构中的()功能相同。 三级系统应按照等保2.0要求采用密码技术通信过程中数据的()。 …

.net core web api 数据验证(DataAnnotations)

目录 一、什么是 DataAnnotations&#xff1f; 二、扩展验证逻辑&#xff08;自定义验证器&#xff09; 一、什么是 DataAnnotations&#xff1f; DataAnnotations 是一组特性&#xff08;Attributes&#xff09;&#xff0c;用于在模型类上定义验证规则。主要用于属性级别的…

小白从0学习网站搭建的关键事项和避坑指南

以下是针对小白从零学习网站搭建时需要注意的关键事项和避坑指南&#xff0c;帮助你高效学习、少走弯路&#xff1a; 一、学习路径注意事项 不要跳过基础 误区&#xff1a;直接学习框架&#xff08;如 React、Laravel&#xff09;而忽视 HTML/CSS/JS 基础。 正确做法&#xff…

深入剖析JavaScript内存泄漏:识别、定位与实战解决

在JavaScript的世界里&#xff0c;开发者通常不必像使用C那样手动管理内存的分配和释放&#xff0c;这得益于JavaScript引擎内置的垃圾回收&#xff08;Garbage Collection, GC&#xff09;机制。然而&#xff0c;这并不意味着我们可以完全忽视内存管理。“自动"不等于&qu…

2025-04-19 Python 强类型编程

文章目录 1 方法标注1.1 参数与返回值1.2 变参类型1.3 函数类型 2 数据类型2.1 内置类型2.2 复杂数据结构2.3 类别选择2.4 泛型 3 标注方式3.1 注释标注3.2 文件标注 4 特殊情形4.1 前置引用4.2 函数标注扩展4.3 协变与逆变4.4 dataclass 5 高级内容5.1 接口5.2 泛型的协变/逆变…

ETF价格相关性计算算法深度分析

1. 引言 在金融市场中&#xff0c;相关性就像是资产之间“跳舞”的默契程度。想象一下两位舞者&#xff08;ETF&#xff09;&#xff0c;有时步伐一致&#xff0c;有时各跳各的。对于管理大规模资金的投资组合而言&#xff0c;准确理解ETF之间的“舞步同步性”对于风险管理、资…

上海人工智能实验室:LLM无监督自训练

&#x1f4d6;标题&#xff1a;Genius: A Generalizable and Purely Unsupervised Self-Training Framework For Advanced Reasoning &#x1f310;来源&#xff1a;arXiv, 2504.08672 &#x1f31f;摘要 &#x1f538;推进LLM推理技能引起了广泛的兴趣。然而&#xff0c;当前…

【WPF】 在WebView2使用echart显示数据

文章目录 前言一、NuGet安装WebView2二、代码部分1.xaml中引入webview22.编写html3.在WebView2中加载html4.调用js方法为Echarts赋值 总结 前言 为了实现数据的三维效果&#xff0c;所以需要使用Echarts&#xff0c;但如何在WPF中使用Echarts呢&#xff1f; 一、NuGet安装WebV…

2025年3月 Python编程等级考试 2级真题试卷

2025年3月青少年软件编程Python等级考试&#xff08;二级&#xff09;真题试卷 题目总数&#xff1a;37 总分数&#xff1a;100 选择题 第 1 题 单选题 老师要求大家记住四大名著的作者&#xff0c;小明机智地想到了可以用字典进行记录&#xff0c;以下哪个选项的字典…