1,整形 分类:tinyint smallint mediumint int bigint 作用:储存年龄, 等级, id, 各种号码等 1》 验证整型字段有无符号及范围 unsigned :表示无负号 tinyint 表示范围(127到 -128),即最小-128,最大127 默认是否有符号 默认是带有符号的(-128,127) 超出限制会如何 超出之后只会存最大值或者最小值 create table t1(id tinyint); insert into t1 values(128),(-129); create table t2(id tinyint unsigned); insert into t2 values(-1),(256); 结果为 0 255 create table t3(x int unsigned); insert into t3 values(4294967296); 强调:对于整型来说,数据类型后的宽度并不是储存限制,而是显示设置 所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度,默认的显示宽度就足以显示完整当初存放的数据 严格模式: 我们刚刚在上面设置了char,tinyint,存储数据时超过它们的最大存储长度, 发现数据也能正常存储进去,只是mysql帮我们自动截取了最大长度。但在实际情况下, 我们应该尽量减少数据库的操作, 缓解数据库的压力,让它仅仅只管理数据即可,这样的情况下就需要设置安全模式 默认是否有符号 默认是带有符号的(-128,127) 超出限制会如何 超出之后只会存最大值或者最小值 浮点型 精确度: float < double < decimal float(255,30) 总共255位 小数部分占30位 结果精度较低 show variables like "%mode%"; # 查看数据库配置中变量名包含mode的配置参数 # 修改安全模式 set session # 只在当前操作界面有效 set global # 全局有效 set global sql_mode ='STRICT_TRANS_TABLES' # 修改完之后退出当前客户端重新登陆即可
double(255,30) 总共255位 小数部分占30位 结果精度中等 decimal(65,30) 总共65位 小数部分占30位 结果精度最高 create table t12(id FLOAT(255,30)); create table t13(id DOUBLE(255,30)); create table t14(id DECIMAL(65,30)); insert into t12 values(1.111111111111111111111111111111); insert into t13 values(1.111111111111111111111111111111); insert into t14 values(1.111111111111111111111111111111); 字符类型 char(4) # 最大只能存四个字符 超出来会直接报错 如果少了 会自动用空格填充 varchar(4) # 最大只能存四个字符 超出来会直接报错 如果少了 有几个存几个 create table t15(name char(4)); create table t16(name varchar(4)); char_length() mysql在存储char类型字段的时候 硬盘上确确实实存的是固定长度的数据 但是再取出来的那一瞬间 mysql会自动将填充的空格去除 可以通过严格模式 来修改该机制 让其不做自动去除处理 char与varchar的区别 char定长 1.浪费空间 2.存取速度快 varchar变长 1.节省空间 2.存取速度慢(较于char比较慢) 存的时候 需要给数据讲一个记录长度的报头 取的时候 需要先读取报头才能读取真实数据 char(4) varchar(4) 取的时候方便 取的时候比较繁琐了 无法知道数据到底多长 直接按固定的长度取即可 日期类型 date 年月日 datetime 年月日 时分秒 year 年 time 时分秒 枚举与集合类型 枚举(enum) 限制某个字段能够存储的数据内容 集合(set) 限制某个字段能够存储的数据内容 约束条件 not null 不能为空 default 给某个字段设置默认值(当用户写了的时候用用户的,当用户没有写就用默认值) create table t17(id int,name char(16) default 'jason'); 往表中插入数据的时候 可以指定字段进行插入 不需要全部都插 insert into t17(name,id) values('egon',2); unique 唯一 单列唯一 限制某一个字段是唯一的 联合唯一(在语句的最后 用括号的形式 表示哪几个字段组合的结果是唯一的) ip port create table server( id int, ip char(16), port int, unique(ip,port) ) primary key 主键 限制效果跟 not null + unique 组合效果一致 非空且唯一 create table t18(id int primary key); primary key也是innodb引擎查询必备的索引 索引你就把当成书的目录 innodb引擎在创建表的时候 必须要有一个主键 当你没有指定主键的时候 1.会将非空切唯一的字段自动升级成主键 2.当你的表中没有任何的约束条件 innodb会采用自己的内部默认的一个主键字段 该主键字段你在查询时候是无法使用的 查询数据的速度就会很慢 类似于一页一页的翻书 create table t19( id int, name char(16), age int not null unique, addr char(16) not null unique ); 主键字段到底设置给谁呢??? 通常每张表里面都应该有一个id字段 并且应该将id设置为表的主键字段 联合主键:多个字段联合起来作为表的一个主键,本质还是一个主键!!! !!!!!!!!!!!!!!!!!ps:innodb引擎中一张表有且只有一个主键!!!!!!!!!!!!!!!!!!!!!!! create table t20( ip char(16), port int, primary key(ip,port) ); desc t20; 主键字段应该具备自动递增的特点 每次添加数据 不需要用户手动输入 auto_increment 自动递增 create table t21(id int primary key auto_increment,name varchar(16)); create table t22(id int primary key,name varchar(16)); 语句delete from 仅仅是删除数据 不会重置主键 语句truncate 初始化表 会重置主键
转载于:https://www.cnblogs.com/Fzhiyuan/p/11379053.html