数据类型
二、MySQL支持的数据类型
数值类型、日期类型、字符串类型
1.数值类型
1)整数类型
tinyint、smallint、mediumint、int和bigint
2)zerofill属性
配合int(数字)来用,表示显示的时候一个显示宽度
3)主键
主键可以唯一标识某条记录的一个字段或者多个字段
create table 表名(字段名称 类型 primary key,....);
create table 表名(字段名称1 类型,....,primary key(字段名称1));
删除:
alter table 表名 drop primary key;
注意:如果字段具有auto_increment属性必须先删除auto_increment属性
4)小数的表示
①浮点数
单精度(float):单精度的浮点数精确到大约7位小数位(整数部分加上小数部分的位数)
双精度精度(double):双精度的浮点数精确到大约15位小数位(整数部分加上小数部分的位数)
②定点数
decimal(7,2)
2.日期类型
DATETIME是常用的日期类型
create table t1(dt datetime);
insert into t1 values(now());
3.字符串类型
CHAR(M) M为0~255之间的整数,表示可以存M个字符(不管是中文还是英文字符总共个数是M个就OK)
VARCHAR(M) M为0~65535之间的整数,表示可以存M个字符,具体M最大多大和字符集有密切关系
注意varchar列的最大的存储空间是65,532字节,如果是英文字符集(一个英文字符占1个字节)就是可以放65532个英文字符
自己在实际开发的过程中M设置的值,应该从自己的实际需求去考虑,而不是最大能存多少个字符,因为超过最大能设定的字符数会自动报错或者警告!
TINYTEXT 允许长度0~255字符
TEXT 允许长度0~65535字符
MEDIUMTEXT 允许长度0~16,777,215字符
LONGTEXT 允许长度0~4,294,967,295字符
注意点:
char与varchar列的区别
char类型的字符所占的存储空间是固定,不管你用的时候存了几个字符,它所占的空间都是你当初设定的字符空间
比如char(255) 哪怕你存的只是1个a,那么它也是站255个字符长度的空间!
varchar列所占的存储空间是可变的,根据存入的字符长度来确定实际占多少的空间!
varchar(255) 实际所占的空间就是实际字符的长度+1个字节!
varchar(超过255) 实际所占的空间就是实际字符的长度+2个字节!
更节省空间!
在检索时,char列删除尾部的空格,而varchar则保留这些空格。
选择:由于char是固定长度,所以它的处理速度比varchar快,但是缺点是浪费存储空间。所以对于那些长度变化不大的数据可以选择此列
enum类型
create table t1(flag enum('a','b','c','d'));
insert into t1 values('a'),('a'),('f');
set类型
里面可以包含0~64个成员
create table t1(flag set('a','b','c','d'));
insert into t1 values('a,b'),('a,d,a');
字段属性
1.UNSIGNED 无符号
2.auto_increment
自增(默认从1开始),用于整数类型和带索引的字段,比如:配合主键使用(其他类型的索引我们以后再说)
3.主键:
主键可以唯一标识某条记录的一个字段或者多个字段
一个字段设为主键
多个字段组合设为主键
注意点:
1)主键最好不要设置在某个与实际信息相关的字段上,主键的作用应该明确且单一
2)主键最好设置在整数类型的字段上面(处理或查询起来效率较高)
3)主键必须不同,并且不能为null
4)既然主键必须不同所以我们会配合 auto_increment属性
5)一个表只能有一个主键,最好只设置在一个字段上
6)根据主键的值来查询记录时可以获得极快的速度(因为设置了主键的字段已经创建了索引)!
设置方法:
在创建表的时候
primary key(字段)
primary key(字段1,字段2)
也可以直接写在需要创建主键的字段后面
如果忘了设置可以
alter table 表名 add primary key(字段名);
删除:
alter table 表名 drop primary key;
注意:如果字段具有auto_increment属性必须先删除auto_increment属性
4.规定字段的值是否可以为null not null即不可以为null,该属性也可用于其他类型的字段
5.设置默认值 default 值,该属性也可用于其他类型的字段