当前位置: 首页 > news >正文

原墨网站建设千博企业网站管理系统 下载

原墨网站建设,千博企业网站管理系统 下载,网站域名分析,2023企业所得税最新政策数据类型 前言正式开始数值类型整数类型bit类型浮点数类型floatdecimal 字符串类型charvarcharchar和varchar比较 日期和时间类型enum和setenum和set类型的查找 前言 我在前一篇讲表的操作的时候碰到了一些数据类型#xff0c;但是没有正式讲这些类型#xff0c;本篇就重点讲… 数据类型 前言正式开始数值类型整数类型bit类型浮点数类型floatdecimal 字符串类型charvarcharchar和varchar比较 日期和时间类型enum和setenum和set类型的查找 前言 我在前一篇讲表的操作的时候碰到了一些数据类型但是没有正式讲这些类型本篇就重点讲讲MySQL中的所有数据类型。 像C、C、Java等语言都是有自己的数据类型的MySQL也有自己的数据类型。 【注】本篇中如果出现我前面没有讲过的操作我会解释一下如果讲过了我就不细说了不懂的同学可以翻一翻我前面的博客。 正式开始 首先给出所有的类型 其中红色的重点讲。分四大块来讲就是最左边的数值类型文本、二进制类型时间日期String类型。 先来说数值类型。 数值类型 其中有很多熟悉的int、bool、float等。 从float开始往下的都是浮点数类型上面的都是整数类型。 先看整数类型。 整数类型 从tinyint到bigint 不同类型占用的字节数不一样都是MySQL内部规定的。像tinyint就像charsmallint就像short……还是一个字节8个bit位。 拿tinyint来说如果写的时候直接写tinyint那默认情况下就是有符号的取值范围和C/C中的完全一样定义的时候在tinyint后面加上unsigned就表示是无符号的光说不好理解来写写。 建一个表 表中就一列类型为tinyint。 其中的细节 其中tinyint后面的(4)、Null列、Key列、Default列、Extra列下一篇讲索引的时候会细说现在先不管。 插入点数据 tinyint数据范围为-128 ~ 127可以看到插入边缘数据-128和127都没什么问题插入中间数据也没问题。 但是如果我插入的数据超出范围 会直接对我插入的数据就行拦截。 再来创建一个表搞成无符号的 无符号的tinyint的范围为0 ~ 255可以看到边缘数据0 和 255都插入成功了如果我插入-1和256 也是会直接拦截我。 你也可以试试其他整数类型超范围了都是会拦截的。 如果我们向MySQL特定的类型中插入不合法的数据MySQL一般都是直接拦截我们不让我们做对应的操作。反过来说如果我们已经有数据被成功插入到了MySQL中那么插入的数据一定时合法的。就比如说tinyint unsigned那数据库中存放的就一定是0 ~ 255的这样的合法数据。如果你插入了一个256在C语言中会发生截断但这是直接拦截。 所以MySQL中一般而言数据类型本身也是一种约束后面博客我会详谈约束这里先引一下。这里的约束是约束我们程序员倒闭程序员让程序员尽可能进行正确的插入也就是约束MySQL的使用者另外如果你不是一个很好的使用者MySQL也能保证数据插入的合法性这样就能保证数据库中的数据是可预期的、完整的没有发生什么截断或者隐式类型转换的事情。 tinyint就讲到这里剩下的几个int各位自行测试一下我这里就不再说了都是一样的。 实际在创建表的时候列类型尽量选择最合理的类型比如说年龄就用tinyint unsigned就绝对够了不要搞什么smallint这样偏大的类型可以但没必要浪费空间。在数据库这里可不要小看每一个字节如果你表中有很多条记录的话那就会浪费很多假如说有一百多万个用户每个用户一条记录一条记录浪费一字节那最后就会浪费一百多万字节还是相当多的所以要根据应用场景来选择最合适的类型来搞。 bit类型 bit类型也就是位类型。 bit[(M)] : 位字段类型。M表示位数范围从1到64。如果M被忽略默认为1。 方括号里的可以忽略。 直接给例子吧 这里搞了一位那么能表示的数据就只有0和1假如说online字段表示是否在线插入数据 插入的是0、1成功。 再插 一旦不是0或1就会失败。这就是约束。 因为只有一个比特位。 显示一下 可以看到这里显示不出来0和1因为显示的时候是将0、1这两个数值按照ASCII来显示的而0、1的ASCII是特殊的字符显示不出来想要显示出来的话可以按照其他格式来显示下面的操作后续博客会讲到 这里是按照16进制显示的也可以八进制显示 修改一下bit位数 从1位改成10位。 那么此时能表示的数就能多点了最大能到 2 10 − 1 2^{10} - 1 210−1也就是1023。插入 显示 不过这两个数还是显示不出来。 插入一个能显示出来的比如说插入一个字符‘a’ 因为a的ASCII是97所以能插入能显示。 如果我插入一个97那么也会显示a 所以这里显示的时候是按照ASCII来显示的。 bit只能表示正整数如果插入负数会直接拦截 前面说bit位数范围为1 ~ 64。这里测试一下 默认情况下就是一位 bit后面跟的1就指的是1位。注意bit后面的数是几就表示的是有几位。整数后面的11先不要管后面讲检索的时候我会说的。 浮点数类型 float float[(m, d)] [unsigned] : m表示一共有多少位d指定小数位数占用空间4个字节。 也是方括号中的能省略。 上例子 4表示的就是这个浮点数中一共有4位2表示小数点后有2位比如说43.914、3、9、1一共四位小数点后面两位91。因为并没有带unsigned那么这里范围就应该是-99.99 ~ 99.99。 插入点数据 插入负数 也是成功的。 如果我插入一些超出范围的 都是失败的。 注意如果插入数据在范围内但小数位数你没有给够会自动帮你补全 这里补了一个0。 但是如果插入的数据在范围内小数位数多了会自动四舍五入注意五入的时候前一位不同会有点区别如果前一位是偶数则不会入如果前一位是奇数才会入这一点取决于底层实现 5不入 这里5前一位是4偶数不会进位。 这里5前一位是9进位了。 再来试一个 偶数没有进位。 但如果进位的结果不在合法范围内那也无法插入 上面99.995进位的结果为100.00超了就插入失败。 所以四舍五入也是要在合法范围内的。 float数据的范围取决于定义列属性时的(m, n)的值。 在以前C/C部分定义一个浮点数总是会有符号的因为总会有一位来表示符号位。但是mysql这里会区分有符号和无符号看例子 其中的salary就是无符号的。 插入个0 会自动帮你补上两个小数0。 再插入点 再来插入点负数 都是失败的。 所以无符号的浮点数会把负数部分的数全部去掉只留下0和整数部分的。 mysql中的float是否会有精度损失呢 会的。 把刚刚的t6改一下 插入 可以看到默认情况下最大精度是六位。 再试点 可以看到会损失不少数的。 double也一样虽然精度会多一点。这里就不再演示double了。 不过有一个类型来尽量避免精度损失这个类型就是decimal。 decimal 刚刚float如果整体位数比较多就会出现存的数据不太准的情况。这一点也和浮点数的存储原理有关系。不过decimal可以规避精度上的损失。二者用起来还是很相似的看 decimal(m, d) [unsigned] 定点数m指定长度d表示小数点的位数来演示一下 这里搞了两列一列是float一列是decimal。 来插入点数据 可以看到其实和float差不多甚至也有四舍五入。 再来插入点不行的 也是位数过多。 我这里再来将decimal改一下精度 先前插入的数据精度也会跟着变 插入点数据 可以看到float已经不准的但是decimal依旧很准。 因此如果我们希望某个数据表示高精度选择decimal。 decimal整数最大位数m为65。支持小数最大位数d是30。 如果d被省略默认为0如果m被省略默认是10。不过也看版本如果版本不同默认值也会有差异。 有一篇博客讲的很好我贴到这里【MySQL】浮点数精度问题 字符串类型 char char(L): 固定长度字符串L是可以存储的长度单位为字符最大长度值可以为255。 直接上例子 name类型为char(2)也就是能存放两个字符。 插入点数据 abc不行其他都行。 显示一下 再插入点 中国人没有插入进去。 注意在utf8中一个汉字占用3个字节而GBK中一个汉字占两个字节而这里 中国 都占用6个字节了还能插入这就可以说明char中的单位是字符而非字节mysql中的字符和C/C语言中的字符概念是不一样的以前语言上是一个字符对应一个字节而汉字是一个字符所以‘中’是一个字符所以‘中国’就是两个字符而不是看6个字节两个字符就能插入。但是‘中国人’是3个字符就插入不了。 刚刚介绍的时候说了最大长度是255这里里试一下建256的行不 看来是不行不过下面提示了说可以用BLOB或者TEXT来替代。 char先到这。 varchar varchar(L): 可变长度字符串L表示字符长度最大长度65535个字节。 最长为65536个字节比char大。 演示 插入数据 到 停。因为加上是7个字符。那这里和插入有什么区别呢等会再说先把varchar讲完。 再来修改一下t9刚刚说了varchar最大字节数为65535那能把长度改成65535吗 看来是不行不过提示了一个max 21845这是啥 这里字符集用的是utf8一个字符3字节 21845 ∗ 3 65535 21845 * 3 65535 21845∗365535所以这里varchar最大能插入的字符个数是21845试试 还是不行为啥 上面解释的是一行不能太大啥是一行呢 一行其实就是一条记录一条记录的大小最大就是65535个字节上面t9中有两列一列是int4字节一列是varchar如果给成21845的话就会占用65535个字节这样总计就是65539个字节再调小一点 可以看到21842能成功21844、21843都不行。一下子少了3个字符也就是9字节但是int也才4字节呀为啥得多给9字节才行 这里就要说一说char和varchar的区别了。 char在 C/C中类似一个定长数组比如说char(6)就像char arr[6]一样申请了就一定会开6个字节的空间但是你用多少不会关心的就算你只需要用1个字节但是还是会开6个字节的空间那这样就会有一定程度的浪费。 但是varchar就像C中的string一样空间是动态开辟的比如varchar(1000)这里就当是3000个字节那就相当于给string的capacity开到了3000一样size依旧还是0只有在插入数据的时候才会实际开辟空间。比如你只需要1个字符那么只会给你开一个字符的空间剩余的空间不会真正开出来的但是上限还是1000个字符上限和有多少用多少是不冲突的。但虽然string更省空间一点但是其中还会有相应的字段来保存size和capacity是多少。对应的varchar也是其中需要有字段来保存当前数据的长度而这个字段也会占用空间。 varchar长度可以指定为0到65535之间的值但是有1 - 3 个字节用于记录数据大小所以说有效字 节数是65532。1 ~ 3个字节完全是取决于其中数据长度的大小的如果数据比较短用一个字节就能表示整个长度。但如果数据比较长字节短了表示不出来那么就要多个字节来表示最长的时候就是3个字节就能表示。 所以就能回答前面的问题了多给9个字节其实并不是给int的而是其中记录长度的字段占用的但是varchar中是以字符为单位的总共给三个字符两个字符6字节用来表示int的4个字节一个字符3字节用来表示数据的长度。 再来给个例子 这里t10只有一个name所以可以开的更大一点 不过21845还是开不了因为一行最大不能超过65535 char和varchar比较 看图 解释一下varchar占用字节其实刚刚也说过了数据短的时候用一个字节就可以表示总长度了这里abcd只有4个字节用1个字节完全可以表示所以就是13个字节A同理。 Abcdechar和varchar都开的是4肯定没法存。 如何选择定长或变长字符串 如果数据确定长度都一样就使用定长char比如身份证手机号md5 如果数据长度有变化,就使用变长(varchar), 比如名字地址但是你要保证最长的能存的进去。 定长的磁盘空间比较浪费但是效率高。 变长的磁盘空间比较节省但是效率低。 定长的意义是直接开辟好对应的空间 变长的意义是在不超过自定义范围的情况下用多少开辟多少。 日期和时间类型 日期和时间类型在表中是很常见的日期代表年月日时间代表时分秒所以日期时间代表年月日时分秒。 常用的日期有如下三个 date :日期 ‘yyyy-mm-dd’ 占用三字节 datetime 时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 占用八字节 timestamp 时间戳从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致占用四字节 时间戳是啥意思我就不说了不懂的同学百度一下。 时间戳会自动更新日期和日期时间需要我们手动添加光讲理论不好说得看例子。 例子 这里时间戳默认值为当前时间戳附加列中说更新的时候会自动将这个时间更新成当前时间戳还是得看例子光看理论不好说。 这里是指定列插入数据指定t1和t2需要加括号我前面的插入都是全列插入可以手动加括号但不加方便一点t3不用我们手动插入在插入的时候初始值会自动更新成你当时插入操作的时间。 再来一个 来更新一下我这里专门隔了好久搞的 其中划线的sql语句就是将t1为’2000-10-01’的记录的t1修改成1999-01-01可以看到更新之后时间戳直接变成了新的时间。 timestamp类型常用于论坛/评论区比如说 就把这里的t12表作为专门用来评论的。 当一个人通过客户端将消息发送出去其实就是发到了服务器服务器再将消息转到sql语句交给数据库然后数据库就会记录下来这个人的言论和发表言论的时间 如果过几天这个人把这条评论改了那么也会显示成TA改评论的时间 这样其他人就能看到这个人评论的时间。 datetime用于固定时间比如说记录下你入职的时间这样方便计算你的工龄、给你发工资的时间等等。或者是记录你获取身份证的时间方便记录什么时候到期啥的。 就说这么些。 enum和set 枚举和集合。 其实就和C中的差不多。 理论 enum(‘选项1’,‘选项2’,‘选项3’,…); 该设定只是提供了若干个选项的值最终一个单元格中实际只存储了其中一个值而且出于效率考 虑这些值实际存储的是“数字”因为这些选项的每个选项值依次对应如下数字1,2,3,…最多65535 个当我们添加枚举值时也可以添加对应的数字编号。 set(‘选项值1’,‘选项值2’,‘选项值3’, …) 该设定只是提供了若干个选项的值最终一个单元格中设计可存储了其中任意多个值而且出于效率考虑这些值实际存储的是“数字”因为这些选项的每个选项值依次对应如下数字1, 2, 4, 8, 16, 32…最多64个。 enum是多选一set可以多选一也可以多选多。 来点例子 在初始建表的时候就要将选项设置好后面在插入数据的时候再选择对应的选项。 插入点数据 再来一个 enum只能在给出的选项中单选一 enum还可以给数字 其他的不行 这里就说明枚举类型可以写限定的常量(男/女)也可以写限定常量的下标(从1开始)有几个常量就有几个值。数值是几就表示第几个常量。 set可以在给出的选项中选多个 注意多个字段之间不能加空格不然会出错。 再来一个 enum和枚举都可以给成空 后面讲约束的时候再详谈这一点。 同样的set也可以给成数字但是和枚举的数字不太一样 给0的时候是一个空串’ 1是敲代码2是扳手腕3是敲代码和扳手腕。 注意空串’ ‘和null可不一样null表示什么都没有’ 表示有东西但不过是空串。就好比你手上有一个空瓶子最起码还能接点水喝但你空手接不到水手上捧的那点不算。 再看一下votes 插入0为空串1为敲代码2为扳手腕3却不是健身而是敲代码和扳手腕。 再插入一个7 很明显这些数字不是下标五个爱好把这些爱好想象成5个比特位00000为1就代表有这个爱好。数值给1的时候就是00001那么就是有敲代码这个爱好。给2就是00010就是有扳手腕这个爱好 ……7就是00111就是前面的三个。 那总共5个位全部都有就是11111这个值十进制就是31试试 所以枚举那里是下标而集合这里是位图。 但是不建议在添加枚举值集合值的时候采用数字的方式因为不利于阅读。 enum和set类型的查找 这里要用到where字句后面博客会专门讲解这里就先用一下。这里只要知道是用来筛选的就行了。 比如说 还可以是数字 但是范围之外的就不行 再来一下查找爱好的 能找到不过有个小问题有的人爱好不止一个但是包含敲代码能不能让这样的人在查找的时候也显示出来 用数字来查找不太行 还是严格匹配的才会显示。 要用一个mysql的筛选函数find_in_set find_in_set(sub,str_list) 如果 sub 在 str_list 中则返回下标如果不在返回0你没有听错mysql中也有函数我后面的博客也是会讲到的这里先了解一下这个。 甚至select后面还可以跟表达式 来个这个函数的例子 再来个 如果不在范围中 就会显示0。 只能是单个的双的不行 故find_in_set只能查一个元素。 用一下 这里是会把find_in_set的结果交给前面的select。 那如果想要找同时喜欢敲代码和健身的呢 可以将(‘乒乓’, hobby)和(‘代码’, hobby)的结果拼到一块像C语言中的条件判断一样 就可以查到了。 这里的where就像条件判断一样and就像C中的。 至此数据类型全部讲完是挑着重点的讲的一些类似的类型同理。 最后一句话数据类型本来就是mysql中的一种天然约束这种约束满足了才能进行插入所以表中的数据是可预期的。 到此结束。。。
http://www.zqtcl.cn/news/83959/

相关文章:

  • 网站没有后台登陆文件夹网上拿货做哪个网站好
  • 烟台海阳市专业做网站产品设计培训
  • 做网站还是做淘宝服装公司电商网站建设规划
  • 做网站英文怎么说用织梦做企业网站
  • 北京中小型网站建设wangzhan
  • 深圳有做网站公司网站推广平台有哪些
  • 牛股大转盘网站建设wordpress模板首页
  • 17做网站广州wordpress ftp 端口
  • 直播软件下载网站asp.net 网站开发视频教程
  • 建工行业建设标准网站北京公司模板网站好
  • 有限公司在线网站长沙网站se0推广优化公司
  • 网站怎么建设2023最新装修效果图
  • 做任务提现的网站祁县建设局网站
  • php网站培训机构企业做网站网站制作推广公司
  • 正版厦门网站设计公司公司部门
  • 如何在360网站网页上做笔记网站做语言切换
  • dw8做网站步骤图手机h5免费模板网站模板下载
  • 莆田网站制作价格电子商务网站分析
  • 嘉兴网站建设培训一些做的好的网站
  • 洛阳专业做网站多少钱网站公示如何做链接
  • 网站抄袭做网站怎么认证微博
  • wordpress能大网站移动互联网应用程序个人信息保护管理暂行规定(征求意见稿)
  • 百度官方网站入口wordpress查看管理员密码
  • 自己做网站难软文案例
  • 网站改版海南建设教育执业网站
  • 光谷网站开发免费稳定的网站空间
  • 网站模板带后台南宁做网站哪家好
  • 合肥微网站建设房屋模拟装修软件
  • 国外的旅游网站开发广州进出口贸易有限公司
  • 建立内部网站多个招聘网站格式不一致如何做招聘记录