MySQL基础(二)

目录

一. 数据库命令行基本操作指令

1. 查看当前有哪些数据库——show databases;

 2. 创建数据库——create database 数据库名 charset utf8

3. 选中数据库——use 数据库名;

4. 删除数据库——drop database 数据库名;

二. 常用数据类型

 2.1 数值类型

2.2. 字符串类型

2.3 日期类型

三. 数据表的操作

3.1. 查看数据库中有哪些表 —— show tables;

3.2. 创建表 —— create table 表名 (列名 类型, 列名 类型, ....);

3.3. 查看表的结构(表详情)—— desc 表名; 

4.4. 删除表 —— drop table 表名;


一. 数据库命令行基本操作指令

tips:

  1. 令行中,鼠标选中文本,按下 enter 键是复制,鼠标右键是粘贴。
  2. 命令行中的每一条语句都要以 ; 结尾。
  3. 指令不区分大小写    
1. 查看当前有哪些数据库——show databases;

输入 'show databases; ' 后,就显示出 当前的数据库服务器上有哪些数据库(此处的数据库是 数据集合)

(会显示至少4个数据库,具体作用在数据库进阶中会介绍)

 2. 创建数据库——create database 数据库名 charset utf8

    输入'create database 数据库名;' 后,形如下面的提示就表示创建成功

(这里显示的0.00意思是创建数据库消耗的时间不足10ms) 

 注意事项:

  1. 创建数据库的名字,也不能和已有数据库名字重复
  2. 创建数据库的时候,数据库的名字,不能和 SQL 中的 “关键字” 重复(像create、show、database、databases......)

    不过,也有办法让关键字成为数据库名——创建数据库的时候,给数据库名加上反引号:`

(比如创建一个数据库表示“订单order”,order刚好也是SQL中的关键字)


     创建数据库的时候,还需要指定数据库的“字符集charset”,往往是开发中很关键的环节。

首先,了解一下什么是 “字符集”: 

     一个中文汉字占几个字符?—— 取决于当前的字符集。使用不同的字符集,对应的字节数是不同的。计算机本质上存储二进制数据,就需要约定好不同的数字表示不同的字符。对于英文来说,使用 ASCII码表 就足够了;但是对于其他语言文字(比如 中文),这个表就无法表示了。因此,需要引入更大的字符表,使用不同的数字,对应到不同的语言文字。
    不同的组织,提出不同的 编码方案(有不同的表格),因此,同一个汉字在不同编码方案中,对应的数字也是不一样的。但是,存在太多的编码方案 会出现兼容问题,随着时间发展,大部分的编码方案都逐渐消亡。
——目前常用的汉字编码方案有两种:
       1)GBK  主要是在中国大陆使用(GBK 只能表示简体字,港澳台繁体字无法表示)
Windows 简体中文版,默认编码方式就是 GBK,此时一个汉字使用 2个字节 表示;之前使用 VS 编写代码,此时打印的一个汉字也是 2个字节。
       2)UTF-8 (也可以写作  UTF8 或 utf8 或者 utf-8)属于变长编码,表示不同的符号,可能用 1-4 个字节来表示。
对于中文汉字来说,一般是 3个字节 表示。UTF8 是当前世界上最流行的编码方式,不仅仅能表示中文,也能表示世界上任何一种语言文字。
    如果不能正确指定字符集,后续想保存中文,可能会出现问题。比如,mysql 5 默认的字符集是 “拉丁文”,此时如果尝试插入中文数据,就会插入失败;mysql 8 的话默认就是 UTF8。


    因此,在创建数据库时,还需要指定数据库的 “字符集” —— create database 数据库名 charset utf8

     但要注意,MySQL 上的 utf8 ,其实不是 “完全体”,有些标准的 utf8字符 上可能是不支持的,比如 emoji表情。因此,MySQL 提供了一个方案,utf8mb4 在 MySQL上表示的是 完全体utf8。但 utf8mb4 是MySQL创造的,脱离MySQL之外的程序,都不认识这个字符。


     在创建数据库的时候,可以指定一个简单的条件 —— if not exists

( 如果不存在,就创建;如果存在,就什么都不做,执行成功,但是会有一个警告。)

    如果只是通过命令行,一条一条输入 sql ,此时 if not exists 就没啥用;如果批量执行一组 sql (比如 把若干 sql 写到一个文件中),批量执行过程中,任何一个 sql 执行出错,都会使后续 sql 无法继续执行(强制终止了)。

    ( 通过 'show warnings;' 就可以查看警告 )


     可以在创建数据库的时候,指定 collate 字符约束。描述了字符串之间的比较规则, 比如 后续涉及到一些 字符串比较规则......(这里暂时不过多讨论,一般使用默认的即可)

3. 选中数据库——use 数据库名;

    一个数据库服务器上,有很多的 “数据库”(类似于“文件夹”的感觉)。因此,就需要先选中某个数据库,接下来针对数据表/数据行等操作,就是针对这个被选中的数据库展开的。

4. 删除数据库——drop database 数据库名;

    但是,删除数据库是一个非常危险的操作,在未来的工作中,一定要慎重!!!  数据库一旦删除,就恢复不了了! 

    未来工作中,数据库有很多种。有的数据库是用来测试的(里面的数据是假的,是程序员/测试工程师构造的虚假数据),有的数据库是真正使用的,称为 “线上数据库” / “生产环境数据库”,里面存储的就是真实用户的数据了。 误删数据库,会带来极大损失......


 ——要怎样做 才能避免删库呢?

1. 控制权限 —— 不是每个人都能操作

    比如 限制普通的开发,只能对数据库进行 “读操作” ,不能修改,尤其是删库这样的操作。即使执行 删除语句,也不会真正的删除(报错)。如果确实要删库,要从相关的人员( DBA,即数据库管理员)进行申请,由人家进行操作。    DBA 一般也只是中大厂才有,小公司比较少(除非专门做数据库业务的)。

2. 要对数据库进行及时备份 —— 拷贝出来,存储到别的地方

    数据备份的一二三原则:一份数据,至少保存到 两个机器上,至少有三个副本(拷贝出三份)
    但是,具体备份方案,要结合实际情况来定。

3. 让别人帮忙看着 

 

二. 常用数据类型

 2.1 数值类型
     数据类型  大小                    说明    对应Java类型
     BIT[ (M) ]M指定位数,默认为1二进制数,M范围从1到64,存储数值范围从0到2^M-1常用Boolean对应BIT,此时默认是1位,即只能存0和1
     TINYINT1字节          byte
    SMALLINT2字节          short
         INT4字节         integer
     BIGINT8字节           long
   FLOAT(M,D)4字节单精度,M指定长度,D指定小数位数。会发生精度丢失          float
DOUBLE(M,D)8字节双精度,M指定长度,D指定小数位数。会发生精度丢失        double
DECIMAL(M,D)M/D最大值+2双精度,M指定长度,D表示小数点位数。精确数值    BigDecimal类
NUMERIC(M,D)M/D最大值+2         和DECIMAL一样    BigDecimal类

1)BIT 就可以认为是一组 二进制 bit 位, BIT(10) 这个类型里就最多10个bit位。括号中最多写成BIT(64)。
2)虽然 TINYINT 和 SMALLINT 更节省空间,但是还是更推荐使用 INT 和 BIGINT。因为 随着时间发展,硬件成本(内存/硬盘)成本是越来越低;相比之下,程序员开发成本(时间)更加尖锐的矛盾。如果因为使用 TINYINT ( -128 ~ +127) / SMALLINT( -32768 ~ +32767) 用处 bug ,这样的 bug 造成的损失,可能远远不是几个硬盘能比的.....
3)浮点数:FLOAT(M,D) 单精度浮点数;DOUBLE(M,D)双精度浮点数。比如 定义类型的时候,写作 double(3, 1) —— 数字长度3位,小数点后1位。后续如果针对数据库进行 插入/修改,此时新的数据就要遵循上述规则(10.0、99.5合法,1.00、1、123.0不合法)

MySQL遵守 IEEE754 标准,表示浮点数,类似于 科学计数法(二进制)的方式表示小数。很多时候,小数是不能精确存储和表示的,这就导致在进行某些计算的时候,会出现误差;也严禁使用两个浮点数进行比较相等。如果针对浮点数,要比较相等,需要作差,看差值是否小于一定的误差范围(近似相等)。

    工程上,很多时候对于误差的容忍度是比较大的;但是有些特殊情况(比如 算钱),对于误差非常小。这样的场景使用 float/double 就不合适了..... 因此就引入了更加精确的表示小数方式——DECIMAL(M,D) 和 NUMERIC(M,D)

 4)DECIMAL(M,D) 和 NUMERIC(M,D) 这两种类型差别不大,一般使用 decimal 类型即可。这两种类型不再使用 IEEE754 这一套了,而是自己设定了一套存储格式。这个存储格式,相当于 “变长的”,付出更多的空间与时间,使存储的数据更精确。(Java中,提供了 类BigDecimal来表示;而 C/C++ 标准库没有提供对应的功能 )

    IEEE754 这一套标准,虽然有明显的缺陷,仍然成为 各种主流语言表示浮点数的方法。主要是因为 这一套标准,对于硬件(CPU, 内存)是最友好的,运算速度快,存储空间小。 


    上述谈到的类型,都是有符号类型(能表示负数);C语言中,也有一个无符号类型 unsigned 概念,其实在 MySQL 的类型中,也提供了 unsigned 类型。但在 MySQL 官方文档中,明确说明了不建议使用无符号类型,未来更高版本的 MySQL 中可能会被删掉....(Java中 就不存在 unsigned 类型)

    无符号类型 --> 弊大于利。最大的问题 —— 两个无符号类型做减法的时候,容易出现溢出,从而得到很大的整数。

2.2. 字符串类型
      数据类型         大小             说明对应Java类型
VARCHAR(SIZE)  0-65,535字节    可变长度字符串      String
         TEXT  0-65,535字节       长文本数据      String
  MEDIUMTEXT 0-16777215字节   中等长度文本数据      String
         BLOB   0-65,535字节二进制形式的长文本数据      String

1)varchar(size) --> 可变长的字符串(如果是定长字符串,设定小不够用,设定大浪费空间,可变长 就能很好的解决上述问题)。范围是 0~65535 (64kb)
    varchar(50): 表示最大为 50 个字符
2)TEXT 也是可变长的字符串,不需要指定最大长度,完全根据你存储的数据自适应。虽然 TEXT 和 varchar 都是可变长的,但实际更倾向于使用 varchar。(因为 varchar 可以指定最大长度,程序员很容易预估出表里面的数据量有多少;而 TEXT 没法指定,大小难以预估,可能会很大)
3)blob 存储的是
二进制数据,前面的都是存储 文本数据。一般 视频、音频、图片、可执行文件.....都是使用二进制数据存储。

    计算机存储和表示数据 都是 二进制的方式。所谓的 “文本” 是一种特殊的情况,即 文本数据 里面的二进制内容,都可以在对应的码表上查询到对应的合法的字符。反之,“二进制” 内容无法在码表上查询到,或者查到的都是一些 “乱码” 之类的字符。

    如果数据库存储的是 形如 “hello” 这样的字符串,使用 varchar / text 等类型;如果存储 图片/视频/音频 ,使用 blob。但blob 只能表示 最大 64kb,因此一般不建议 使用数据库直接存储图片/视频/音频。

2.3 日期类型
      数据类型  大小             说明对应Java类型
  DATETIME  8字节范围从1000到9999年,不会进行时区的检索及转换。java.util.Date、java.sql.Timestamp
TIMESTAMP  4字节范围从1970到2038年,自动检索当前时区并进行转换。java.util.Date、java.sql.Timestamp

三. 数据表的操作

对于数据表的操作,都要先 use 选中数据库,才能操作。 

3.1. 查看数据库中有哪些表 —— show tables;

    数据库中进行一些查询操作,就会得到一系列结果数据,就把这些结果称为 “结果集”。 

 (set 此处表示集合)

3.2. 创建表 —— create table 表名 (列名 类型, 列名 类型, ....);

    在关系型数据库中,一个表有哪些列,每个列叫啥名字,是啥类型,都要提前确定好,后续往表里存储的数据,都要严格遵守上述类型要求。

 (表示列的时候,列名在前,类型在后)

    可以使用 comment 增加字段说明(注释),只能在建表语句中使用,用来描述每个列是什么意思。

    也可以使用 -- / # 增加注释(更推荐使用 --)

 

3.3. 查看表的结构(表详情)—— desc 表名; 

    “desc 表名; ” 用来查看表的结构(有哪些列,每个列是什么情况,类似于 “文件详情” 内容),不能查看表里的内容这样的内容也称为 “元数据”(Meta Data)

(表的特征 --> 列信息) 

  • Field字段,即属性。 
  • varchar(20) 意思是最大长度是20个字符
  • int(11) 意思是整数 “位宽” 11(int 在硬盘上存储仍然是4个字节,但是在控制台上显示的时候,最多显示11个字符这么宽) int 表示的范围:-21亿 ~ +21亿
  • Null列:yes意为可以不填写 (填表格有 “必填项” 和 “选填项”)
    Default列:默认值
4.4. 删除表 —— drop table 表名;

“drop table if exists 表名” 类似于 “create database if not exists 数据库名”

    删表 是指删除数据库中的一个表,但保留数据库其它部分的操作。删表操作会影响到特定表的数据和结构,但不会影响到数据库中的其他表。 

    注意:删表 操作往往会比 删库 的危险更大 。为什么呢?
    ——对于删库操作,一般都是第一时间就能发现问题,程序在操作数据库时,第一时间反馈出问题(监控报警系统...),处理的越及时,损失就越小;对于删表操作,就更隐藏了。比如 一个数据库有100个表,不小心删了其中一个,程序使用数据库的时候,绝大部分的逻辑都是正常的,在使用99个表的过程中,虽然数据库能访问,但是逻辑已经出问题了。不知道要过多久,才能触发一次访问到第 100 个表这样的操作,才会触发一次报错......  指不定又过了多久,这样的报错积累到一定程度,才触发报警.....

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

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

相关文章

详细解读 CVPR2024:VideoBooth: Diffusion-based Video Generation with Image Prompts

Diffusion Models专栏文章汇总:入门与实战 前言:今天是程序员节,先祝大家节日快乐!文本驱动的视频生成正在迅速取得进展。然而,仅仅使用文本提示并不足以准确反映用户意图,特别是对于定制内容的创建。个性化图片领域已经非常成功了,但是在视频个性化领域才刚刚起步,这篇…

深度学习案例:带有一个隐藏层的平面数据分类

该案例来自吴恩达深度学习系列课程一《神经网络和深度学习》第三周编程作业,作业内容是设计带有一个隐藏层的平面数据分类。作业提供的资料包括测试实例(testCases.py)和任务功能包(planar_utils.py),下载请…

SD教程 重绘 ControlNet-Inpain

SD教程 重绘 ControlNet-Inpain ———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/A1353192296/article/details/13…

【界面改版】JimuReport 积木报表 v1.9.0 版本发布,填报能力和大屏能力

项目介绍 积木报表JimuReport,是一款免费的数据可视化报表,含报表、仪表盘和大屏设计,像搭建积木一样完全在线设计!功能涵盖:数据报表、打印设计、图表报表、门户设计、大屏设计等! Web版报表设计器&#x…

【网络】1.UDP通信

UDP通信 1 server1.1 server建立的步骤1.2 运行server 2 client2.1 client的建立步骤2.2 运行client 3 总结3.1 server3.2 client 1 server server的启动方式是:./udpserver 8080 --> 格式就是./proc port端口 port端口自己指定 1.1 server建立的步骤 获取文件描…

告别冰冷机器声:GLM-4-Voice开启情感语音交互新时代!

目录 引言一、GLM-4-Voice概述二、GLM-4-Voice的架构三、GLM-4-Voice的主要功能四、GLM-4-Voice的技术原理五、GLM-4-Voice的应用场景六、GLM-4-Voice体验快速开始结语 引言 在人工智能的不断进步中,语音交互技术正逐渐成为人机沟通的重要桥梁。它不仅极大地提升了…

MySQL定时异机备份

场景:将A机器MySQL数据库部分表每日定时备份到B机器上 (只适用于Linux) 实现方式算是比简单了,就是用mysqldump生成文件,使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…

使用VS2019将C#代码生成DLL文件在Unity3D里面使用(一)

系列文章目录 untiy知识点 文章目录 系列文章目录👉前言👉一、首先你要先有VS👉二、引用UnityAPI使用步骤👉2-1.引用unitydll文件到项目里面👉2-2.导入Dll文件 👉三、编辑dll代码👉四、导出dll…

平台化运营公司如何在创业市场招商

在当今商业环境中,平台化运营的公司正成为推动经济发展的重要力量。对于这类公司而言,在创业市场招商意义重大。 平台化运营公司具有独特特点:通过搭建开放共享平台连接供需双方,实现资源优化配置与价值创造。比如电子商务平台、社…

聚类分析算法——K-means聚类 详解

K-means 聚类是一种常用的基于距离的聚类算法,旨在将数据集划分为 个簇。算法的目标是最小化簇内的点到簇中心的距离总和。下面,我们将从 K-means 的底层原理、算法步骤、数学基础、距离度量方法、参数选择、优缺点 和 源代码实现 等角度进行详细解析。…

SpringMVC执行流程(视图阶段JSP、前后端分离阶段)、面试题

目录 1.SpringMVC执行流程分为以下两种 2.非前后端分离的SpringMVC的执行流程 3.前后端分离的项目SpringMVC执行流程 4. 面试题 1.SpringMVC执行流程分为以下两种 2.非前后端分离的SpringMVC的执行流程 流程图: 更加生动的描述: DisPatcherServlet…

十分钟Linux中的epoll机制

epoll机制 epoll是Linux内核提供的一种高效I/O事件通知机制,用于处理大量文件描述符的I/O操作。它适合高并发场景,如网络服务器、实时数据处理等,是select和poll的高效替代方案。 1. epoll的工作原理 epoll通过内核中的事件通知接口和文件…

GRE Over IPsec(华三)

GRE Over IPsec 顾名思义,GRE在内,IPsec在外 那么当数据进入tunnel隧道后,会先被GRE封装后再进行IPsec感兴趣流acl匹配,匹配上了则封装IPsec,没匹配上则丢包 实验: 需求:总部pc能够通过gre o…

echarts属性之xAxis

xAxis 直角坐标系 grid 中的 x 轴,一般情况下单个 grid 组件最多只能放上下两个 x 轴,多于两个 x 轴需要通过配置 offset 属性防止同个位置多个 x 轴的重叠。 所有属性 xAxis. id string 组件 ID。默认不指定。指定则可用于在 option 或者 API 中引…

盘点:2024年最新热门项目管理平台TOP11

一、项目管理平台的重要性 在当今竞争激烈的商业环境中,项目管理平台已成为企业提高效率和团队协作的关键工具。这主要是因为现代商业项目日益复杂,涉及多个部门、众多资源以及不断变化的需求。 首先,项目管理平台能够提高工作效率。例如&a…

PHP数据类型

几种常用的数据类型: String(字符串) Integer(整型) Float(浮点型) Boolean(布尔型) NULL(空值) Array(数组) Obje…

【大数据】Flink + Kafka 实现通用流式数据处理详解

目录 一、前言 二、流式数据处理场景介绍 2.1 流式数据处理概述 2.1.1 流式数据处理场景介绍 2.2 流式数据处理技术栈 2.2.1 数据采集 2.2.2 数据处理 2.2.3 数据存储 2.2.4 数据展示 2.3 流式数据处理场景面临的问题和挑战 三、通用的流式数据处理场景解决方案 3.1…

精准测试在基金团队应用实践

以下为作者观点: 一、引言 精准测试是一套计算机测试辅助分析系统,精准测试的核心组件包含,软件覆盖率分析、用例和代码的双向追踪、智能回归测试用例选取、缺陷定位、测试用例聚类分析、测试用例自动生成系统,这些功能完整的构…

参与国家标准制定对企业发展有哪些好处?

1. 提升企业竞争力: • 技术优势凸显:参与标准制定的过程中,企业能将自身先进的技术和管理理念融入标准,这不仅是对企业技术实力的认可,也能使企业在行业中占据技术制高点。 • 质量优势强化:国家标准对产品…

滚柱导轨出现异常损坏的原因

滚柱导轨是一种精密的直线滚动导轨,具有较高的承载能力和较高的刚性,对反复动作、起动、停止往复运动频率较高情况下可减少整机重量和传动机构及动力成本。滚柱导轨可获得较高的灵敏度和高性能的平面直线运动,在重载或变载的情况下&#xff0…