关系型数据库
关系型数据库模型是将复杂的数据结构用较为简单的二元关系(二维表)来表示,如图1-4所示。在该类型数据库中,对数据的操作基本上都建立在一个或多个表格上,我们可以采用结构化查询语言(SQL struct query language)对数据库进行操作。关系型数据库是目前主流的数据库技术,其中具有代表性的数据库管理系统有:Oracle、DB2、SQL Server、MySQL等。
SQL语言分为五个部分:
□ 数据查询语言(Data Query Language,DQL):DQL主要用于数据的查询,其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据。
□ 数据操作语言(Data Manipulation Language,DML):DML主要用于对数据库中的数据进行增加、修改和删除的操作,其主要包括:
1) INSERT:增加数据
2) UPDATE:修改数据
3) DELETE:删除数据
□ 数据定义语言(Data Definition Language,DDL):DDL主要用针对是数据库对象(数据库、表、索引、视图、触发器、存储过程、函数)进行创建、修改和删除操作。其主要包括:
1) CREATE:创建数据库对象
2) ALTER:修改数据库对象
3) DROP:删除数据库对象
□ 数据控制语言(Data Control Language,DCL):DCL用来授予或回收访问数据库的权限,其主要包括:
1) GRANT:授予用户某种权限
2) REVOKE:回收授予的某种权限
□ 事务控制语言(Transaction Control Language,TCL):TCL用于数据库的事务管理。其主要包括:
1) START TRANSACTION:开启事务
2) COMMIT:提交事务
3) ROLLBACK:回滚事务
4) SET TRANSACTION:设置事务的属性
MySQL具有以下几方面优点:
总体来说,MySQL是一款开源的、免费的、轻量级的关系型数据库,其具有体积小、速度快、成本低、开放源码等优点,其发展前景是无可限量的。
1. 开放源代码
MySQL最强大的优势之一在于它是一个开放源代码的数据库管理系统。开源的特点是给予了用户根据自己需要修改DBMS的自由。MySQL采用了General Public License,这意味着授予用户阅读、修改和优化源代码的权利,这样即使是免费版的MySQL的功能也足够强大,这也是为什么MySQL越来越受欢迎的主要原因。
2. 跨平台
MySQL可以在不同的操作系统下运行,简单地说,MySQL可以支持Windows系统、UNIX系统、Linux系统等多种操作系统平台。这意味着在一个操作系统中实现的应用程序可以很方便地移植到其他的操作系统下。
3. 轻量级
MySQL的核心程序完全采用多线程编程,这些线程都是轻量级的进程,它在灵活地为用户提供服务的同时,又不会占用过多的系统资源。因此MySQL能够更快速、高效的处理数据。
4. 成本低
MySQL分为社区版和企业版,社区版是完全免费的,而企业版是收费的。即使在开发中需要用到一些付费的附加功能,价格相对于昂贵的Oracle、DB2等也是有很大优势的。其实免费的社区版也支持多种数据类型和正规的SQL查询语言,能够对数据进行各种查询、增加、删除、修改等操作,所以一般情况下社区版就可以满足开发需求了,而对数据库可靠性要求比较高的企业可以选择企业版。
- 数据库表列类型
1.整数类型
整数类型 | 大小 | 表数范围(有符号) | 表数范围(无符号) | 作用 |
TINYINT | 1字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2字节 | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3字节 | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER | 4字节 | (-2147483648,2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8字节 | (-9233372036854775808,9223372036854775807) | (0,18446744073709551615) | 极大整数值 |
MySQL支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示
主键自增:不使用序列,通过auto_increment,要求是整数类型
2.浮点数类型
浮点数类型 | 大小 | 作用 |
FLOAT | 4字节 | 单精度浮点数值 |
DOUBLE | 8字节 | 双精度浮点数值 |
需要注意的是与整数类型不一样的是,浮点数类型的宽度不会自动扩充。 score double(4,1)
3.字符串类型
字符串类型 | 大小 | 描述 |
CHAR(M) | 0~255字符 | 允许长度0~M个字符的定长字符串 |
VARCHAR(M) | 0~65535字符 | 允许长度0~M个字符的变长字符串 |
BINARY(M) | 0~255字节 | 允许长度0~M个字节的定长二进制字符串 |
VARBINARY(M) | 0~65535字节 | 允许长度0~M个字节的变长二进制字符串 |
TINYBLOB | 0~255字节 | 二进制形式的短文本数据(长度为不超过255个字符) |
TINYTEXT | 0~255字节 | 短文本数据 |
BLOB | binary large object | 二进制形式的长文本数据 |
TEXT | 长文本数据 | |
MEDIUMBLOB | 0~16777215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0~16777215字节 | 中等长度文本数据 |
LOGNGBLOB | 0~4294967295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0~4294967295字节 | 极大文本数据 |
CHAR和VARCHAR类型相似,均用于存于较短的字符串,主要的不同之处在于存储方式。CHAR类型长度固定,VARCHAR类型的长度可变。
因为VARCHAR类型能够根据字符串的实际长度来动态改变所占字节的大小,所以在不能明确该字段具体需要多少字符时推荐使用VARCHAR类型,这样可以大大地节约磁盘空间、提高存储效率。
CHAR和VARCHAR表示的是字符的个数,而不是字节的个数
4.日期和时间类型
类型 | 格式 | 取值范围 | 0值 |
TIME | ‘HH:MM:SS’ | (‘-838:59:59’, ‘838:59:59’) | ‘00:00:00’ |
DATE | ‘YYYY-MM-DD’ | (‘1000-01-01’, ‘9999-12-31’) | ‘0000-00-00’ |
YEAR | YYYY | (1901, 2155), 0000 | 0000 |
DATETIME | ‘YYYY-MM-DD HH:MM:SS’ | (‘1000-01-01 00:00:00’, ‘9999-12-31 23:59:59’) | ‘0000-00-00 00:00:00’ |
TIMESTAMP 时间戳 | ‘YYYY-MM-DD HH:MM:SS’ | (‘1970-01-01 00:00:01’ UTC, ‘2038-01-19 03:14:07’ UTC) | ‘0000-00-00 00:00:00’ |
TIMESTEMP类型的数据指定方式与DATETIME基本相同,两者的不同之处在于以下几点:
(1) 数据的取值范围不同,TIMESTEMP类型的取值范围更小。
(2) 如果我们对TIMESTAMP类型的字段没有明确赋值,或是被赋与了NULL值,MySQL会自动将该字段赋值为系统当前的日期与时间。
(3) TIMESTEMP类型还可以使用CURRENT_TIMESTAMP来获取系统当前时间。
(4) TIMESTEMP类型有一个很大的特点,那就是时间是根据时区来显示的。例如,在东八区插入的TIMESTEMP数据为2017-07-11 16:43:25,在东七区显示时,时间部分就变成了15:43:25,在东九区显示时,时间部分就变成了17:43:25。
注意:查看MySQL支持的列类型 mysql> help data types |