您的位置:首页 > 汽车 > 时评 > 小程序代理公司哪家好_最简单的手机网站制作_广州网站seo地址_网推接单平台

小程序代理公司哪家好_最简单的手机网站制作_广州网站seo地址_网推接单平台

2024/11/19 13:43:15 来源:https://blog.csdn.net/2301_80243321/article/details/143234370  浏览:    关键词:小程序代理公司哪家好_最简单的手机网站制作_广州网站seo地址_网推接单平台
小程序代理公司哪家好_最简单的手机网站制作_广州网站seo地址_网推接单平台

目录

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

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 个表这样的操作,才会触发一次报错......  指不定又过了多久,这样的报错积累到一定程度,才触发报警.....

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com