zoukankan      html  css  js  c++  java
  • 表的数据类型

    ——————————————————————————————————————————————————

    整形类型:

    create database db37;   创建一个db37的表来验证

    二 基本数据类型之整型:
    1、作用:id号,各种号码,年龄,等级
    2、分类:
    (1)tinyint(**)
    (2)int (*****)
    (3)bigint(***)

    3、测试:默认整型都是有符号的
    验证(1)
    create table t1(x tinyint);
    insert into t1 values(128),(-129);

    create table t2(x tinyint unsigned);
    insert into t2 values(-1),(256);

    验证(2)
    create table t3(x int unsigned);
    #4294967295
    insert into t3 values(4294967296);


    create table t4(x int(12) unsigned);
    insert into t4 values(4294967296123);


    4、强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制(其他所有数据类型都是存储限制)
    所以在创建表示,如果字段采用的是整型类型,完全无需指定显示宽度,
    默认的显示宽度,足够显示完整当初存放的数据

    # 显示时,不够8位用0填充,如果超出8位则正常显示
    create table t5(x int(8) unsigned zerofill);
    insert into t5 values(4294967296123);
    insert into t5 values(1);

    ————————————————————————————————————————————————————————

    补充说明:

    # 查看sql_mode
    mysql> show variables like "%sql_mode%";
    +----------------------------+---------------------+
    | Variable_name | Value |
    +----------------------------+---------------------+
    | binlogging_impossible_mode | IGNORE_ERROR |
    | block_encryption_mode | aes-128-ecb |
    | gtid_mode | OFF |
    | innodb_autoinc_lock_mode | 1 |
    | innodb_strict_mode | OFF |
    | pseudo_slave_mode | OFF |
    | slave_exec_mode | STRICT |
    | sql_mode | STRICT_TRANS_TABLES |
    +----------------------------+---------------------+
    8 rows in set (0.00 sec)

    #修改sql_mode为严格模式:在该模式下,如果插入的数据超过限制,则会立即报错
    mysql> set global sql_mode="strict_trans_tables";

    PS:程序能干的事情尽量不要让数据库干!!!!

    ——————————————————————————————————————————————————————————————

    浮点类型:

    作用:存储身高、体重、薪资
    分类:
    float (*****)
    double (**)
    decimal (**)

    测试:
    #相同点
    #1、对于三者来说,都能存放30位小数,
    #不同点:
    1、精度的排序从低到高:float,double,decimal
    2、float与double类型能存放的整数位比decimal更多


    create table t9(x float(255,30));
    create table t10(x double(255,30));
    create table t11(x decimal(65,30));

    insert into t9 values(1.111111111111111111111111111111);
    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);


    mysql> select * from t9;
    +----------------------------------+
    | x |
    +----------------------------------+
    | 1.111111164093017600000000000000 |
    +----------------------------------+
    1 row in set (0.00 sec)

    mysql> select * from t10;
    +----------------------------------+
    | x |
    +----------------------------------+
    | 1.111111111111111200000000000000 |
    +----------------------------------+
    1 row in set (0.00 sec)

    mysql> select * from t11;
    +----------------------------------+
    | x |
    +----------------------------------+
    | 1.111111111111111111111111111111 |
    +----------------------------------+
    1 row in set (0.00 sec)

    ——————————————————————————————————————————————————类型————

    字符串类型:

    1、作用:姓名,地址,描述类的信息

    2、分类:
    char 定长
    varchar 变长

    3、测试:字符的宽度限制单位是字符个数
    create table t12(x char(4)); # 超出4个字符则报错,不够4个字符则用空格补全成4个字符
    create table t13(y varchar(4));# 超出4个字符则报错,不够4个字符那么字符有几个就存几个

    insert into t12 values('hello');
    insert into t13 values('hello');


    insert into t12 values('a'); #'a '
    insert into t13 values('a'); #'a'


    set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
    select char_length(x) from t12; #4
    select char_length(y) from t13; #1


    # 注意:
    针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中
    但会在读出结果时自动去掉末尾的空格,因为末尾的空格在以下场景中是无用
    mysql> select * from t14 where name="lxx"; # name字段明确地等于一个值,该值后填充空格是没有用


    mysql> select * from t14 where name like "lxx"; # name字段模糊匹配一个值,该值后填充空格是有用的




    # 对比char与varchar

    name char(5)
    # 缺点:浪费空间
    # 优点:存取速度都快
    egon alex lxx wxx yx



    name varchar(5)
    # 缺点:存取速度都慢
    # 优点:节省空间
    (1bytes+egon)(1bytes+alex)(1bytes+lxx)

     ——————————————————————————————————————————————————————————————

    日期类型:

    1、作用:时间相关

    2、分类:
    date:1999-01-27
    time: 11:11:11
    datetime:1999-01-27 11:11:11
    year:1999

    3、测试
    create table student(
    id int,
    name char(16),
    born_year year,
    birth date,
    class_time time,
    reg_time datetime
    );

    insert into student values(1,'egon','2000','2000-01-27','08:30:00','2013-11-11 11:11:11');

    ————————————————————————————————————————————————————

    枚举与集合类型:

    作用与分类:
    枚举enum,多选一个
    集合set,多选多


    测试

    create table teacher(
    id int,
    name char(16),
    sex enum('male','female','others'),
    hobbies set('play','read','music','piao')
    );

    ——————————————————————————————————————————————————

  • 相关阅读:
    为什么我会被淘汰?
    2017-3-27日碎碎念
    (原创)我对未来的人类的发展,以及AI技术发展的一些思考。
    八大排序算法图文讲解
    PE病毒初探——向exe注入代码
    [转]Patch文件结构详解
    芝麻信用商家接入指南
    如何成为一名好的程序员的一些个人经验
    .NET CoreCLR开发人员指南(上)
    七牛云:ckeditor JS SDK 结合 C#实现多图片上传。
  • 原文地址:https://www.cnblogs.com/TF511/p/9992955.html
Copyright © 2011-2022 走看看