Mysql的一些纪要

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;

原文地址:https://www.cnblogs.com/cpw6/p/11081304.html