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

大白话从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.mzph.cn/news/716895.shtml

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

相关文章

如何在Window系统部署VisualSVN服务并结合cpolar实现无公网ip远程访问

文章目录 前言1. VisualSVN安装与配置2. VisualSVN Server管理界面配置3. 安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4. 固定公网地址访问 前言 SVN 是 subversion 的缩写,是一个开放源代码的版本控制系统…

数字孪生与智慧交通的融合发展:推动交通行业数字化转型,构建智慧城市新生态

随着信息技术的快速发展和城市化进程的深入推进,交通行业正面临着前所未有的机遇与挑战。传统的交通管理模式已难以满足日益增长的交通需求,而数字化转型则成为了推动交通行业创新发展的必由之路。数字孪生技术作为一种前沿的信息技术手段,为…

基于springboot+vue的公寓报修管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

每天的三哥牌小鸡腿没了

查看印度基金(164824)公告,从2024年2月28日起,暂停印度基金的申购,限额100块的一拖七套利告一段落。这意味着看好印度股市的国内投资者,以后只能通过在场内买入获得份额。 关于暂停申购的原因,官方说是为保护基金持有…

重磅!交通领域顶级会议TRB会议将进行重大改革

美国交通研究委员会年会(Transportation Research Board annual meeting,以下简称TRB会议)是由美国交通研究委员会举办的交通领域的国际顶级会议。该会议每年举办一次,在华盛顿特区召开。TRB会议是交通研究领域知名度最高的学术会议之一&…

安装 node 错误的配置环境变量之后使用 npm 报错

安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…

基于springboot实现企业员工绩效考评系统项目【项目源码+论文说明】

基于springboot实现企业员工绩效考评系统演示 摘要 时代的变化速度实在超出人类的所料,21世纪,计算机已经发展到各行各业,各个地区,它的载体媒介-计算机,大众称之为的电脑,是一种特高速的科学仪器&#xf…

AI-数学-高中-32-统计-样本空间与随机事件

原作者视频:【概率】【一数辞典】1样本空间与随机事件_哔哩哔哩_bilibili 1.随机试验: 2.样本点、样本空间、有限样本空间: 示例1 示例2 3.事件: 示例:

[DEBUG] spring boot-如何处理链接中的空格等特殊字符

问题&#xff1a; get或者post中提交的内容可能有空格、#等特殊字符&#xff0c;不做处理的话可能解析错误。 解决&#xff1a; html中&#xff1a; <a th:href"{/listSgrna(id${item.getGeneId()},geneName${item.getGeneName()},genome${genome},sgrnaNum${sgrnaN…

Qt CMake 国际化相关配置

文章目录 更新ts文件发布ts文件 本来用qmake使用pro文件很简单的一件事&#xff0c;结果用cmake折腾了半天。 何必呢~ 参考&#xff1a;QT6.3 CMake 多语言切换 这是我的 cmake_minimum_required(VERSION 3.16)project(testQml3_6 VERSION 0.1 LANGUAGES CXX)set(CMAKE_AUTO…

06.QT信号和槽-1

一、信号和槽概述 在Qt中&#xff0c;用户和控件的每次交互过程称为一个事件。比如"用户点击按钮"是一个事件&#xff0c;"用户关闭窗口"也是一个事件。每个事件都会发出一个信号&#xff0c;例如用户点击按钮会发出"按钮被点击"的信号&#xff…

Java练习(第5天)【总结】在字符串中寻找特定的字符(5种方法)

问题描述&#xff1a;在字符串中寻找特定字符 1、第1次出现位置 实现函数原型&#xff1a; int indexOf(char c) Java代码&#xff1a; import java.io.*; public class Way_1 {public static void main(String args[]){String str "Geeks for Geeks is a computer s…

疲劳驾驶监测报警摄像机

疲劳驾驶是导致交通事故的重要原因之一&#xff0c;为了提高驾驶安全性&#xff0c;科技日新月异&#xff0c;疲劳驾驶监测报警摄像机因其先进的技术而成为关注焦点。 疲劳驾驶监测报警摄像机采用先进的人脸识别技术和人工智能算法&#xff0c;能够实时监测驾驶员的状态。通过对…

文件操作和IO(2):Java中操作文件

目录 一、File的属性 二、File的构造方法 三、File的方法 四、代码示例 1、getName&#xff0c;getParent&#xff0c;getPath方法 2、getAbsolutePath&#xff0c;getCanonicalPath方法 3、exists&#xff0c;isDirectory&#xff0c;createNewFile方法 4、createNewF…

龙蜥 Anolis OS8.4 设置IP

1、配置文件路径 /etc/sysconfig/network-scripts/ [rootlocalhost ~]# cd /etc/sysconfig/network-scripts/ [rootlocalhost network-scripts]# ls ifcfg-ens32 进入配置文件路径后&#xff0c;展示。ifcfg-ens32这个不同的服务器不一样&#xff0c;本次虚拟机所对应的是ens3…

2. vue 工程创建

1. 基于 vite创建 官方文档: https://v3.cn.vuejs.org/guide/installation.html#vite vite官网: https://vitejs.cn 使用vite创建的优势&#xff1a; 开发环境中&#xff0c;无需打包操作&#xff0c;可快速的冷启动。轻量快速的热重载(HMR)。真正的按需编译&#xff0c;不再…

CSS列表属性

CSS列表属性 列表相关的属性&#xff0c;可以作用在 ul、ol、li 元素上。 代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>列表相关属性</title><style>ul {/* …

牛客网C++专项题目整理(1)

1. 若有定义语句:char s[3][10],(*k)[3],*p;则以下赋值语句错误的是 1.p s; 2.p k; 3.p s[0]; 4.k s; 答案&#xff1a;124 char s[3][10] s 是数组指针&#xff0c;类型为char (*)[3]&#xff0c;所指向的每个数组长度为10; char (*k)[3] k是一个数组指针&a…

国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?

我自己试用了很多的平台&#xff0c;发现三个比较好的大模型平台&#xff0c;对普通用户也比较的友好的&#xff0c;而且返回内容相对来说&#xff0c;正确率更高的&#xff0c;并且相关场景插件比较丰富的国内厂商。 本文说的&#xff0c;是我自己觉得的&#xff0c;比较有主观…

拆帧神器:深度解读Netty中的DelimiterBasedFrameDecoder()

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 拆帧神器&#xff1a;深度解读Netty中的DelimiterBasedFrameDecoder 前言基础概念分隔符的配置与选择帧的拆分与重组帧的拆分过程&#xff1a;处理分隔符位于帧中间的情况&#xff1a; 处理半包与粘包…