sql 的基本数据类型

详细的建表语句

create table 表名(字段名 数据类型[(长度) 约束条件]

[]代表可选

为什么需要给数据数据分类?

1.表述数据更加正确

2.节省内存空间

数据类型

整形类型

默认是有符号的,

设置为无符号 

  1.create table t2 (age tinyint unsigned);

  2.建表后用alter修改

!!!!!对于整数类型而言长度不是数据所占的字节数 是显示数据时的宽度(字符数)

默认情况下 存储的数值的十进制位数  小于所设置的显示宽度时  不会填充 没有任何效果

加上zerofill 指定当存储的数值的十进制位数  小于所设置的显示宽度时 用0来填充

当数据的十进制位长度 大于显示宽度 可以正常显示

主要记住  整型后面的长度的含义 有字符是不同的

  tinyint
  smallint
  mediumint
  int *****
  bigint

总结:除了存储范围没啥区别
  都是整型
  默认有符号
  对于显示宽度 原理是相同的

长度参数如果不指定 会有默认值

严格模式

什么是严格模式 对插入的数据严格要求 不再范围内直接报错 例如往tinyint中插入大于255的值将报错
什么是非严格模式 不 对插入的数据严格要求 不再范围内也可以保存 保存的当前类型最大支持的值
  5.6默认是非严格模式
  5.7以后默认严格模式

查看SQL模式
  select @@sql_mode;
  show variables like "sql_mode";

修改SQL模式
  set @@sql_mode = "值";
  正常情况不需要改

 浮点类型

  float 4字节
  double 8字节
  decimal 不固定
  create table t9(num float(m,d))
  m 表示总长度 d 表示小数部分的长度
  长度表示不是数据存储范围 而是字符长度
  10.12 总长为4 小数部分为2

各个类型的最大长度
  float (255,30) *****
  double (255,30)
  decimal (65,30)

区别:
  float与double的精度不同 都是不准确的小数
  decimal 准确的小数 不会丢失精度

  具体使用哪种类型得根据使用场景判断
  float满足大部分使用场景
  decimal适合银行系统 科学研究等

括号中m和d的值 可以限制数据存储范围 与整型不同
重点:记住m和d的含义

字符串类型

  常用两种
  char 定长字符串
  char
  varchar 可变长度字符串
  注意字符串中 长度指定的是数据的字符长度 与字节没关系

  create table t13(c1 char,c2 varchar(10));
  在创建时 varchar必须指定长度 char有默认值

不同点:
  a char(3) b char(3)
  A |B |
  char类型在取数据时 就根据长度来获取 不关心真实数据长度
  无论的数据有多长 占用的空间是固定的 造成了一定空间浪费

  a varchar(30) b varchar(30)
  (1)A(1)B
  varchar类型在取数据时 先获取数据长度 在根据长度获取真实数据 关心真实数据长度
  先存储长度需要一个字节 再存储真实数据 不会浪费空间
  但是 由于需要计算数据的长度 所以存取速度会比定长慢

相同点:
  括号中的数字 都是表示存储最大字符长度

  ·char使用频率更高

  mysql会在存储数据时自动将数据末尾的空格去掉
  如果必须要存空格 需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据

  

  由于自动去除空格这个机制 在使用等于符号 和like时有区别
  select *from t1 where name = "yh "; 会自动去除空格
  select *from t1 where name like "yh "; 不会自动去除空格
  like 用于模糊匹配 使用%表示0或任意个任意字符 使用_表示一个任意字符

日期和时间 

  year
  time
  date
  datetime *****
  timestamp *****
  timestamp特点是:可以给null 自动输入当前时间 当这条记录被修改了会自动更新当前时间

  枚举

  enum 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个 ("男的","女的") 多选一

集合

   set  可以指定一堆字符串的值  在插入数据时  数据必须这堆字符串中的其中一个或多个 ("男的","女的")  多选多

共同点:数据都是字符串类型

 

posted @ 2018-11-20 18:31  msjaxuexi  阅读(912)  评论(0编辑  收藏  举报