从0开始回顾Mysql --- MySQL初体验

news2024/12/24 2:11:56

大白话从0开始回顾MySQL,去除了一些繁琐的操作的演示以及内容,如MySQL安装等,本篇文章适合复习MySQL语法,学习MySQL语句,对MySQL不太熟练的同学,希望对大家有一些帮助。

MySQL初体验

首先,我将Mysql安装到了如下位置

image.png
我们点进bin目录(bin目录存放了许多可执行文件)

image.png
通常,我们是可以双击执行这些bin目录下的可执行文件,常常会出现错误,我们需要传递一些参数让它们正常运行,如bin目录下有许多客户端程序,比方说:mysqladmin,mysqldump,mysqlcheck等,我们启动客户端可执行文件一般参数格式如下:

mysql -h主机名 -u用户名 -p密码 (-p和密码之间不要有空格)

image.png
本机连接可以忽略-h,连接成功的前提是必须开启服务器程序,可以在任务管理器中查看

image.png
虽然之后编写sql语句可能不在小黑框中编写,我们还是需要简单介绍一下MySQL语句的注意事项

  • 书写结束符号

    • ;
    • \g
    • \G(不以表格形式展现)

image.png

  • 没有大小写问题 (NOW)
  • 语句可以随意换行
  • 可以一次性提交多个语句
  • 使用\c放弃本次操作
  • 字符串表示

image.png

MySQL数据类型

Mysql把数据存到表中,表由若干行组成,每一行由若干列组成,下图是一张文章表

image.png
一行代表一个文章的基本信息,一列代表基本信息的一个属性,每个属性有一定格式,不同格式是不能乱填的,比如不能把title填到用户Id中,为了更好的规范表数据,MySQL设计者针对属性不同格式定义的不同的数据类型。

数值类型

  • 整数类型

计算机采用若干个二进制来表示数字,一个二进制位只能表示21种信息,也就是0和1。

 无符号整数  :符号1就表示1,符号0表示0,数字范围(0 ~ 1),
 有符号整数  :最左端的二进制数表示正负号,符号1就表示-1,
 符号0表示0, 数字范围(-1 ~ 0)
二进制位无符号数代表数值有符号代表数值
0 000
0 111
1 02-2
1 13-1

一个二进制位所能存储的信息实在太少,计算机一般采用8个二进制位作为分配空间的基本单位,也就是一个字节(Byte),我们采用的字节数越多,意味着数值范围就越大,但消耗的存储空间也就多,所以我们可以是根据字节数的不同,将整数划分为以下几个类型

image.png

在数据类型后面加上UNSIGNED单词,表明是无符号数,在数据类型后面加上SIGNED单词或者不加,表明有符号数

create table t3(
    age tinyint unsigned
);

在数据类型后面加,显示宽度 (zerofill),整型显示宽度, 位数不足时用 0 填充

create table t7(
    id int(10) zerofill primary key auto_increment,
    name char(32)
);
insert into t7 values(12345, '5个');
insert into t7 values(1234567890, '10个');
insert into t7 values(123456789012, '12个');
select * from t7;

image.png

浮点数类型

image.png

create table t5 (
    a float(10, 2),
    b double(10, 2),
    c decimal(10, 2)
);

注意:浮点数表示小数是不准确的,比如0.3用二进制是无限循环小数,有时候是需要进行取舍的, MySQL8.0之后float和double不推荐使用(M,D)格式,直接使用float和double即可

如果我们事先知道小数的范围,就可以使用float(M,D)和double(M,D)这种格式,M 是支持多少个长度, D 是小数点后面的位数

如果想要精准的保存小数,我们可以采用定点数DECIMAL(M, D),M的最大值为65, D的最大值为30,D的值不能超过M的值它占用的存储空间与M和D有关,这和它是如何解决小数因为取舍不精确有关,它将小数点分割开,将小数点左右俩个十进制整数分别存储下来,关于它是如何分配的便简单概述,感兴趣的同学可以网上寻找。

  • 从小数点分别向左向右每隔9个十进制划为一组,不足9个十进制也同样进行
组中的十进制位数占用内存大小
1或 21字节
3 或 42字节
5 或 63字节
7 或 8 或 94字节

很多场景并不需要精细化处理,比如0.3元可以转化成20分进行存储,这样使用整数存储即可,还有在float,double,decimal类型后面添加unsigned是没有必要的,并不会增加它们所能表示的正数范围

日期和时间类型

image.png

  • datetime
create table datetime_test (
    create_at datetime
);

insert into datetime_test values('2019-4-2 16:54:00');
insert into datetime_test values('2019/4/2 16:54:00');
insert into datetime_test values(now());
-- 年份最大支持4个长度
insert into datetime_test values('10000/4/2 16:54:00');  -- 错误
insert into datetime_test values('9999/4/2 16:54:00');
  • time
create table time_test (
    create_at time
);

insert into time_test values('12:12:12');
insert into time_test values('100:12:12');
insert into time_test values('-100:12:12');
insert into time_test values('10 10:12:12');
-- 时间的范围是: [-838:59:59 - 838:59:59]
insert into time_test values('839:12:12'); -- 错误的
  • timestamp 时间戳类型
  1. 时间戳类型在显示方面和datetime是一样的, 在存储上不一样
  2. 范围从 1970-1-1 0:0:0 到 2038-1-19 11:14:07
  3. 时间戳使用 4 个字节表示
  4. 该值大小与存储的位长有关: 2  ** (4* 8 - 1)
create table timestamp_test (
    create_time timestamp
);

insert into timestamp_test values(now());
insert into timestamp_test values('2038-1-19 11:14:07');  -- 时间戳最大值
insert into timestamp_test values('2038-1-19 11:14:08');  -- 错误
  • year

    create table `year`(    create_at_year);
    -- 从1900年开始 - 1900+255
    insert into `year` values(now());
    insert into `year` values('2155'); 
    -- 年份最大值
    insert into `year` values('2156'); -- 错误
    

在MySQL 5.6.4版本之后,DATETIME存储空间被优化成了5字节,提供对毫秒,微秒的支持,比如DATETIME(0)表示精确到秒,DATETIME(3)表示精确到毫秒,小时秒位在0~6之间选择,保留的小数秒位不同,需要增加的内存空间也不同

保留的小数秒位额外需要增加的存储空间
00字节
1或 21字节
3或42字节
5或 63字节

字符串类型

image.png

表一行数据字节数不能超过165535字节,这个对text是不生效的

字符编码 : 字符是面向人的概念, 字节是面向计算机的概念,根据字符使用的字节数量是否是固定的可以分为下面俩种

1.固定长度编码 :ASCII编码采用一字节,GB2312采用2字节

2.可变长度编码 :UTF-8采用1~ 4字节编码,GB2312采用1~2字节编码,Mysql中使用的utf8mb4就是正宗的UTF-8

CHAR 与 VARCHAR 类型的区别:

  1. 允许的最大值范围不同。

    注意:无论是char(n)还是varchar(n),n表示的都是字符数,而不是字节数。

    • char(n)类型里,无论数据库使用的是哪种编码方式,n的最大取值都只能取到255,char = char(1),char(0)只能存""和null,
    • varchar(n)类型里,如果使用的是Latin1编码,最大值允许到65535(但是实际取值只能到65532,还要保留三个字节用来记录长度);如果使用的是UTF8编码,最大值允许到21845(但是实际取值只能到21844,还要保留一个字符用来记录长度)。
  2. 数据库内存存储的长度不同。

    • char(n)类型里,无论输入的内容是什么,存储的长度都是 n个字符。例如,数据类型char(10),写入字符串’张三’,在数据库里存入的数据长度是10个字符,所占字节数为n * 编码集编码一个字符需要的最大字节。
    • varchar(n)类型里,存储的长度是不固定可变的。
  3. 对于空格的处理不同。

    • char类型在存储字符串时,会将右侧末尾的空格去掉。
    • varchar类型在存储字符串时,会将右侧末尾的空格保留。
    create table student (id int primary key auto_increment ,name char(20),city varchar(20));  -- 创建数据表
    insert into student values(0,'  zhangsan   ','   shanghai    '); -- 插入数据
    
    select concat(id,name,'good') from student where id=1;
    /*
    从查询的结果中可以看到,name左侧的空格保留了,但是右侧的空格被去掉了
    +------------------------+
    | concat(id,name,'good') |
    +------------------------+
    | 1  zhangsangood        |
    +------------------------+
    */
    select name,length(name) from student where id=1;
    /*
    从查询的结果中可以看到,长度只包括左边的空格,不包括右边的空格
    +------------+--------------+
    | name       | length(name) |
    +------------+--------------+
    |   zhangsan |           10 |
    +------------+--------------+
    */
    
    select concat(id,city,'good') from student where id=1;
    /*
    从查询的结果中可以看到,city右侧的空格也保留了
    +------------------------+
    | concat(id,city,'good') |
    +------------------------+
    | 1   shanghai    good   |
    +------------------------+
    */
    select city,length(city) from student where id=1;
    /*
    从查询的长度中也可以看到,city两端的空格都被保留了
    +-----------------+--------------+
    | city            | length(city) |
    +-----------------+--------------+
    |    shanghai     |           15 |
    +-----------------+--------------+
    */
    Copy
    
  • binary和varbinary类似于char和varchar,不同的是它们包含二进制字符串,不支持模糊查询之类的,BINARY(M)和VARBINARY这个M存的是最大字节数。

枚举(enum)

多选一的时候使用的一种数据类型

在前端使用单选框的时候, 枚举类型可以发挥作用

枚举类型的优点:

  1. 限制了可选值
  2. 节省空间
  3. 运行效率高
create table t6(
    name varchar(32),
    sex enum('男','女','保密') default '保密'
);

-- 枚举类型的计数默认从1开始
insert into t6 set name='王宝强',sex=1;
Copy

集合(set)

SET最多可以有64个不同的成员。类似于复选框, 有多少可以选多少。

create table t7 (
    name varchar(32),
    hobby set('吃','睡','玩','喝','抽')
);

insert into t7 values('张三','睡,抽,玩,吃,喝');
insert into t7 values('李四','睡,抽');

BIT类型

类型占用存储空间含义
BIT(M)近似(M +7)/ 8存储M个二进制位的值

BLOG类型

这个可以用来存储图片,压缩文件,音频等,但我们通常将他们村在文件系统中,然后将路径存到数据库表中

MySQL初体验到这就结束啦,如果您感觉有帮助的话,请点赞收藏,您的点赞是我创作的动力。

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

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

相关文章

Linux内核MMC框架

1.mmc的概念 1.MMC MultiMedia Card,多媒体存储卡, 但后续泛指一个接口协定(一种卡式),能符合这接口的内存器都可称作mmc储存体,工作电压:高电压为2.7~3.6 V,低电压为1.65&#xf…

Python——桌面摄像头软件(附源码+打包)

目录 一、前言 二、桌面摄像头软件 2.1、下载项目 2.2、功能介绍 三、打包工具(nuitka) 四、项目文件复制(我全部合到一个文件里面了) 五、结语 一、前言 看见b站的向军大叔用electron制作了一个桌面摄像头软件 但是&#x…

【应用多元统计分析】--多元数据的直观表示(R语言作图)

例1.2 为了研究全国31个省、市、自治区2018年城镇居民生活消费的分布规律,根据调查资料做区域消费类型划分。 指标: 食品x1:人均食品支出(元/人) 衣着x2:人均衣着商品支出(元/人) 居住x3:人均居住支出(元/人) 生活x4…

ssh无法直接登入Linux超级用户root(23/3/3更新)

说明:不允许ssh用超级用户的身份登入是为了安全性,如果只是学习使用对安全性没啥要求可以按以下操作解除限制 以普通用户登录到服务器后,执行以下命令以编辑 SSH 服务器配置文件 /etc/ssh/sshd_config sudo nano /etc/ssh/sshd_config 此时会…

二极管原理及典型应用电路、三极管基本结构及类型状态

目录 二极管原理及典型应用电路 二极管的工作原理 二极管保护电路 二极管整流电路 二极管稳压电路 三极管基本结构及类型状态 三极管基本结构和类型 三极管的 3 种工作状态 二极管原理及典型应用电路 如下图,二极管长成这样。它们通常有一个黑色圆柱体&am…

【大厂AI课学习笔记NO.60】(13)模型泛化性的评价

我们学习了过拟合和欠拟合,具体见我的文章:https://giszz.blog.csdn.net/article/details/136440338 那么今天,我们来学习模型泛化性的评价。 泛化性的问题,我们也讨论过了,那么如何评价模型的泛化性呢? …

论文精读--GPT3

不像GPT2一样追求zero-shot,而换成了few-shot Abstract Recent work has demonstrated substantial gains on many NLP tasks and benchmarks by pre-training on a large corpus of text followed by fine-tuning on a specific task. While typically task-agnos…

二十四、剖析 ArrayDeque

文章目录 剖析 ArrayDeque3.1 循环数组3.2 构造方法3.3 从尾部添加 addLast(E)3.4 从头部添加 addFirst(E)3.5 从头部和尾部删除3.6 查看长度 size()3.7 检查给定元素是否存在3.8 toArray3.9 ArrayDeque 特点分析 剖析 ArrayDeque 本文为书籍《Java编程的逻辑》1和《剑指Java&…

Unity UGUI之Slider基本了解

在Unity中,Slider(滑动条)是一种常用的用户界面控件之一,允许用户通过拖动滑块来选择一个数值。常常应用于调节数值(如调节音量、亮度、游戏难度等)、设置选项等。 以下是Slider的基本信息和用法: 1、创建…

Neoverse CSS N3:实现市场领先能效的最快途径

区分老的架构 从云到边缘,Arm Neoverse 提供无与伦比的性能、效率、设计灵活性和 TCO 优势,正在颠覆传统基础设施芯片。 我们看到云和超大规模服务运营商正在推动更高的计算密度。随着 128 核心 CPU 设计上市(Microsoft Cobalt、阿里巴巴 Y…

工作微信统一管理(还带监管功能)

1.会话页面(可统一管理多个微信号、聚合聊天、手动搜索添加好友、通过验证请求、查看好友的朋友圈等) 2.聊天历史(可查看 所有聊天记录,包括手机.上撤回、删除的消息) 3.群发助手(可以一 -次群发多个好友和群,还可以选择定时发送,目前还在内测…

postman传参与返回值切换为左右显示的操作

目录 第一步 点击“Settings”,在下拉框选择“Settings” 第二步 在默认打开的General页面,参照下图改动两处 第一步 点击“Settings”,在下拉框选择“Settings” 第二步 在默认打开的General页面,参照下图改动两处 附上修改后…

Mysql深入学习 基础篇 Ss.02 详解四类SQL语句

我亲爱的对手,亦敌亦友,但我同样希望你能成功,与我一起,站在人生的山顶上 ——24.3.1 一、DDL 数据定义语言 1.DDL —— 数据库操作 查询 查询所有数据库 show databases; 查询当前数据库 select database(); 创建 create databa…

Linux:kubernetes(k8s)部署CNI网络插件(4)

在上一章进行了node加入master Linux:kubernetes(k8s)node节点加入master主节点(3)-CSDN博客https://blog.csdn.net/w14768855/article/details/136420447?spm1001.2014.3001.5501 但是他们显示还是没准备好 看一下…

linux安全--DNS欺骗,钓鱼网站搭建

目录 一,实验准备 首先让client能上网 1)实现全网互通,实现全网互通过程请看 2)SNAT源地址转换 3)部署DHCP服务 4)配置DHCP服务 5)启动服务 6)安装DNS服务 7)DNS配置 8)启动DNS…

数据结构c版(3)——排序算法

本章我们来学习一下数据结构的排序算法! 目录 1.排序的概念及其运用 1.1排序的概念 1.2 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想: 2.1.2直接插入排序: 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2…

Java两周半速成之路(第九天)

一.Object类 1.概述: Object类:是java中所有的类共同的父类 1、观察包所属后发现,Object类属于java.lang包下的类,今后使用的时候,不需要进行导包 2.构造方法 Object() 无参构造方法 3.Object类的成员方法 (1)…

C语言数组作为函数参数

有两种情形; 一种是数组元素作为函数实参;一种是数组名作为函数参数; 新建一个VC6单文档工程; void printshz(int , CDC* , int , int ); double getav(int a[5]); ...... void CShzcshView::OnDraw(CDC* pDC) {CShzcshDoc* pDo…

pycharm 自定义TODO类注释以及其高亮颜色

大体介绍 使用自定义TODO是为了方便看,并且快速定位到位置 上面是为了进行标记,下面是让哪些标记可以过滤掉(自定义过滤规则),从而在pycharm下面的TODO可以显示并过滤 如何设置? Setting-Preferences-Ed…