数据类型
- 串数据类型
这是最常用的数据类型,有两种基本的串类型:分别为定长串和不定长串。定长串结束长度固定的字符,其长度是创建表是指定的,不允许多于指定的字符数据,它们分配的存储空间与指定的一样多,CHAR属于定长串类型。变长串存储长度可变的文本,有些变长数据类型具有最大的定长,而有些则是完全变长的,不管哪种只有指定的数据得到保存(不会添加额外的空格保存),TEXT属于变长串类型。变长数据类型灵活,定长数据类型高效,Mysql处理定长数据类型比变长列快很多,Mysql不允许对变长列(或一个列的可变部分)进行索引,这会极大影响性能。具体类型描述如下表:
| 数据类型 | 说明 |
|---|---|
| CHAR | 1~255个字符的定长串,它的长度必须在创建时指定,否则MySQL假定为CHAR(1) |
| VARCHAR | 可变长度,最多不超过255字节,如在创建时指定VARCHAR(n),则可存储0~n个字符的变长串 |
| TINYTEXT | 同TEXT,最大长度为255字节 |
| MEDUIMTEXT | 同TEXT,最大长度为16K |
| TEXT | 最大长度为64K的变长文本 |
| LONGTEXT | 同Text,最大长度为4GB(纯文本,一般不会到4G) |
| ENUM | 接受最多64K个串组成的预定义集合的某个串 |
| SET | 接受最多64K个串组成的预定义集合的零个或多个串 |
- 数值类型
存储数值,每种类型具有不同的存储范围,支持取值范围越大,所需存储空间越多。所有数值类型(除BIT和Boolean外)都可以有符号或无符号,有符号数据列可存储正或负的数值,默认情况为有符号。
| 类型说明 | 存储需求 | 取值范围 |
|---|---|---|
| tinyint[(m)] | 1字节 | 有符号值:-128 到127(- 2^7 到2^7 – 1) 无符号值:0到255(0 到2^8 – 1) |
| smallint[(m)] | 2字节 | 有符号值:-32768 到32767(- 2^15 到2^15 – 1) 无符号值:0到65535(0 到21 6 – 1) |
| mediumint[(m)] | 3字节 | 有符号值:-8388608 到8388607(- 2^23 到2^23 – 1 ) 无符号值:0到16777215(0 到2^24 – 1) |
| int[(m)] | 4字节 | 有符号值:-2147683648 到2147683647(- 2^31 到2^31- 1) 无符号值:0到4294967295(0 到2^32 – 1) |
| bigint[(m)] | 8字节 | 有符号值:-9223372036854775808 到9223373036854775807(- 263-1) 无符号值:0到18446744073709551615(0到2^64 – 1) |
| float[(m, d)] | 4字节 | 最小非零值:±1.175494351e – 38 |
| double[(m, d)] | 8字节 | 最小非零值:±2.2250738585072014e – 308 |
| decimal (m, d) | m字节(mysql < 3.23),m+2字节(mysql > 3.23 ) | 可变;其值的范围依赖于m 和d |
- 时间类型
MySQl中有多种表示日期和时间的数据类型。其中YEAR表示年份,DATE表示日期,TIME表示时间,DATETIME和TIMESTAMP表示日期和实践。具体如下表:
| 数据类型 | 存储字节数 | 取值范围 |
|---|---|---|
| DATE | 4 | 1000-01-01——9999-12-31 |
| TIME | 3 | -838:59:59——838:59:59 |
| DATETIME | 8 | 1000-01-01 00:00:00——9999-12-31 23:59:59 |
| TIMESTAMP | 4 | 19700101080001——20380119111407 |
| YEAR | 1 | 1901——2155 |
- 二进制类型
二进制类型可存储任何数据,如文字、图像、多媒体等。具体类型描述如下:
| 数据类型 | 说明 |
|---|---|
| TITYBLOB | 最大长度为255字节 |
| BLOB | 最大长度为64KB |
| MEDIUMBLOB | 最大长度为16MB |
| LONGBLOB | 最大长度为4GB |
表约束
- 默认值约束
为数据表中的字段指定默认值 , 添加记录是如果没有给这个字段赋值即为默认值 ,
BLOB,TEXT类型不支持默认值约束

# 创建表时为字段添加默认值# default '默认值' , 设置默认值的关键词mysql> create table `my_default`(-> `name` char(10),-> `age` int(10) default 0-> );# 删除默认值# alter table `表名` modify `字段名` 字段类型 unsigned;$ alter table `my_default` modify `age` int unsigned;# 添加默认约束# alter table `表名` modify `字段名` 字段类型 unsigned default 默认值;$ alter table `my_default` modify `age` int unsigned default 0;
- 非空约束
字段值不能为空

# 创建数据表时设置非空并设置默认值mysql> create table `my_not_null` (-> `n1` int(10),-> `n2` int(10) not null,-> `n3` int(10) not null default 0-> );
- 唯一约束
保证字段中的值不能重复出现,但允许存在多个null
唯一约束有两种方式定义
- 列级约束
语法格式字段名 数据类型 UNIQUE;

表级约束
语法格式UNIQUE (字段名1,字段名2);

# 列级约束mysql> CREATE TABLE my_unique_0(-> `id` int unsigned unique,-> `username` varchar(10) unique-> );#表级约束mysql> CREATE TABLE my_unique_3(-> `id` int(10) unsigned,-> `username` varchar(10),-> unique(id),-> unique(username)-> );
添加约束
给字段添加唯一性约束,如果已经存在相同值会添加失败
# alter table `表名` add unique(字段名);$ alter table `good` add unique(user);
- 删除约束
# alter table `表名` drop index `字段名`;$ alter table `good` drop index `user`;
- 主键约束
表中的唯一标识
主键创建也分为列级和表级
- 列级约束
语法格式字段名 数据类型 PRIMARY KEY 表级约束
语法格式字段名1,字段名2mysql> create table my_primary(-> `id` int unsigned primary key,-> `username` char(10)-> );
删除主键
# alter table `表名` drop primary key;$ alter table my_primary drop primary key;
添加主键
# alter table `表名` add primary key(字段名);$ alter table `my_primary` add primary key(id);
自动递增
自动生成主键值,防止主键冲突
语法格式 字段名 字段类型 AUTO_INCREMENT
