4.MySQL的基本常用数据类型
数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则。
数据类型限制存储在数据列表中的数据,如,数值数据类型列只能接受数值类型的数据。
设计表时,应特别重视所用的数据类型,使用错误的数据类型可能会严重的影响应用程序的功能和性能。
更改包含数据的列不是一件小事,且这样做可能导致数据丢失。
数据类型:整型,浮点型,字符串,日期等。
4.1 字符串数据类型
最常用的数据类型是串数据类型。存储串,如名字、地址、电话号码、邮政编码等。
不论何种形式的串数据类型,串值都必须括在引号内。
有两种基本的串类型,定长串 和 变长串。
- 定长串 CHAR
- 接受长度固定的字符串,长度是在创建表时指定的。
定长列不允许存储多于指定长度的数据。 - 指定长度后,就会分配固定的存储空间,用于存放数据。
- char(7) 不论实际插入多少字符,都会占用7个字符位置。
- 变长串 VARCHAR
- 存储可变长度的字符串
- varchar(7) 若实际插入4个字符串,则只占4个字符的位置,当然插入的数据长度不能超过7个字符串。
MySQL处理定长列远比变长列快得多。
TEXT 最大长度为64k的变长文本
ENUM 最大64k个串组成的一个预定义 集合 的某个串;
LONGTEXT 与TEXT 相同,但最大长度为4GB;
MEDIUMTEXT 与TEXT 相同,但最大长度为16k;
…
4.2 数值类型
数值数据类型 存储数值。MySQL支持多种数值数据类型,
每种存储的数值具有不同的取值范围,支持的取值范围越大,所需存储空间越多。
数值不应在括号内!
- INT 整数值
支持 -2147483648~2147483647(若是UNSIGNED,支持 0 ~ 4294967295)的值。 - TINYINT 整数值
支持 -128 ~ 127(若是UNSIGNED,支持0~255)的值。 - FLOAT 单精度浮点值
- DOUBLE 双精度浮点值
- DECIMAL (或DEC) 精度可变的浮点值
…
-decimal(5,2) 表示数值总共5位,小数占2位.
-tinyint 1字节(8位) 0 ~ 255, -128 ~ 127.
-int 4字节
-float
MySQL中没有专门存储货币的数据类型,一般使用decimal(8,2)
有符号和无符号
所有数值类型(除BIT和BOOLEAN)有无符号都可以。
4.3 日期和时间类型
MySQL使用专门的数据类型来存储日期和时间值
- DATE 表示1000-01-01~9999-12-31的日期,格式为YYYY-MM-DD;
- TIME 格式为HH:MM:SS
- DATETIME DATE 和 TIME 的组合
- YEAR 用2位数字表示,范围是70(1970年)~69(2069年);
用4位数字表示,范围是1901年~2155年。
4.4 二进制数据类型
二进制数据类型可存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档等。
5.MySQL的数据类型约束,运算符和主键
5.1 表的字段约束
- unsigned 无符号(数值类型使用,表正数)
- 字段类型后面加括号限制宽度
–char(5),varchar(7)在字符类型后面加限制表示字符串的长度;
–int(4)没有意义,默认无符号的int为int(11),有符号的为int(10)
–int(4) unsigned zerofill,只有当给int类型设置前导0(zerofill)时,设置int的宽度才有意义 - not null 不能为空,在操作数据库时若输入字段的数据为NULL,就会报错
- default 设置默认值
- primary key 主键不能为空且唯一,一般和自动递增配合使用。
- auto_increment 定义列为自增属性,一般用于主键,数值会自动加1。
- unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但会降低插入和更新速度
5.2 MySQL的运算符
- 算术运算符:+ — * / %
- 比较运算符:= > < >= <= !=
- 数据库特有的比较:in,not in, is null,is not null, like,between,and
- 逻辑运算符:and , or , not
–select * from users where age >=22 and age <=30;
–select * from users where age in(22,34);
–select * from users where age=22 or age=33; - like 支持特殊符号 % 和 _ (用于模糊搜索)
- % 表示 任意数量的任意字符;
- _ 表示 任意一位字符
select * from users where name like ‘_san’;
5.3 MySQL的主键
关系模型:主键、外键、索引
- 表中每一行都应该有 可以唯一标识自己的一列,用于记录两条信息不能重复,任意两行都不具有相同的主键值。
- 应该总是定义主键,虽并不总是需要主键,但大多数据库设计人员都应保证他们创建的每个表具有一个主键,以便于以后数据的操作和管理。
要求
- 记录一旦插入到表中,主键最好不要修改
- 不允许null
- 不在主键列中使用可能会更改的值
–如,若使用一个名字作为主键以标示某个供应商,当该供应商合并更改名字时,必须更改这个主键 - 自增整数类型:数据库会在插入数据时,自动为每一条记录分配一个自增整数,如此可不用担心主键重复,不用自己预先生成主键。
- 可以使用多个列作为联合