首页 > 数据库 >数据库技术提升-MySQL数据库原理、设计与应用【1.6】

数据库技术提升-MySQL数据库原理、设计与应用【1.6】

时间:2024-09-28 15:24:04浏览次数:9  
标签:1.6 VARCHAR 示例 数据库 约束 CHAR MySQL 类型 默认值

3.1.3 字符串类型

MySQ1. 中的字符串类型分为 CHAR、VARCHAR、TEXT 等多种类型,不同数据类型具有不同的特点,具体如表3-5所示。

1.CHAR 和 VARCHAR 类型
CHAR 和 VARCHAR类型都用来保存字符串数据。不同的是,VARCHAR可以存储可变长度的字符串。在 MySQ1.中,定义 CHAR 和 VARCHAR 类型的方式如下所示。
CHAR (M)
VABCHAR(M)
在上述定义方式中,M指的是字符串的最大长度。为了对比 CHAR 和 VARCHAR 之间的区别,下面以 CHAR(4)和 VARCHAR(4)为例进行说明,具体如表 3-6 所示。

从表 3-6 中可以看出,对于 CHAR(4)无论插人值的长度是多少,所占用的存储空间都是4字节。而VARCHAR(4)占用的字节数为实际长度加1.
2.TEXT 类型
TEXT 类型用于保存大文本数据,例如,文章内容,评论等比较长的文本。它的类型分为4种,具体如表 3-7 所示。

TEXT类型所能保存的最大字符数量取决于字符串实际占用的字节数。兴脚下留心
        (1)CHAR和 VARCHAR类型在插入教据时,若字特串末尾有空格,CHAR 类型会自动去掉空格后保存,而VARCHAR,TEXT 类型会保留空格。
        (2)在使用“=”等运算符对CHAR,VARCHAR,TEXT进行比较时,字符串末尾的空格会被忽略。倒如,使用 WHERE查询a字符串,查询结果中可能包含a后面有空格的情况,反之,若查询条件字符串末尾有空格(如a"),空格也会被忽略。
        (3)由于默认情况下创建的数据库和表使用的校对集(latinl_swedish_ci)对大小写不敏感,因此 CHAR,VARCHAR、TEXT、ENUM,SET 类型都不区分大小写。例如,使用WHERE 查询?字符串,则“a"和"A”都会被查询出来。而 BINARY,VARBINARY,BLOB

        类型区分大小写,这是因为它们使用二进制方式保存数据,(4)MySQL默认规定一条记录的最大长度是 65535 字节,一般来说,字段分配的存佛空间和额外开销加在一起不能超过 65535 字节,如果超过了这个限制,在 SOL.严格模式下表会创建失败,提示 Row size too large。但 TEXT和BL,OB 类型字段的存储空间不受此限制,它们只占用额外开销(大约 12 字节)。
        (5)在没有超过65535 限制的情况下,CHAR 字段的 M最大值为 255,VARCHAR 字段的 M 的最大值取决于字符集,常用的字符集有 |atin1(跌认)、gbk和 ut[8,对应的 M最大值分别为 65533、32766和21844,若表中只有一个字段且设置了非空约束,M 可达到最大值,否则 M的最大值会减小。
        (6)从执行效率上来说,TEXT和 BL.OB不如 CHAR,VARCHAR 类型,建议只有当需要保存大量数据时,才选择使用工EXT或BIOB类型。多学一招:二进制方式比较字符串
若要在 CHAR,VARCHAR、TEXT类型的字符串比较时严格区分大小写,有多种实现方式,接下来讲解两种比较常见的方式。
        (1)使用 BINARY关键字。在字段名或其个值的前面加上 BINARY关键宇可以将类型转换为二进制,转换后进行比较就可以严格区分大小写和空格。具体示例如下。

(2)设置字段的校对集。latinl、gbk、utf8 编码认的校对集分别为 latinl_swedish_cigbk_chinese ci.utf8 general ci,将其分别改为 latinl bin,gbk bin,utf8 bin 即可区分大小写,但在比较时仍会怒略字符事末尾的空格。具体示例如下

3.ENUM 类型
ENUM 类型又称为枚举类型,定文ENUM 类型的方式如下所示,
EKUM(“值 1','值 2',"值 3',…,"偵 n'}
在上述格式中,('值 1',值 2,"值 3',…,值 n')称为枚举列表,ENUM 类型的数据只能从枚举列表中取,并且只能取一个。ENMU 类型的使用示例如下
+① 创建表
my3gl> CREATE TABLE my enm (gender uH!'male", "fenale')),"@ 插人商条测试记录
mySgl> INSERT INTO mY em VAIUES ('male'), ('female") .
+③ 查询记录,查询结果为"female"
myBgl>SEECT + M y cnum WERE gender="fenale":
①插人枚举列表中没有的值测试
mya1> INSERT INTO mY mm VAIUS ('m").
EROR, 126501000j: Data truncated for colunn "gender' at row 1
在 MySQL,中,枚举列表最多可以有 65535 个值,每个值都有一个顺序编号,实际保存在记录中的是顺序编号,而不是列表中的值,因此不必担心过长的值占用空间。但在使用SELECT.INSERT 等语句进行操作时,仍然使用列表中的值。
4.SET 类型
SET类型用于保存字符串对象,其定义格式与ENUM 类型类似,具体如下
SET“值 1'。'值 2',"值 3',…,"值 n')
SET类型的列表中最多可以有64个值,且列表中的每个值都有一个顺序编号,为了节省空间,实际保存在记录中的也是顺序编号,但在使用 SELECT,INSERT 等语句进行操作时,仍然要使用列表中的值。
SET类型与ENUM的区别在于,它可以从列表中选择一个或多个值来保存,多个值之间用逗号”,"分隔。具体使用示例如下。

小提示:
(1)ENIJM 类型类似于单选柜,SET类型类似于复选框
(2)ENUM和SET类型的优势在于规范数据本身,限定只能插入规定的数据项,节省了存储空间,查询速度比CHAR,VARCHIAR 类型快。
(3)ENUM和SET类型列表中的值都可以使用中文,但必须设置支持中文的字符集,
宿了第3章数据类型与约束
例如 CREATE TABLE my_enum(gender ENUM('男',女))CHARSET=GBK;。(4)ENUM和SET类型在填写列表,插入值,查找值等操作时,都会自动忽略末尾的空格,
5. BINARY 和 VARBINARY 类型
BINARY和 VARBINARY类型类似于CHAR和 VARCHAR,不同的是,它们所表示的是二进制数据。定义 BINARY和 VARBINARY类型的方式如下所示。
BTNARY (M)

WARBINARY (M)
        在上述格式中,M是指二进制数据的最大字节长度。BINARY类型的长度是固定的,如果数据的长度不足最大长度,将在数据的后面用“\0"补齐,最终达到指定长度。例如,指定数据类型为 BINARY(3),当插人a时,实际存储的数据为“a\0\o",当插人 ab时,实际存储的数据为“abo”。
        接下来演示 BINARY 和 VARBINARY 的使用示例,具体如下所示。

        从上述示例可以看出,在查询 BINARY类型时,查询条件字符串也需要加上"\0"填充符,否则查询不到该记录,并且 BINARY 和 VARBINARY 都区分大小写。
6.BLOB 类型
        BI.OB类型用于保存数据量很大的二进制数据,如图片,PDF 文档等。BL.OB类型分为4 种,具体如表 3-8 所示。

需要注意的是,BL.OB类型与 TEXT类型很相似,但 BLOB 类型数据是根据二进制编码进行比较和排序,而TEX工类型数据是根据文本模式进行比较和排序。接下来演示 BIOB 的使用示例,具体如下所示。
#① 创建表,插人测试记录
mYegl>CREATE TAELE my bleb i Lol :

mysgl> INsERT INTo my blob vhlurs i'data'):+②查询记录,查询结果为"data”
myagl> 5LEer b FRod my blob wEpE b "data',
#. 查询记录,由于区分大小写,查询结果为空
myeg1> SELEoT b FRM my blob WHERE b-"Data".
从上述示例可以看出,BLOB类型在查询时区分大小写,
多学一招:ISON 数据类型
        MySQL从5.7.8版本开始提供了JSON数据类型。JSON是一种轻量级的数据交换格式,由 JavaScript 语言发展而来,其本质是一个字符串。MySQL.中JSON 类型值常见的表现方式有两种,分别为JSON数组和JSON对象,示例如下。
+① J5 数组
["abc",10,mull,true, false]
+② J5d 对象
!"k1":"value"。"k2":10}
        从上述示例可知,JSON数组中保存的教据可以是任意类型。其中,JSON数组使用“「和“]”符号实现,多个值之间使用逗号分隔,如 10 和 null;JSON 对象使用“{”和“}”符号实现,保存的教据是一组键值对,如 k] 和k2 是键名(或称为属性名),而 value 和 10 是键名对应的值。
        与直接使用 MySQL,字符串类型相比,JSON数据类型具有自动验证格式,优化存储格式的优点。JSON 数据类型所需的空间大致与1ONGBLOB或LONGTEXT相同,且不能有跌认值。下面演示JSON数据类型的使用示例,具体如下所示。

从上述示例可以看出,JSON数据类型的字段以字符串的方式插入数据即可

3.2 表的约束

        为了防止数据表中插人错误的数据,MySQL,定义了一些维护数据库完整性的规则,即表的约束。常见约束分为5种,分别是默认约束,非空约束,主键约束,唯一约束和外键约束。外键约束比较复杂,涉及多表操作,将在后面的章节中讲解,本节主要讲解其余4种约束的使用方法。

3.2.1 默认约束

        默认约束用于为数据表中的字段指定默认值,即当在表中插人一条新记录时,如果没有给这个字段赋值,那么,数据库系统会自动为这个字段插人默认值。默认值是通过DEFAULT 关键字定文的,其基本语法格式如下。
字段名 数据类型 DEEULT 默认值:
        需要注意的是,BLOB、TEXT数据类型不支持默认约束。下面通过案例演示默认约束的使用及注意事项
        (1)创建 my_default 表,准备 name 和 age 两个字段进行测试,为age 添加默认约束,设置默认值为 18。

        在上述示例中,由于 name 和 age 字段没有设置非空约束,在插人记录时省略了这两个字段的值,则分别使用默认值 NULL, 和 18。为 age 字段设置默认值 18后,插人 NULL, 值,则保存结果为 NULL,不使用默认值。在为有默认值的字段指定数据时,可以通过DEFAULT 关键字直接指定其使用默认值。
(4)为现有的表添加或删除默认约束,具体SOL语句及执行结果如下
 删除戳认约束
myS1>ALTER TAIK my default MDIpY age INT USGNEDFCuety oK, o rowg afLected [0.0l sec)
Records:0 puplicates:0 warnings:0
+② 添加獸认的束
MYSG1>ALTER TABIE mY defalt MODIEY Age INT UNSIGNED DEFAULT 18.Ouery ok,O rows affected (0.0l see)
Records:0 Duplicates:0 warnings:0
通过上述示例可以看出,使用 ALTER TABLE 修改列属性即可添加或删除默认约束

3.2.2 非空约束

        非空约束指的是字段的值不能为 NULL,在 MySQL,中,非空约東是通过 NOT NULL定文的,其基本语法格式如下。

为了让读者更好地理解,下面通过案例演示非空约束的使用及注意事项。

(1)创建 my_not_null 表,准备 nl、n2 和 n3 字段进行测试,为 n2 和 n3 设置非空约束,为 n3 设置默认值为 18。

        在上述结果中,Nu 列的值为NO表示该字段添加了非空约束。需要注意的是,添加了非空约束的 n2 字段的 Default 为 NULL,表示未给该字段设置默认值,而不能将其理解为默认值为 NULL,否则在插人数据时,若 n2 字段为 NULL.,MYSQL, 会报“Column 'n2cannot be nul!"错误提示。另外,在创建数据表时,非空约束与值为 NULL, 的默认约束(DEFULT NULL)不能同时存在,否则数据表在创建时会失败,提示“Invalid default valuefor 'h2"错误。
(3)插人记录进行测试,具体 SQL语句及执行结果如下

        在上述示例中,由于 n2 字段不能为 NULL,且没有默认值,在插人时不能插人 NULL或省略该字段;n3字段设置了默认值,在插人时可以省略该字段,但不能插人 NULL。小提示,为现有的表添加成制除非空的来的方式与默认约束类似,使用ALTERTABIE修改列属性即可。但若目标列中已经保存了NUIL值,添加非空约来会失败,提示"Invalid use of NU!l. value”,只要将 NULI,值改为其他值即可解决。

3.2.3 唯一约束

        唯一约束用于保证数据表中字段的唯一性,即表中字段的值不能重复出现。唯一约束是通过 UNIQUE 定义的,其基本语法格式如下所示。

在上述语法格式中,列级约束和表级约束是 MySQL,中的两种定义约束的方式。列级约東定义在一个列上,只对该列起约束作用;表级约束是独立于列的定义,可以应用在一个表的多个列上。
为了让读者更好地理解,下面通过案例演示唯一约束的使用及注意事项。
(1)创建 my_unique_l表和 my_unique 2表,分别通过列级约束和表级约束的方式添加唯一约束。具体 SQL语句和执行结果如下

在上述结果中,如果在 id 和 username 的 Key 列看到 UN1,说明唯一约束已经添加成功,这两个字段是唯一键。值得一提的是,当表级约束仅建立在一个字段上时,其作用效果与列级约束相同。
(2)为含唯一约束的字段插人记录,具体SQL语句及执行结果如下

从上述结果可以看出,添加唯一约束后,插人重复记录会失败。其中,username 字段出现了重复值 NULL,这是因为 MySQL,的唯一约束允许存在多个 NULL, 值。(3)添加和删除唯一性约束。若为一个现有的表添加或删除唯一约束,无法通过修改字段属性的方式操作,而是按照索引的方式来操作。关于索引的概念和使用会在后面的章节中详细讲解,读者此时只需了解用到的这些操作即可。具体 SQL,语句及执行结果如下

在上述操作中,第③步的执行结果中出现了“UNIQUE KEYid(id)”,它是添加唯一约束的完整语法,即 UNIQUE(id)的完整形式,如下所示。WIIEKY素引名字段列表)
上述语法表示在添加唯一约束时创建索引,用于加快查询速度。其中,索引名可以自己指定,也可以省略,MYSQL,会自动使用字段作为索引名。当需要对索引进行删除时,需要指定这个素引名。
(4)创建复会唯一约束。在表级唯一性约束创建时,UNIQUE()的字段列表中,可以加多个字段,组成复合唯一键,其特点是只有多个字段的值相同时才视为重复记录。具体S01.语句及执行结果如下。 

标签:1.6,VARCHAR,示例,数据库,约束,CHAR,MySQL,类型,默认值
From: https://blog.csdn.net/qq_43416206/article/details/142615939

相关文章

  • 数据库技术提升-MySQL数据库原理、设计与应用【1.5】
    第3章数据类型与约束学习目标掌握MySQL中常用数据类型的使用掌握MySQl.中常用的束的使用掌握MySQL中字符集的设置与处理        在数据库中,数据表用来组织和保存各种数据,它是由表结构和数据组成的。在设计表结构时,经常需要根据实际需求,选择合适的数据类型......
  • DC00020基于springboot新闻网站系统java web项目MySQL新闻管理系统
    1、项目功能演示DC00020基于springboot新闻网站系统javaweb项目MySQL2、项目功能描述  基于springboot+vue新闻网站包括用户和系统管理员两个角色。2.1用户功能1、用户登录、用户注册2、新闻信息:点赞、点踩、收藏、查看3、用户分享:点赞、点踩、收藏、查看、添加......
  • 数据库 - MySQL的事务
    目录前言一、事务的特性(一)原子性(二)一致性(三)隔离性(四)持久性二、事务的控制语句三、事务隔离级别(一)读未提交(二)读已提交(三)可重复读(四)可序列化四、使用场景五、事务操作(一)开启事务(二)提交事务(三)回滚事务(四)示例六、自动提交模式七、隐式提交八、提交前的保存点......
  • Springboot轮滑竞赛管理系统gsj4e--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,比赛信息,比赛报名,比赛分类,成绩公布,裁判,评审打分,比赛通知,作品提交,奖项信息,比赛奖励开题报告内容一、课题名称轮滑竞赛管理系统开发与应用二、研......
  • Springboot旅游攻略平台2de9n(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,旅游攻略,旅游景点,攻略分类,景点分类,问题分类,旅游问答开题报告内容一、项目背景随着旅游业的蓬勃发展,游客对于旅游信息的获取需求日益多样化、个性化......
  • Springboot路政管理信息系统v93sc(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,新闻公告,公路路产,路权维护,处罚信息,行驶信息,违规信息,违规类型开题报告内容一、课题名称路政管理信息系统设计与实现二、研究背景与意义随......
  • Springboot流浪动物救助管理系统y7274(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:用户,动物信息,申领信息,回访信息,动物分类,撤销申领开题报告内容一、选题背景与意义面对日益增长的流浪动物问题,社会对于高效、有序的救助管理需求日......
  • Springboot列车调度信息系统的设计与实现4guf9程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:旅客用户,列车调度员,列车信息,运输计划,行车调度图,票务信息开题报告内容一、研究背景与意义随着铁路交通的快速发展,列车调度作为铁路运输的核心环节......
  • Springboot乐享游乐场管理系统的设计与实现t4xv8--程序+源码+数据库+调试部署+开发环
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统功能:员工,游乐设施,设施采购,设施维修,设施损坏,商店类型,商店信息开题报告内容一、研究背景与意义随着休闲娱乐产业的快速发展,游乐场作为家庭娱乐的重要......
  • mysql 0928 DDL表操作
    `ALTERTABLEempaddnicknameVARCHAR(20)COMMENT'昵称';--添加字段nicknameDESCTABLEemp;--查看表ALTERTABLEempMODIFYnicknamevarchar(10);--修改数据类型ALTERTABLEempchangenicknameusernameVARCHAR(30);--修改字段nickname为usernameALT......