MySQL-基础

news2025/1/11 9:08:24

MySQL

1.SQL语句

1.1数据库

-- 创建数据库
create database review character set 字符集
create database if not exists review charset 字符集 collate 比较规则
-- 查看表的创建细节
show create database review
-- 修改数据库
alter database review charset utf8mb4 collate utf8mb4_general_ci
-- 使用数据库
use review
-- 删除数据库
drop database if exists review

排序规则:定义在指定字符集下不同字符的比较规则,若没有指定会有一个默认的排序规则。

  1. utf8_general_ci:utf8不区分大小写的通用排序规则。适合在英语及部分欧洲语言中使用。主要依赖于字符的编码值进行比较。不区分大小写、特定的语言规则、重音标记等。
  2. utf8_unicode_ci:utf8不区分大小写的unicode排序规则。在排序比较字符时,使用比较复杂的规则,并考虑特定的语言惯例和规则,将字符转换为unicode规范化形式,然后根据规范化后的字符进行比较。
  3. utf8_general_cs:utf8区分大小写的通用排序规则。
  4. utf8_unicode_cs:utf8区分大小写的unicode排序规则。

1.2表

-- 创建表
create table if not exists test_table1
(
字段名1 数据类型 [约束条件] [默认值],
字段名1 数据类型 [约束条件] [默认值],
...
);
-- 查看表的创建信息
show create table test_table1;
-- 显示表的结构
desc test_table1;
-- 添加表字段 [first|after]表示添加在表的某个字段之前或之后
alter table test_table1 add column 字段名 字段类型 [约束条件] [默认值] [first|after] 字段名;
-- 修改表字段
alter table test_table1 modify 字段名 数据类型 [约束条件] [默认值];
-- 重命名字段
alter table test_table1 change column 字段名 新字段名 新数据类型 [约束条件] [默认值];
-- 删除一个列
alter table test_table1 drop column password;
-- 修改表名
rename table test_table1 to test_table;
-- 清空表
truncate table test_table;
-- 删除表
drop table if exists test_table;

注意:约束条件和默认值是可选项。字段名和数据类型是必选项。

1.3增删改查

1.添加
insert into 表名(字段1,字段2,...) 
values
(value1, value2),
(value1, value2);
2.删除
delete from 表名 [删除条件]
3.修改数据
update 表名 set 字段名1=value1, 字段名2=value2,.... [更新条件]
4.查询数据
select [查询字段] from 表名 [查询条件]
-- 去重
select distinct [查询字段] from 表名 [查询条件]

1.4排序

使用order by关键字进行排序,asc代表升序,desc代表降序。

-- 单列排序
select .... from 表名 order by 字段名;
-- 多列排序(如果字段名1的值能区分出顺序,就不会去比较字段2的值)
select ... from 表名 order by 字段名1 字段名2 asc;

1.5分页

基本语法:limit [位置偏移量], 行数。

-- 显示查询的前10条数据
select * from test_table limit 10;
-- 指定偏移量10(相当于偏移10条元素,从第11条数据开始输出10条)
select * from test_table limit 10,10;
-- 分页公式:每页展示18条数据。显示第n页的数据。
select * from test_table limit (n-1)*18,18

1.6查询语句的执行顺序

from -> on -> join -> where -> group by -> having -> select -> distinct -> order by -> limit;

2.聚合函数

作用于一组数据,并对该组数据返回一个值。通常使用在经过分组的数据之后。

  1. AVG():计算组平均值
  2. SUM():计算组和
  3. MAX():计算组最大值
  4. MIN():计算组最小值
  5. COUNT():计算组的数量

聚合函数的注意事项:

  1. 不能使用在where语句重
  2. 如果没有分组那整张表就是一组。

having:通过group by进行了分组,根据一些条件筛选想要的分组,就可以使用having,主要起过滤分组的作用。

使用having的前提条件:

  1. 需要和group by语句同时使用
  2. 使用聚合函数进行调节筛选

3.子查询

在一条查询语句中内嵌一条查询语句,内层查询结果作为外层查询的查询条件。

需求:例如有一张表user字段分别为姓名、年龄,查询比obstar年龄更大的有谁。

select name, age from user where age>(select age from user where name = 'obstar')

单比较操作符:

  1. =:比较相等
  2. >:大于
  3. <=:小于等于
  4. <:小于
  5. =>:大于等于
  6. <>:不等

多行比较操作符:

  1. in:等于结果中的任意一个即可。
  2. any:和查询集的某一个值比较(需要和单行比较操作符一起使用)
  3. all:和查询集的所有值比较(需要和单行比较操作符一起使用)

= any:和结果集中的任意一个相等即为真。

>any:比结果集中的任意一个大即为真。

<> any:和结果集中的任意一个不相等即为真。

= all:和结果集中的所有相等即为真。

> all:大于结果集中的所有即为真

<> all:和结果集中的所有不相等即为真

4.多表查询

多个表或单张表之间进行关联查询。一般是多张表之间存在关联关系使用的方式。

内连接(INNER JOIN):它返回两个表中匹配的行。只有当两个表中的指定列具有相同的值时,它才会返回行。

外连接(OUTER JOIN):即使其中一个表中没有匹配的行。根据你选择的类型(左、右或全外连接),未匹配的行将包含NULL值。

联合连接(UNION ):操作用于组合两个或多个SELECT语句的结果集,但每个SELECT语句必须具有相同的数量的列和相似的数据类型。它默认删除重复的行,但可以使用UNION ALL来保留重复的行。

需求:存在一张表student表字段分别为st_id、st_name,grade,存在一张表成绩表(scores),字段分别为st_id、sc_type、sc_score。查询名为obstar同学的成绩。

create table students(
	st_id int,
	st_name varchar(16),
	grade varchar(8)
);

insert into students
values
(1, 'tom', '1'),
(2, 'jary', '2'),
(3, 'michael', '1'),
(4, 'obstar', '2');

create table scores(
	st_id int,
	sc_type varchar(16),
	sc_score double
);

insert into scores 
values
(1, '语文', 92.5),
(1, '数学', 82),
(1, '英语', 100),
(2, '语文', 80),
(2, '数学', 82),
(2, '英语', 60),
(3, '语文', 99.5),
(3, '数学', 84),
(3, '英语', 66),
(4, '语文', 88),
(4, '数学', 78),
(4, '英语', 98);

SELECT sc.sc_type, sc.sc_score, st.grade FROM students st INNER JOIN scores sc on sc.st_id = st.st_id where
st.st_id in (select st_id FROM students WHERE st_name = 'obstar');

需求:查询每个同学的总分是多少

SELECT st.st_id, st.st_name, st.grade, sa.sum FROM students st LEFT JOIN (SELECT st_id, SUM(sc_score) sum FROM scores GROUP BY st_id) sa ON st.st_id = sa.st_id;

5.数据类型

5.1整型

tinyint、smallint、mediumint、int(integer)、bigint。

  1. tinyint(1字节):-128-127。
  2. smallint(2字节):-32768-32767。
  3. mediumint(3字节):-8388608-8388607
  4. int(4字节):-2147483648-2147483647
  5. bigint(8字节):-9223372036854775808-9223372036854775807

可选属性:

  1. M:显示宽度,可以理解为显示的时候看到的最少数字个数,需要配合zerofill一起使用,否则不生效。
  2. unsigned:修饰整形,代表该整形是无符号的整形。
  3. zerofill:用0来填充宽度,配合M使用。

5.2浮点类型

float(4字节)、double(8字节)。

5.3定点类型

decimal(M,D):表示高精度的小数,M为精度,D为标度(小数点的位数)。1<=M<=65。D必须小于M。

decimal(6,3):表示最多可以存储6为数字,其中3位是小数,最大值为999.999。

decimal在MySQL内部是以字符串的形式进行存储,这就决定了它一定是精准的。

注意:当DECIMAL类型不指定精度和标度时,其默认为DECIMAL(10,0)。当数据的精度超出了定点数类型的

精度范围时,则MySQL会进行四舍五入处理。

在这里插入图片描述

5.4日期时间类型

year、time、date、datetime、timestamp。

  1. date:用于存储日期值,不包括时间部分。取值范围是’1000-01-01’到’9999-12-31’。
  2. time:用于存储时间值,不包括日期部分。取值范围是’-838:59:59’到’838:59:59’。
  3. datetime:用于存储日期和时间值,包括年、月、日、时、分、秒。取值范围是’1000-01-01 00:00:00’到’9999-12-31 23:59:59’。
  4. teimstamp:用于存储日期和时间值,但它会自动将存储的值转换为UTC(世界标准时间)。取值范围是’1970-01-01 00:00:01’UTC到’2038-01-19 03:14:07’UTC。
  5. year:year类型用于存储年份值,可以使用2位(‘YY’)或4位(‘YYYY’)格式。取值范围是’1901’到’2155’,或者’00’到’99’(如果使用2位格式)

5.5文本类型

  1. char:用于存储固定长度的字符串,可以指定长度,取值范围是1到255。如果存储的字符串长度小于指定长度,MySQL会用空格进行填充。
  2. varchar:用于存储可变长度的字符串,也可以指定长度,取值范围是1到65535。与CHAR类型不同,VARCHAR类型只会存储实际长度的字符串,不会进行填充。
  3. tinytext:用于存储较小的文本数据,最大长度为255个字符。
  4. text:用于存储中等大小的文本数据,最大长度为65535个字符。
  5. mediumtext:用于存储较大的文本数据,最大长度为16777215个字符。
  6. longtext:用于存储非常大的文本数据,最大长度为4294967295个字符。

6.约束

  1. 主键约束(primary key):唯一标识表中的一行数据。
  2. 唯一约束(unique):唯一约束用于确保表中的某个字段或字段组合是唯一的。
  3. 外键约束(foreign key):用于建立表之间的关联关系。
  4. 非空约束(not null):确保字段的值不能为空
  5. 检查约束(check):检查字段的值是否符合要求。
  6. 默认约束(default):插入时给某个字段设置默认值。

6.1主键约束

主键约束的字段值是唯一的且不能为空。

create table test(
	phone char(11),
	username char(32),
	primary key(phone, username)
);

注意:一个表中只能有一个主键约束,主键约束可以由多个字段组成。

6.2唯一约束

限制表中某个/多个字段值是唯一的。

create table test(
	phone char(11),
	username char(32),
	unique(phone, username)
);

注意:在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。

6.3外键约束

例如有一张学生表(主表)、成绩表(从表)。成绩表中的成绩对应的一定是一个同学,因此成绩表可以设置外键约束。

create table students(
	st_id int unique not null,
	st_name varchar(16),
	grade varchar(8)
);

create table scores(
    st_id int,
    sc_type varchar(16),
    sc_score double,
    foreign key (st_id) references students(st_id)
);

注意:从表引用的外键字段一定是主表的主键/唯一约束字段。

6.4非空约束

关键字:not null。

注意:在MySQL中,所有的数据类型都可以是null。只能对单独的字段设置为空,不能组合非空。

6.5检查约束

MySQL8.0.16版本之前可以使用check约束,但check约束对数据验证没有任何作用。添加数据时,没有任何错误或警告但是MySQL 8.0.16中可以使用check约束了。

限制字段只能为男女。

create table users (
	gender char check('男' or '女')
);

限制字段值范围

create table users (
    age tinyint unsigned ,
    check(age<=150)
);

6.6默认约束

关键字:default。

7.存储引擎

存储引擎是组织数据的一种方式

查看数据库支持的存储引擎。

show engines;

在这里插入图片描述

Transactions:事务

XA:分布式事务。

Savepoints:中断点。

7.1设置默认存储引擎

-- 查询系统默认存储引擎
show variables like '%storage_engine%';
-- 修改默认存储引擎
set default_storage_engine = InnoDB;
-- 永久修改 修改my.cnf文件,然后重启服务
default-storage-engine=InnoDB

7.2表的存储引擎

-- 设置表的存储引擎
create table test(
	字段名 数据类型 [约束条件] [默认值],
    ...
)engine = InnoDB;
-- 修改表的存储引擎(谨慎修改)
alter table test engine = MyISAM;

ransactions:事务

XA:分布式事务。

Savepoints:中断点。

7.1设置默认存储引擎

-- 查询系统默认存储引擎
show variables like '%storage_engine%';
-- 修改默认存储引擎
set default_storage_engine = InnoDB;
-- 永久修改 修改my.cnf文件,然后重启服务
default-storage-engine=InnoDB

7.2表的存储引擎

-- 设置表的存储引擎
create table test(
	字段名 数据类型 [约束条件] [默认值],
    ...
)engine = InnoDB;
-- 修改表的存储引擎(谨慎修改)
alter table test engine = MyISAM;

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

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

相关文章

Springboot——关于Springboot线程池时使用ThreadLocal 类的一个小小的漏洞

问题描述 前端的使用ajax发送了一个请求到后端 后端自定义了一个线程上下文和实现了一个拦截器Interceptor public class BaseContext {public static ThreadLocal<Integer> threadLocal new ThreadLocal<>();public static void setCurrentId(int id) {threadL…

javaWeb医疗管理系统

一、引言 1.1 系统背景 医疗行业一直是一个高度复杂和信息密集的领域。现代医院需要有效管理患者信息、医生信息、药物信息以及医疗记录等。本项目旨在通过开发一个JavaWeb医疗管理系统来满足这些需求。 1.2 目的和范围 这个系统的主要目标是帮助医院提高患者管理和医疗记录…

竞赛 机器视觉opencv答题卡识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…

解决u盘在我的电脑中重复显示两个

删除注册表&#xff1a; [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Desktop\NameSpace\DelegateFolders\{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}]

800*B. Long Long(贪心)

解析&#xff1a; 因为可以无限操作&#xff0c;所以最大值即为全部数字的绝对值&#xff0c;次数为连续负数区间的个数。 #include<bits/stdc.h> using namespace std; #define int long long const int N2e55; int t,n,a[N]; signed main(){scanf("%lld",&a…

力扣-367.有效的完全平方数

暴力 class Solution { public:bool isPerfectSquare(int num) {for(long i 1; i * i < num; i) {if(i * i num) return true;}return false;} };二分查找 class Solution { public:bool isPerfectSquare(int num) {int left 1, right num;while(left < right) {in…

Linux用户和权限

目录 1、root用户&#xff08;超级管理员&#xff09; su和exit命令 sudo命令 2、用户和用户组管理 用户组管理 用户管理 getent命令 3、查看权限控制信息 4、修改权限控制&#xff1a;chmod命令 5、修改权限控制&#xff1a;chown命令 1、root用户&#xff08;超级管…

Django之十三、添加用户之原始方法实现

修改urls.py path("user/add/", views.user_add),添加user_add.html {% extends layout.html %} {% block content %}<div class"container"><div class"panel panel-default"><div class"panel-heading"><h3 c…

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案&#xff0c;通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID&#xff0c;官网&#xff1a;https://www.microsoft.com/zh-cn/security/b…

LabVIEW开发带式谱感测技术

LabVIEW开发带式谱感测技术 如今&#xff0c;通过无线网络传输的数据量正在迅速增加&#xff0c;并导致频谱稀缺。超过数十亿的无线设备将被连接起来&#xff0c;并需要互联网接入。因此&#xff0c;无线电频谱管理方案的效率不足以授予对所有设备的访问权限。在频谱分配中&am…

深入学习JUC,深入了解Java线程中死锁与活锁问题,并理解其解决方法,笔记开记!!!

文章目录 死锁检查是否发生了死锁死锁的概念死锁产生的条件预防死锁解决死锁 活锁概念解决 ReentrantLock概念可重入可打断可超时可设置公平锁条件变量 死锁 检查是否发生了死锁 jstack通过 线程栈快照 定位线程中出现长时间停顿的原因, jconsole 图像界面 检查是否发生了死锁…

redis中list类型的操作

一、特点 Redis列表是简单的字符串列表&#xff0c;按照插入顺序排序。你可以添加一个元素到列表的头部&#xff08;左边&#xff09;或者尾部&#xff08;右边&#xff09;。一个列表最多可以包含 2^32 - 1 个元素 (超过40亿个元素)。 list其底层使用quicklist存储数据 qu…

mysql面试题10:MySQL中有哪几种锁?表级锁、行级锁、页面锁区别和联系?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Mysql中有哪几种锁? 在MySQL中,主要有以下几种类型的锁: 共享锁(Shared Lock):也称为读锁。多个事务可以同时持有共享锁,可以读取但不能修…

想要精通算法和SQL的成长之路 - 验证二叉树的前序序列化

想要精通算法和SQL的成长之路 - 验证二叉树的前序序列化 前言一. 验证二叉树的前序序列化 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 验证二叉树的前序序列化 原题链接 思路&#xff08;参考负雪明图&#xff09;&#xff1a; 首先我们看题目所给的字符串&#xff…

Ipython和Jupyter Notebook介绍

Ipython和Jupyter Notebook介绍 Python、IPython和Jupyter Notebook是三个不同但密切相关的工具。简而言之&#xff0c;Python是编程语言本身&#xff0c;IPython是对Python的增强版本&#xff0c;而Jupyter Notebook是一种在Web上进行交互式计算的环境&#xff0c;使用IPytho…

CSS学习小结

css的两种使用方式&#xff1a; ①内嵌样式表 ②导入外部样式表&#xff08;实际开发常用&#xff09;<link href"...." rel"stylesheet"/> 选择器&#xff1a; ①标签选择器&#xff1a;通过标签种类决定 ②类选择器&#xff1a;class"..…

websocket逆向【python实现http/https拦截】

python实现http拦截 前言:为什么要使用http拦截一、技术调研二、技术选择三、使用方法前言:为什么要使用http拦截 大多数爬虫玩家会直接选择API请求数据,但是有的网站需要解决扫码登录、Cookie校验、数字签名等,这种方法实现时间长,难度高。需求里面不需要高并发,有没有…

vertx的学习总结4

一、异步数据和事件流 1.为什么流是事件之上的一个有用的抽象&#xff1f; 2.什么是背压&#xff0c;为什么它是异步生产者和消费者的基础&#xff1f; 3.如何从流解析协议数据&#xff1f; 1. 答&#xff1a;因为它能够将连续的事件序列化并按照顺序进行处理。通过将事件…

ensp桥接电脑网卡

注意&#xff1a; 如果ensp云中没有你想要的网卡&#xff0c;请卸载电脑中的wincap&#xff0c;重新安装wincap即可。 wincap下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1JSXJSu4wKaiCKjGvY0mHKA?pwdh29v 提取码&#xff1a;h29v

【算法训练-数组 三】【结构特性】螺旋矩阵

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是螺旋矩阵&#xff0c;使用【二维数组】这个基本的数据结构来实现 螺旋矩阵【EASY】 二维数组的结构特性入手 题干 解题思路 根据题目示例 mat…