冲刺学习-MySQL-基础

基础

数据类型

在这里插入图片描述
常见数据类型的属性
在这里插入图片描述

  • 整型
    TINYINT、SMALLINT、MEDIUMINT、INT(INTEGER)和 BIGINT
    在这里插入图片描述
    • 可选属性
      • M:表示显示宽度(从MySQL 8.0.17开始,整数数据类型不推荐使用显示宽度属性)
      • UNSIGNED:无符号类型(非负)
      • ZEROFILL:0填充
    • 使用场景
      • TINYINT :一般用于枚举数据,比如系统设定取值范围很小且固定的场景。
      • SMALLINT :可以用于较小范围的统计数据,比如统计工厂的固定资产库存数量等。
      • MEDIUMINT :用于较大整数的计算,比如车站每日的客流量等
      • INT、INTEGER :取值范围足够大,一般情况下不用考虑超限问题,用得最多。比如商品编号。
      • BIGINT :只有当你处理特别巨大的整数时才会用到。比如双十一的交易量、大型门户网站点击量、证券公司衍生产品持仓等
    • 如何选择
      系统故障产生的成本远远超过增加几个字段存储空间所产生的成本。因此,我建议你首先确保数据不会超过取值范围,在这个前提之下,再去考虑如何节省存储空间。
  • 浮点类型
    FLOAT(单浮点)、DOUBLE(双浮点)、REAL(默认DOUBLE)
    • 精度的说明
      在这里插入图片描述
    • 精度说明
      由于浮点数是使用二进制存储的,由于存在二进制无法表达的情况,所以只能四舍五入
  • 定点数
    DECIMAL
    • DECIMAL(M,D) 的最大取值范围与 DOUBLE 类型一样,但是有效的数据范围是由M和D决定的
    • 以 字符串 的形式进行存储
    • 定点数类型取值范围相对小,但是精准,没有误差,适合于对精度要求极高的场景
  • 位类型
    BIT(存储二进制值)
    • 使用SELECT命令查询位字段时,可以用 BIN() 或 HEX() 函数进行读取。
  • 日期与时间类型
    MySQL8.0版本支持的日期和时间类型主要有:YEAR类型、TIME类型、DATE类型、DATETIME类型和TIMESTAMP类型。
    在这里插入图片描述
    • DATE:使用 CURRENT_DATE() 或者 NOW() 函数,会插入当前系统的日期。
    • TIME:
    • DATETIME:
    • TIMESTAMP:存储数据的时候需要对当前时间所在的时区进行转换,查询数据的时候再将时间转换回当前的时区。因此,使用TIMESTAMP存储的同一个时间值,在不同的时区查询时会显示不同的时间。
    • TIMESTAMP与DATETIME的区别:
      在这里插入图片描述
    • 开发经验:
      实际项目中建议使用DATETIME,但是一般存注册时间、发布时间等,不建议使用,而是使用时间戳,虽然DATETIME直观,但是不便于计算
  • 文本字符串类型:CHAR 、 VARCHAR 、 TINYTEXT 、 TEXT 、MEDIUMTEXT 、 LONGTEXT 、 ENUM 、 SET 等类型
    在这里插入图片描述
    • CHAR与VARCHAR
      • CHAR:
        • 一般需要指定长度,不指定为1
        • 保存时,实际长度小于说明长度,会在右侧填充空格,检索时会去除空格
      • VARCHAR:
        • 必须指定长度
        • 会保留数据尾部的空格
          选择情况:
        • 短的信息-CHAR
        • 固定的信息-CHAR
        • 十分频繁修改的信息-VARCHAR
        • 不同引擎下:MyISAM同上,MEMORY两种类型都可以,InnoDB都建议使用VARCHAR
  • TEXT类型(由于实际存储的长度不确定, MySQL 不允许 TEXT 类型的字段做主键)
    TINYTEXT、TEXT、 MEDIUMTEXT 和 LONGTEXT 类型
    在这里插入图片描述
    • 可以存储较大文本,但是搜索比较慢
    • 和BLOB类型的数据一样删除容易导致“空洞”,频繁使用的表不建议使用,建议单独分开
  • ENUM类型
    枚举类型
  • SET类型
  • 二进制字符串类型
    BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB类型
    • BINARY和VARBINARY类似于CHAR和VARCHAR,只是它们存储的是二进制字符串。
    • BLOB类型
      TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB 4种类型
  • JSON类型
  • 空间类型

约束

  • 概念:作用于表中字段上的规则,用于限制存储在表中的数据
  • 目的:保证数据库中数据的正确性、有效性和完整性
  • 分类:在这里插入图片描述

外键约束

删除/更新行为
在这里插入图片描述

多表查询

  • 内连接
    两张表交集的部分
  • 外连接
    • 左外连接:包含左边的以及左右交集的所有数据
    • 右外连接:包含右边的以及左右交集的所有数据
  • 联合查询:UNION

事务

在这里插入图片描述

索引

最左前缀法则

索引失败的情况

SQL提示

前缀索引

索引设计原则

在这里插入图片描述

锁机制

按锁的粒度分:

  • 全局锁
  • 表级锁
  • 行级锁

全局锁

加锁以后只能读,不能写

经典使用场景:备份库

#加锁
flush table with read lock;
#备份
mysqldump -uroot -p1234 itcast > itcast.sql
#解锁
unlock tables;

表级锁

  • 表共享读锁
  • 表独占写锁
    语法:
  1. 加锁:
lock tables 表名... read/write
  1. 释放锁
unlock tables/客户端断开连接

元数据锁

加锁过程是系统自动控制,在访问一张表的时候会自动加上。
主要作用是维护元数据的数据一致性

意向锁

  1. 意向共享锁(IS):于表锁共享锁兼容,于表锁排它锁互斥
select ... lock in share mode添加
  1. 意向排他锁(IX):于表锁共享锁及排它锁都互斥。意向锁之间不会互斥
insertupdatedeleteselect ... for update添加

行级锁

锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中

  • 共享锁(S):允许一个事务去读一行,阻止其他事务获取相同数据集的排它锁
  • 排它锁(X):允许获取排它锁的事务更新数据,阻止其他事务获取相同数据集的共享锁和排它锁
    在这里插入图片描述

间隙锁/临键锁

目的:防止幻读

  1. 索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁
  2. 索引上的等值查询(普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock退化为间隙锁
  3. 索引上的等值查询(唯一索引),会访问到不满足条件的第一个值为止

注意:间隙锁的唯一目的是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会阻止另一个事务在同一间隙上采用间隙锁

SQL编写

通用语法及分类

  • DDL
    数据定义语言
  • DML
    数据操作语言
  • DQL
    数据查询语言
  • DCL
    数据控制语言

查询所有数据库

SHOW DATABASES;

查询当前数据库

SELECT DATABASE()

创建

CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排列规则];

删除

DROP DATABASE[IF EXISTS] 数据库名;

使用

USE 数据库名;

查询当前数据库所有表

SHOW TABLES;

查询表结构

DESC 表名;

查询指定表的建表语句

SHOW CREATE TABLE 表名;

表创建

CREATE TABLE 表名(字段1 字段1类型[COMMENT 字段1注解],......
)[COMMENT 表注解];

添加字段

ALTER TABLE 表名 ADD 字段名 类型 (长度) [COMMENT 注解] [约束];

修改数据类型

ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度);

修改字段名和字段类型

ALTER TABLE 表名 CHAHGE 旧字段名 新字段名 类型(长度) [COMMENT 注解] [约束];

删除字段

ALTER TABLE 表名 DROP 字段名;

修改表名

ALTER TABLE 表名 RENAME TO 新表名

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

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

相关文章

【c++】简单了解运算符重载

引例 class Integer{ public:Integer(int num):_num(num){}int& getValue(){return _num;} private:int _num; };现在有两个Integer对象a,b。想让a和b相加得到的结果给对象c,现在可以肯定的是cab编译后肯定会报错 请注意这条信息no match for operator (oper…

家庭燃气表微信抄表识别系统

1.背景需求 目前家里燃气度数的读数上报,每个月在社区微信群里面将手机拍摄的燃气表读数截图(加住址信息水印),发到群里给抄表员。 2.总体设计 设计目标 功能一:手机上随时可以远程采集读数图片(自动加住…

Uniapp 酷炫钱包页面模板 直接引用

使用教程 直接引用Vue页面 即可 <template><view><TCqianbao></TCqianbao></view> </template> <script>import TCqianbao from /uni_modules/TC-qianbao/pages/index.vueexport default {components:{TCqianbao},} </script&…

云服务器搭建Hadoop分布式

文章目录 1.服务器配置2.Java环境3. 安装Hadoop4. 集群配置5. 编写集群的启动脚本 1.服务器配置 服务器主机名配置115.157.197.82s110核115.157.197.84s210核115.157.197.109s310核115.157.197.31s410核115.157.197.60gracal10核 所有的软件安装在/opt/module下&#xff0c;软…

GIL全局解释器锁

文章目录 GIL全局解释器锁一、引入&#xff1a;二、常用的Python解释器种类有哪些&#xff1f;1、CPython2、IPython3、PyPy4、Jython5、IronPython 三、GIL介绍四、GIL与Lock五、GIL与多线程总结 GIL全局解释器锁 一、引入&#xff1a; 首先要明白&#xff0c;GIL并不是Pyth…

工作中几个问题的思考

对于需要并行多公司并行处理的任务&#xff0c;方案是什么&#xff1f; 多线程、并行流、并发库&#xff08;ExecutorService、Futrue、Callable&#xff09;&#xff0c;分布式计算&#xff08;1&#xff09;按照公司ID分片 &#xff08;2&#xff09;按照业务类型分片 处理…

【驱动开发】创建设备节点、ioctl函数的使用

一、控制三盏灯的亮灭 头文件&#xff1a; #ifndef __HEAD_H__ #define __HEAD_H__ typedef struct{unsigned int MODER;unsigned int OTYPER;unsigned int OSPEEDR;unsigned int PUPDR;unsigned int IDR;unsigned int ODR; }gpio_t; #define PHY_LED1_ADDR 0X50006000 #def…

Apache Jmeter测压工具快速入门

Jmeter测压工具快速入门 一、Jmeter介绍二、Jmeter On Mac2.1 下载2.2 安装2.2.1 环境配置2.2.2 初始化设置 2.3 测试2.3.1 创建JDBC Connection Configuration2.3.2 创建线程组2.3.3 创建JDBC Request2.3.4 创建结果监控2.3.5 运行结果 2.4 问题记录2.4.1 VM option UseG1GC异…

Power BI 傻瓜入门 5. 准备数据源

本章内容将介绍&#xff1a; 定义Power BI支持的数据源类型探索如何在Power BI中连接和配置数据源了解选择数据源的最佳做法 现代组织有很多数据。因此&#xff0c;不用说&#xff0c;微软等企业软件供应商已经构建了数据源连接器&#xff0c;以帮助组织将数据导入Power BI等…

PAM从入门到精通(二十)

接前一篇文章&#xff1a;PAM从入门到精通&#xff08;十九&#xff09; 本文参考&#xff1a; 《The Linux-PAM Application Developers Guide》 先再来重温一下PAM系统架构&#xff1a; 更加形象的形式&#xff1a; 七、PAM-API各函数源码详解 前边的文章讲解了各PAM-API函…

图像信号处理板设计原理图:2-基于6U VPX的双TMS320C6678+Xilinx FPGA K7 XC7K420T的图像信号处理板

综合图像处理硬件平台包括图像信号处理板2块&#xff0c;视频处理板1块&#xff0c;主控板1块&#xff0c;电源板1块&#xff0c;VPX背板1块。 一、板卡概述 图像信号处理板包括2片TI 多核DSP处理器-TMS320C6678&#xff0c;1片Xilinx FPGA XC7K420T-1FFG1156&#xff0c;1片X…

Linux进程(四)--进程地址空间(一)

前言&#xff1a;在Linux中&#xff0c;每个正在运行的进程都有自己独立的虚拟地址空间&#xff0c;该虚拟地址空间是逻辑上的抽象&#xff0c;用于在进程间提供隔离和保护。它将进程的内存分配和访问从物理内存中分离出来&#xff0c;为每个进程提供了一个独立的地址空间。这究…