unsigned
整型的每一种都分无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。
tinyint
decimal(P,D)
MySQL DECIMAL
数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL
数据类型用于保留准确精确度的列,例如会计系统中的货币数据。
P
是表示有效数字数的精度。P
范围为1〜65
。D
是表示小数点后的位数。D
的范围是0
~30
。MySQL要求D
小于或等于(<=
)P
。
enum
ENUM是枚举类型,它虽然只能保存一个值,却能够处理多达65535个预定义的值。下面是我写的一个mysql语句
CREATE TABLE student( id INT(11) PRIMARY key auto_increment, name VARCHAR(10) not null, sex ENUM('boy','girl','secret') DEFAULT 'secret' )ENGINE=INNODB
如果sex列中插入了除bor,girl,secret之外的其它字符,则视为空字符串
1、每个枚举值都有一个索引:
- 列出的元素被分配从1开始的索引值。
- 空字符串作为错误值的索引值为0。可以使用select语句找出那些被指定无效枚举值的数据行。
SELECT * FROM tbl_name WHERE enum_col=0;
- NULL的索引为NULL。
- 这里的索引只是指出枚举表里该元素的位置,和表索引不同。
2、最多可以有65535个不同的元素值(实际限制小于3000)。
3、枚举值不能是0或空字符串(虽然存在特殊情况)
4、enum在底层的存储方式是以整型进行存储的,比如这样的字段sex enum('male' , 'female' , 'both' , 'unknow')在查询时where sex='male'和where sex=1是等效的
bit
bit类似多用于存储状态,如bit(1) 直接对应Java语言的布尔类型true和false,用做状态保存时一个字段可以保存多至64个状态。如我开发的某个系统需要保存对用户发送短信的状态,有10几种不同类型的短信,每种都要标记发过没有,这时候用bit类型就很方便,当然用int也能实现,但用bit更符合语义,查询或更新某个状态时按位操作即可。
末尾写一些会用到的命令:
①查看创建表的sql语句:show create table students;
②多表查询-内连接 inner join(交集):select s.name,c.name from students as s inner join classes as c on s.cls_id=c.id;
③左连接(以left左方命令为基准):select * from students as s left join classes as c on s.cls_id=c.id;
④修改表字段值(交集):update goods inner join goods_cates on goods.cate_name=goods_cates.name set goods.cate_name=goods_cates.id;
⑤修改字段名及属性:alter table goods change cate_name cate_id int unsigned not null;
⑥添加外键(goods.cate_id与goods_cates.id关联):alter table goods add foreign key (cate_id) references goods_cates(id);
⑦删除外键(外键名通过show create table goods查看):alter table goods drop foreign key goods_ibfk_2;