数据库基础01——ANSI SQL数据类型

数据库基础01——ANSI SQL数据类型

首先总结下ANSI SQL支持的基本数据类型

主要有三:

  • 字符串类型
  • 数值类型
  • 日期和时间类型
  • 其他

1、字符串类型

1.1定长字符串
类型 描述
CHARACTER(n) n定义了字段能够保存的最多字符串数量。使用定长字符串,通常会用空格来填充数量不足的字。所以,不要使用定长数据类型来保存长度不定的数据,会导致空间浪费
1.2 变长字符串
类型 描述
CHARACTER VARYING(n) ANSI 标准的sql,一般用以下几个
VARCHAR(n) Sql server 和MySql ; 字符/字符串。可变长度。最大长度 n。
VARINARY(n) Oracle; 字符/字符串。 可变长度。最大长度 n。
VARCHAR2(n) Oracle; 字符/字符串。可变长度。最大长度 n。
1.3 定长、变长串,用于存二进制数据
类型 描述
BINARY(n) 固定长度为 n 字节,其中 n 值从 1 到 8,000 ,存储空间为 n 字节
VARBINARY( n|max) 可变长度,n 的取值范围为 1 至 8,000,
max 是指最大存储空间是 2^31-1 个字节,即最大4GB;
注意都是字节 n:在表列定义或变量声明语句中没有指定 n,则默认长度为 1;
在CAST 函数中没有指定 n,则默认长度为 30;

​ 这两种表示存储的的都是字节,这种数据类型通常用来保存数字式数据,例如图像文件。

1.3 大对象数据

常见的有:BLOB 和 TEXT

类型 描述
BLOB BLOB是二进制大对象,它的数据是很长的二进制字符串(字节串),BLOB适合在数据库里存储二进制媒体文件,比如图像和mp3
TEXT TEXT数据类型是一种字符串类型,通常用于在数据库里保存大字符集,可以理解为是一种很大的VARCHAR, 比如博客站点的HTML输入

2、数值类型

SQL数值的标准有:

BIT(n)

BIT VARYING(n)

DECIMAL(p,s)

INTEGER

SMALLINT

BIGINT

FLOAT(p,s)

DOUBLE PRECISION(p,s)

REAL(s)

一般常用 DECIMAL(p,s) p表示字段的最大长度,s表示小数点后面的位数

2.1 小数类型
类型 描述
DECIMAL(p,s) p表示有效位数(总体长度),s表示标度。 小数点不算做一个字符
超过定义的位数会被四舍五入,比如 DECIMAL(4,2)表示的字符, 12.449 就会被四舍五入为12.45
2.2 整数类型
类型 描述
INTEGER§ 整数值,精度为p
SMALLINT 整数值,精度为5
BIGINT 整数值,精度为19
INTEGER 整数值,精度为10
2.3 浮点数

​ 浮点数是有效位数和标度都可变并且没有限制的小数数值 。

类型 描述
REAL 单精度浮点数值
DOUBLE PRECISION 双精度浮点数值
FLOAT 近似数值,尾数精度 16。
FLOAT(n) 近似数值,尾数精度为n

3、日期和时间类型

​ 标准SQL 支持 DATETIME数据类型,包括

DATE 、 TIME 、DATETIME、 TIMESTAMP

​ DATETIME 元素包括:

YEAR、 MONTH、 DAY 、HOUR 、MINUTE 、SEOND

类型 描述
DATE 存储年、月、日的值。
TIME 存储小时、分、秒的值。
DATETIME 存储年、月、日、小时、分、秒的值。
TIMESTAMP 存储年、月、日、小时、分、秒的值。

4、其他类型概念

4.1、直义字符串

​ 直义字符串就是一系列字符, 比如姓名或电话号码, 这是由用户或程序明确指定的。 直义字符串包含
的数据与前面介绍的数据类型具有一样的属性, 但字符串的值是已知的。 列本身的值通常是不能确定的,
因为每一列通常包含了字段在全部记录里的不同值。

比如我们查询的时候 ,where name=‘zhangsan’ 这个‘zhangsan’就是一个直义字符串,知道有这么回事就行

4.2、Null 数据类型

NULL值表示没有值。 NULL值在SQL里有广泛的应用, 包括表的创建、 查询的搜索
条件, 甚至是在直义字符串里。

4.3、布尔值

布尔值的取值范围是TRUE、 FALSE和NULL, 用于进行数据比较。 举例来说, 在查询中设置条件时,
每个条件都会被求值, 得到TRUE、 FALSE或NULL。 如果查询中所有条件的值都是TRUE, 数据就会被返
回; 如果某个条件的值是FALSE或NULL, 数据就不会返回。

注意;

大多数数据库实现并没有一个严格意义上的BOOLEAN类型, 而是代之以各自不同的实现方法。
MySQL拥有BOOLEAN类型, 但实质上与其现有的TINYINT类型相同。 Oracle倾向于让用户使用一个
CHAR(1)值来代替布尔值, 而SQL Server则使用BIT来代替。

4.4、自定义类型

语句CREATE TYPE用于创建自定义类型。

举例来说, 在MySQL和Oracle中, 可以像下面这样创建一个类型:

CREATE TYPE PERSON OBJECT
(NAME	VARCHAR(30),
 SSH	VARCHAR(9));

然后就可以像这样引用自定义类型:

CREATE TABLE EMP_PAY
(EMPLOYEE	PERSON,
 SALARY	DECIMAL(10,2),
 hIRE_DATE DATE);

4.5 域

域是能够被使用的有效数据类型的集合。 域与数据相关联, 从而只接受特定的数据。 在域创建之后,
我们可以向域添加约束。 约束与数据类型共同发挥作用, 从而进一步限制字段能够接受的数据。 域的使用
类似于自定义类型。

像这样可以创建域:

CREATE DOMAIN MONEY_D NUMBER(8,2)

像下面这样为域添加约束

ALTER DOMAIN MONEY_D 
ADD CONSTRAINT MONEY_CON1
CHECK (VALUE >5)

然后像下面这样引用域

CREATE TABLE EMP_PAY
(EMP_ID     NUMBER(9),
EMP_NAME	VARCHAR2(30),
PAY_RATE 	MONEY_D)

猜你喜欢

转载自blog.csdn.net/u011138190/article/details/84658107