SQL控制语句分类
使用SQL语句,可以完成在数据库中检索信息、更新数据库信息、改变数据库的结构,标准SQL语句的五种类型
- 查询语句, 也叫数据查询语言,通常由select完成,查询数据库信息
- DML语句,也叫数据操作语言,主要由insert,update,delete完成,修改数据库信息
- DDL语句,也叫数据定义语句,主要由create,alter,drop和truncate(性能优于delete)四个关键字完成。
- DCL语句,也叫数据控制语句,主要由grant和revoke两个关键字完成,其中DCL语句用于为数据库用户授权或者收回指定用户权限,通常无须程序员操作。
- 事务控制语句,主要由commit,rollback和savepoint三个关键字完成
需要注意的是,SQL语句不区分大小写
SQL标识符
SQL中的标识符可用于定义表名,列名,变量,规范如下:
- 标识符通常必须以字母开头
- 标识符包括字母,数字和特殊字符(# _ $)
- 同一个外模式的下的对象不应该同名。
- 不要使用当前数据库系统的关键字、保留字
通常建议使用多个单词连缀而成,单词之间以下划线分隔。
MySQL术语
在正式理解前先来熟悉一下MySQL中的一些术语,然后操作的时候会有较好的理解:
- 数据库: 数据库是一些关联表的集合
- 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格
- 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据
- 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据
- 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性
- 数据字典:就是系统表,存放数据库相关信息的表,此部分程序员只可查看不可操作,由系统维护
- 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据
- 外键:外键用于关联两个表
- 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
- 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
- 约束:constraint:执行数据校验的规则,用于保证数据完整性的规则
- 视图:view:一个或者多个数据表里的数据的逻辑显示。视图并不存储数据只是显示数据
- 函数:function:用于完成一次特定的计算,具有一个返回值。
- 存储过程:proceduren:用于完成一次完整的业务处理,没有返回值,但可通过传参将多个值传给调用环境
- 触发器:trigger:相当于一个时间监听器,当数据库发生特定事件后,触发器被触发,完成相应处理。
- 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
其中函数,存储过程,触发器不常用于JDBC编程。
MySQL数据类型
分为数值类型、日期和时间类型、字符串类型
数值类型
这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。
- 整数类型:tinyint(1字节),smallint(2字节),mediumint(3字节),int(interger)(4字节),bigint(8字节)。
- 浮点类型:float/double 单精度/双精度浮点类型。
- Decimal(dec):精确小数类型,相对于float和double不会产生精度丢失的问题。
关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围
日期和时间类型
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
- DATA:日期类型,不能保存时间。把java.util.Date对象保存进date列时,时间部分会丢失。
- TIME:时间类型,不能保存日期。把java.util.Date对象保存进time列时,日期部分会丢失。
- YEAR:年类型,仅仅保存时间的年份。
- DATATIME:日期时间类型。
- TIMESTAMP:时间戳类型,会自动记下数据库计数器记录的值。
TIMESTAMP类型有专有的自动更新特性
字符串类型
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。以下是使用方式和范围:
- CHAR:定长字符串类型。
- VARCHAR:可变长度字符串类型。
- BINARY:定长二进制字符串类型,以二进制形式保存字符串。
- VARBINARY:可变长度二进制字符串类型,以二进制形式保存字符串。
- 二进制大对象:tinyblob(1字节),blob(2字节),mediumblob(3字节),longblob(4字节),用于存储图片,音乐等二进制数据,分别可存储255B/64KB/16MB/4GB
- 文本对象:tinytext(1字节),text(2字节),mediumtext(3字节),longtext(4字节),可用于存储超长长度的字符串,分别可存储:255B/64KB/16MB/4GB大小。
- enum(‘value1’,‘value2’……):枚举类型,该列的值只能是enum后括号里多个值的其中之一。
- set(‘value1’,‘value2’……):集合类型**,该列的值可以是set后括号里多个值的其中之一。
BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值