sql 数据库基础讲解,sql 数据库数据类型分类说明

SQL全称Structured Query Language,中文名称是结构化查询语言。这套语言最早由IBM在上世纪70年代开发,后续完成标准化,现在市面上几乎所有关系型数据库都支持它。大家常听到的MySQL、PostgreSQL、SQL Server、Oracle底层都依托SQL实现,只是各家在标准基础上增加了独有的扩展语法,也就是俗称的数据库方言。准备学习SQL前,先要理解关系型数据库的数据存储逻辑。数据全部存放在数据表内,一张表由行、列构成,一行代表一条完整记录,一列对应一类字段信息。举个例子,用户表包含id、姓名、邮箱、注册时间几列,每一行记录对应单独一位用户。SQL本质就是用来和数据表交互的工具,编写指令,就能完成数据查询、修改、删除这类操作。

sql 数据库基础讲解,sql 数据库数据类型分类说明

SQL语句按功能划分为几大类。DDL管控数据库结构,CREATE、ALTER、DROP、TRUNCATE都归属这一类,建表、修改表结构、删除表都依靠这类语句。DML用来处理表内数据,常用语句是INSERT、UPDATE、DELETE,负责新增、修改、删除表里的数据。DQL本身属于DML分支,但SELECT查询使用频次极高,大家习惯单独拆分出来,查询语句写法灵活多变。DCL负责权限管控,GRANT授权、REVOKE回收权限,用来管理数据库用户权限。TCL用于事务控制,BEGIN、COMMIT、ROLLBACK、SAVEPOINT可以管控一组操作,选择全部提交执行或是整体回滚。日常开发接触最多的是DML和DQL,只有在建表阶段,才会用到DDL语句。

数据类型属于SQL里基础,但很容易被忽略的知识点。它限定一列可以存放的数据内容、占用存储空间、对比规则,还会影响索引创建。选错数据类型,轻量场景浪费存储空间,严重情况会出现查询异常、数据库性能暴跌。数值类型分成两大类别。整数类型包含TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,可存储数值范围从小到大依次递增。MySQL中INT占用4字节,BIGINT占用8字节。很多数据表选用INT作为自增主键,一旦预估数据总量可能突破21亿,就要提前替换成BIGINT。浮点类型包含FLOAT与DOUBLE,存储近似数值,适合科学计算场景。定点数DECIMAL、NUMERIC存储精确小数,金额相关字段必须选用这两种,不要使用FLOAT,否则对账过程容易出现几分钱的误差。

字符串类型分为定长、变长两类。CHAR属于定长类型,定义CHAR(10),无论实际写入多少字符,都会占用10字符空间,不足部分填充空格。VARCHAR是变长类型,定义VARCHAR(100),占用空间随实际存储内容变化,上限100字符。TEXT用来保存长段文本内容,BLOB存放二进制数据,例如图片、文件。字符集与排序规则不能忽视,utf8mb4可以存储emoji表情;MySQL自带的utf8并非完整UTF-8编码,无法保存四字节字符。排序规则会影响字符串对比、排序结果,utf8mb4_general_ci不区分大小写,utf8mb4_bin区分大小写。

日期时间有几种常用类型。DATE只记录日期,TIME只记录时间,DATETIME同时存储日期和时间。TIMESTAMP同样保存日期加时间,但是绑定时区,存储范围比DATETIME更小,2038年会出现溢出。YEAR专门保存年份。DATETIME和TIMESTAMP选型,看业务是否存在跨时区需求。服务器和用户分属不同时区场景,TIMESTAMP会自动完成时区转换,DATETIME不会。TIMESTAMP自带的2038溢出是硬性缺陷,长期运行的业务系统尽量避开。

SQL标准里BOOLEAN为布尔类型,MySQL没有原生布尔类型,依靠TINYINT(1)模拟布尔值,0代表假,1代表真。PostgreSQL自带独立BOOLEAN类型。枚举、集合是MySQL独有的类型,ENUM只能从预设值内选择单一选项,SET支持多选。使用便捷,但后期调整麻烦,新增选项要执行ALTER TABLE,大数据量表执行时锁表耗时很久。JSON类型近几年普及度持续提升,MySQL 5.7及更高版本支持JSON;PostgreSQL提供JSON、JSONB,JSONB支持索引,查询速度更快。空间类型用于存储地理坐标,POINT、LINESTRING、POLYGON这类,搭建地图、位置服务业务会用到。

不同数据库,类型名称和细节存在差别。Oracle字符串字段使用VARCHAR2,大文本用CLOB,数字统一采用NUMBER。SQL Server内置MONEY和UNIQUEIDENTIFIER,后者存储GUID。数据库迁移的时候,数据类型映射是难点,需要逐条核对。选择数据类型的原则简单,满足业务需求即可,不要盲目选用更大规格。不是所有场景都必须写VARCHAR(255),手机号固定11位,邮编6位,按照实际长度设定。同时预留少量余量,避免刚建好VARCHAR(10),后续需要存储12位字符,只能再次修改表结构。金额字段选用DECIMAL,时间字段参考时区,布尔根据数据库选TINYINT或BOOLEAN,长文本用TEXT,二进制文件存储使用BLOB。掌握这些基础要点,编写SQL的时候更有把握。

免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。