zoukankan      html  css  js  c++  java
  • 20141230 mysql数值类型和列属性一

    捕获1111

    回顾

    数据库基础知识,关系型数据库(行/记录,列/字段,SQL)

    基本SQL操作:库操作,表操作(字段)和数据操作

    字符集

    校对集

    1. 什么是校对集?

    校对集就是指在同样的字符集下的数据按照什么样的方式进行比较,比较的规范的集合就叫校对集。

    校对集分类

    _bin:二进制比较,区分大小写的

    _ci:case insensitive,大小写不敏感,不区分大小写

    _cs:case sensitive,大小写敏感,区分大小写

    查看数据库所支持的校对集有哪些

    show collation;

    wps3075.tmp

    一共有197种校对集

    校对集的实现:在创建数据表(库)的时候指定校对集:collate = 校对集

    wps3086.tmp

    插入数据

    wps3087.tmp

    校对集的使用:在需要对数据进行比较的时候会自动的启用

    对数据进行排序的时候一定会用到校对集。

    语法:在where条件之后,使用order by 要排序的字段 [asc|desc]

    asc:升序,是默认的

    desc:降序

    wps3088.tmp

    虽然中文也可以比较,但是没有比较的意义,gbk支持中文比较,utf8不支持,gbk比较的并不是中文本身,只能比拼音。

    结论:一张表的校对集应该在创建表的时候就指定,而不能在表已经存在的情况下(数据)再去尝试修改校对集,修改无效。

    乱码问题解决

    出现乱码的原因:两个数据存在的字符集不一致。

    wps3099.tmp

    理想的解决方案:三码合一

    存储引擎

    mysql提供了很多的存储引擎可以选择,但是常用的是myisam和InnoDB,因为这两个免费。

    全部存储引擎

    wps309A.tmp

    5.5以前的存储引擎默认的是myisam,5.5之后都是InnoDB了。

    甲骨文收购sun之后得到mysql就不再对myisam存储引擎进行技术支持,把所有团队都用来支持InnoDB

    InnoDB和myisam区别

    1. 文件的存储形式不一样

    2. myisam的批量插入和查询效率高,而InnoDB的修改和删除效率高

    3. 事务安全只有InnoDB支持,myisam不支持

    4. InnoDB支持外键,myisam不支持

    字段(列)类型

    1. 什么是字段类型?

    所谓的字段类型指的是当前字段所能存储的数据的类型

    SQL语言是一种强类型语言,所以必须在表创建的时候,给字段指定对应的数据类型,而且在数据存储的时候,只能存储的指定的数据类型。

    数据类型分类

    在SQL中,数据类型同样分为三类:数值型,字符串型,日期时间型

    数值型:整型,小数型(浮点型和定点型)

    字符串型:定长,不定长,文本,集合,枚举

    日期时间型:时间日期,日期,时间,年,时间戳

    wps30AA.tmps

    数值型
    整型

    存放整数的数据类型。生活中有不同的需求来使用不同范围内的整型,而SQL就需要根据不同的需求来设定不同的整型(分配不同内存)来记录,提高空间的利用率。

    整型分为以下五种

    tinyint:迷你整型,1一个字节存储,最多256个数据

    smallint:小整型,2个字节存储,最多65536个数据

    mediumint:中整型,3个字节存储

    int:标准整型,4个字节存储

    bigint:大整型,8个字节存储

    创建整形表

    wps30AB.tmp

    插入数据

    wps30BC.tmp

    在SQL中,数值数据默认的都是有符号的,所以有正负之分,应该将数据一分为二

    类型

    字节

    最小值(有符号/无符号)

    最大值(有符号/无符号)

    TINYINT

    1

    -128/0

    127/255

    SMALLINT

    2

    -32768/0

    32767/65535

    MEDIUMINT

    3

    -8388608/0

    8388607/16777215

    INT/INTEGE

    4

    -2147483648/0

    2147483647

    /4294967295

    BIGINT

    8

    -9223372036854775808/0

    9223372036854775807/18446744073709551615

    无符号

    语法:在数据类型之后,使用unsigned关键字

    wps30BD.tmp

    查看数据结构

    wps30BE.tmp

    要做到不改变原来数值大小的情况下,只能在数据的左边进行0填充

    wps30CE.tmp

    默认的系统不会自动的使用0填充,需要根据指令进行0填充,zerofill

    语法:数据类型之后 zerofill

    wps30CF.tmp

    效果

    wps30E0.tmp

    显示宽度注意事项

    wps30E1.tmp

    小数型

    浮点型:有可能丢失精度的小数型

    float:单精度浮点型,7个精确值左右

    double:双精度浮点型,15位左右

    wps30F2.tmp

    浮点型使用语法

    字段 float/float(M,D)

    M表示整个长度,D表示小数部分的长度

    创建表

    wps30F3.tmp

    插入数据

    wps30F4.tmp

    浮点数数据查询:系统会自动丢失精度之后的所有数据,四舍五入

    wps3104.tmp

    浮点数的应用:如果数据量特别大但是对精度要求不高的数据才会使用浮点型。

    定点型

    在指定范围内不会丢失精度的小数。

    语法:decimal(M,D),M总长度,D小数部分长度

    wps3105.tmp

    定点型应用

    wps3116.tmp

    字符串类型

    字符串类型分为:定长字符串,变长字符串,文本字符串,集合字符串和枚举类型

    定长字符串

    定长指的是磁盘所分配的空间是固定长度的存储空间,但是里面存储的数据可以没有空间长。

    定长:char

    语法:字段名 char(L),L表示可以存储的字符长度,定长的L长度最大值是255

    变长字符串

    变长指的是磁盘会根据实际存储的内容来进行磁盘空间的分配。

    变长:varchar

    语法:字段名 varchar(L),L表示可以存储的字符长度,L的最大值理论上是65535,因为varchar是变长,所以真实存储的数据的长度不可得知,所以任何变长数据都需要开辟额外的1或2个字节来存储数据的长度。

    定长与变长对比:utf8

    字符串

    Char(4)

    Varchar(4)

    Char实际字节长度

    Varchar实际字节长度

    A

    A

    A

    4 * 3(utf8) = 12

    1 * 3(utf8) + 1 = 4

    ABCD

    ABCD

    ABCD

    4 * 3(utf8) = 12

    4 * 3(utf8) + 1 = 13

             
             

    定长和变长的应用

    1. 长度固定的较小的字符串使用定长,手机号,身份证,md5加密等

    2. 长度不固定的较小的字符串使用变长,姓名,籍贯,家庭住址等

    3. 如果字符串长度较长(通常超过255个字符)使用文件字符串

    wps3117.tmp

    定长与变长的优劣

    1. 定长:浪费空间,但是读取效率高

    2. 变长:节省空间,但是效率降低

    wps3118.tmp

    在wamp中,mysql使用的精简模式,不是使用严格模式来约束数据,但是独立安装的mysql使用的严格模式。

    区别

    1. 错误处理方式不一样:精简模式下,如果出现错误,系统会尝试去减少错误代价(数据太长进行截取),在严格模式下,直接报错。

    2. 对于空字符串的处理不一样:主键自增长的时候

    文本字符串

    文本字符串分为两种:字符型文本,二进制文本

    文本字符串:text

    wps3128.tmp

    二进制字符串:blob

    wps3129.tmp

    图片或者文件等都可以进行存储,但是不建议直接存储,而是存储对应的文件的位置(路径)

    一般认为超过255个字符的数据都使用文本字符串来进行存储。

  • 相关阅读:
    2021 发工资咯:)
    HDU-2021
    HDU-2020
    HDU-2019
    HDU-2018
    HDU-2017
    HDU-2016
    HDU-2015
    HDU-2014
    HDU-2013
  • 原文地址:https://www.cnblogs.com/lifushan/p/6430428.html
Copyright © 2011-2022 走看看