回顾数据库系统组成。
数据表是一个数据库里面用来存储数据的基本单元,是由表结构、表数据组成。
SQL语句不区分大小写,但是表就是一个文件名,windows不区分大小写,linux区分大小写,所以在命名时候,需要注意:
1、一定要有意义(英文或英文组合和多个单词的缩写)
2、 自己定义的名称最好都是小写
3、 Sql语句关键字最好都大写
表的作用:存放相同规则的数据
表是有由列和数据组成的。每行数据称作一个条目,每一列称作一个字段
CREATE TABLE [IF NOT EXISTS] 表名称(
字段名1 列类型 [属性] [索引],
字段名2 列类型 [属性] [索引],
......
字段名n 列类型 [属性] [索引]
) [表类型] [表字符集类型];
表名称和字段名 需要用户自定义名称;
SQL语句不区分大小写,但是表就是一个文件名,windows不区分大小写,linux区分大小写,所以在命名时候,需要注意:
建表过程中,每个字段需要提供类型,属性,约束等描述信息描述和规范这个字段。
类型
类型就用来描述字段所存储的什么类型的数据,在SQL中,主要有以下几种数据类型:
标注1:UNSIGNED 代表有无符号
ZEROFILL代表:
1、 插入数据时,当该字段的值的长度小于定义的长度时,会在该值的前面补上相应的0
2.、zerofill默认为int(10)
3.、当使用zerofill 时,默认会自动加unsigned(无符号)属性,使用unsigned属性后,数值范围是原值的2倍,例如,有符号为-128+127,无符号为0256。
标注2:(M)代表现实的位数
TINYINT[(M)] [UNSIGNED] [ZEROFILL]
SMALLINT[(M)] [UNSIGNED] [ZEROFILL]
MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL]
INT[(M)] [UNSIGNED] [ZEROFILL]
INTEGER[(M)] [UNSIGNED] [ZEROFILL]
BIGINT[(M)] [UNSIGNED] [ZEROFILL]
总结1:
占空间大小:1,2,3,4,8字节分别对应:
*TINYINT 非常小
*SMALLINT 较小
*MEDIUINT 中等
*INT 标准
*BIGINT 大整形
FLOAT[(M,D)] [ZEROFILL]
DOUBLE[(M,D)] [ZEROFILL]
DOUBLE PRECISION[(M,D)] [ZEROFILL]
REAL[(M,D)] [ZEROFILL]
DECIMAL[(M[,D])] [ZEROFILL]
NUMERIC(M,D) [ZEROFILL]
总结:float 4字节。 double 8 字节
M:整个数值的长度 D:小数的长度
例:FLOAT[(M,D)][ZEROFILL]
create table t4(float(4,2)); //-99.99 - 99.99
定点数(本质上是按照字符串来进行存储),没有四舍五入,对于精度要求高的,推荐使用
DECIMAL(M,D) M+2字节
浮点数相对于定点数优点是在长度一定的情况下,浮点数表示范围更宽,但其存在误差问题,对于货币等精度敏感的数据,应该使用定点数表示,编程过程中尤其注意浮点数误差问题。
另外,由于浮点数存在误差,所以在项目里面尽可能少的不要用浮点数做=进行比较判断。
mysql> CREATE TABLE test (c1 float(10,2),c2 decimal(10,2));
Query OK, 0 rows affected (0.29 sec)
mysql> insert into test values(131072.32,131072.32);
Query OK, 1 row affected (0.07 sec)
mysql> select * from test;
+-----------+-----------+
| c1 | c2 |
+-----------+-----------+
| 131072.31 | 131072.32 |
+-----------+-----------+
1 row in set (0.00 sec)
举例:
mysql> create table tab10(
one date,two time,three datetime,
four timestamp,five year
);
Mysql> insert into tab10(one) values(“20101201”); //2010-12-01 2010/12/01
Mysql> insert into tab10(one,two,three) values(“20101201”,‘13:12:11’,’11-02-09 11:11:11’);
是最基本的类型,可以表示任何一种类型的值,“mysql” ‘mysql’都是可以的;
CHAR(M) [BINARY]
一个定长字符串,当存储时,总是是用空格填满右边到指定的长度。M的范围是1 ~ 255个字符。
VARCHAR(M) [BINARY]
一个变长字符串
TINYBLOB & TINYTEXT
一个BLOB或TEXT列,最大长度为255(2^8-1)个字符。。
BLOB & TEXT
一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符。。
MEDIUMBLOB & MEDIUMTEXT
一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符。
LONGBLOB & LONGTEXT
一个BLOB或TEXT列,最大长度为4294967295(2^32-1)个字符。
blob代表字节流,用来保存二进制数据,照片、电影、压缩包。一般我们并不在数据库中直接存放多媒体数据,而是将资源存在服务器,数据库中只保存存储的路径即可。
ENUM(‘value1’,‘value2’,…)
枚举。一个仅有一个值的字符串对象,这个值式选自与值列表’value1’、‘value2’, …,或NULL。一个ENUM最多能有65535不同的值。
mysql> create table tab9(one enum(‘a’,’b’,’c’,’d’),two set(‘a’,’b’,’c’,’d’));
mysql> insert into tab9 values(‘a’,’b’); //OK
mysql> insert into tab9 values(‘c’,’c,d’); //OK
SET(‘value1’,‘value2’,…)
一个集合。能有零个或多个值的一个字符串对象,其中每一个必须从值列表’value1’, ‘value2’, …选出。一个SET最多能有64个成员。
枚举一次只能使用一个枚举元素值,而集合可以一次使用多个值,中间使用”,”隔开即可。