SQL(Structured Query Language) 又称结构化查询语言,是一种在关系型数据库中定义和查询及操纵数据的标准语言,是用户和数据库之间进行交流的接口,正在像Oracle、MySQL、SQL Server等几乎所有的数据库实现了该接口,都支持SQL的查询。SQL语言结构简洁,功能强大,简单易学,所以自从推出以来,SQL语言得到了广泛的应用。
SQL 语言由下面5个子语言组成:
数据定义语言(DDL-Data Definition Language);
数据查询语言(SELETE-Query Statements);
数据操纵语言(DML-Datat Manipulation Language);
事务控制语言(TC-Transaction Control Statements);
数据控制语言(DCL-Datat Control Language);
数据类型
Oracle和MySQL都是两种重要的数据为,下面从它们各自的基本数据类型开始讲起。
数据类型 | 数据类型 | 说明 | |
Oracle | MySQL | ||
数值类型 | NUMBER(p,s) | 存储数值数据类型,如浮点型、整数型、分数、双精度等。其中p为精度,表示数字的总位数(1 <= p <=38) ; s为范围,表示小数点右边的位数,它在-84至127之间。默认38位 | |
TINYINT | 微整型,1字节 | ||
SMALLINT | 小整型,2字节 | ||
MEDIUMINT | 中整型,3字节 | ||
INT或INTEGER | 整数数据类型 | 整型,4字节 | |
BIGINT | 大整型,8字节 | ||
FLOAT | 浮点数数据类型 | 单精度浮点数值,4字节 | |
DOUBLE | 双精度浮点数值,8字节 | ||
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | ||
字符串类型 | CHAR(n) | n=1to2000字节,定长字符串,n字节长,如果不指定长度,缺省为1个字节长(一个汉字为2字节) | 定长字符串,0-255字节 |
NCHAR(n) | NLS(national language support , 国际语言支持)的数据类型仅可以存储由数据库 NLS 字符集定义的 Unicode 字符集。Oracle最多可以存储2000Byte | ||
VARCHAR(n) | 最多可以以可变长度来存储4000B,因此不需要空格来作补充。 | 变长字符串,0-255字节 | |
NVARCHAR(n) | n=1to4000字节,最多可以以可变长度来存储4000B,因此不需要空格来作补充。 | NLS(national language support , 国际语言支持)的数据类型仅可以存储由数据库 NLS 字符集定义的 Unicode 字符集。 | |
VARCHAR2(n) | VARCHAR2 比 VARCHAR 更适合使用,由于兼容性的原因,所以仍然在 Oracle 数据库中保留着 VARCHAR 。 | ||
NVARCHAR2 | NLS 的数据类型与 VARCHAR2 数据类型等价。这个数据类型最多可存储4000B 。 | ||
CLOB | 存储大量的单字节字符数据和多字节字符数据。存储的最大容量为4G | ||
NCLOB | 存储可变长度的Unicode字符集字符数据,存储的最大容量为4G | ||
BLOB | 存储较大的二进制对象。例:图形,视频,音频等 | ||
BFILE | bfile:文件定位器;指向位于服务器文件系统是二进制文件(存储一个文件路径) | ||
LONG | 存储可变长度的字符数据,最多存储2GB 。 | ||
RAW | 存储基于字节的数据。最多存储2000个字节,使用需指定大小。raw数据类型可以建立索引。 | ||
LONG RAW | 存储可变长度的二进制数据。最多能存储2GB。不能索引。 | ||
TINYBLOB | 不超过 255 个字符的二进制字符串,0-255字节 | ||
TINYTEXT | 短文本字符串,0-255字节 | ||
BLOB | 二进制形式的长文本数据,0-65 535字节 | ||
TEXT | 长文本数据,0-65 535字节 | ||
MEDIUMBLOB | 二进制形式的中等长度文本数据 | ||
MEDIUMTEXT | 中等长度文本数据,0-16 777 215字节 | ||
LOGNGBLOB | 二进制形式的极大文本数据,0-4 294 967 295字节 | ||
LONGTEXT | 极大文本数据,0-4 294 967 295字节 | ||
日期和时间 | DATE | 存储表的日期和时间数据,使用7个字节固定长度,每个字节分别存储世纪,年,月,日,小时,分和秒;值从公元前4712年1月1日到公元9999年12月31日。 Oracle中的sysdate函数功能是返回当前的日期和时间。 | 日期值,YYYY-MM-DD |
TIMESTAMP | 存储日期的年,月,日以及时间的小时,分和秒值。其中秒值精确到小数点后6位,同时包含时区信息。 Oracle中的systimestamp函数功能是返回当前日期,时间和时区。 | ||
TIME | 时间值或持续时间,HH:MM:SS | ||
YEAR | 年份值,YYYY | ||
DATETIME | 混合日期和时间,YYYY-MM-DD HH:MM:SS | ||
TIMESTAMP | 混合日期和时间值,时间戳,YYYYMMDD HHMMSS | ||
复合类型 | ENUM | 一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 0 或者一个空字符串表示。 | |
SET | 容器类型,一个 SET 类型最多可以包含 64 项元素,且不可能包含两个相同的元素 |