mysql续集1

2.6数据类型

2.6.1数据类型概览

#1. 数字:
    整型:tinyinit  int  bigint
    小数:
        float :在位数比较短的情况下不精准
        double :在位数比较长的情况下不精准
            0.000001230123123123
            存成:0.000001230000

        decimal:(如果用小数,则用推荐使用decimal)
            精准
            内部原理是以字符串形式去存

#2. 字符串:
    char(10):简单粗暴,浪费空间,存取速度快
        root存成root000000
    varchar:精准,节省空间,存取速度慢

    sql优化:创建表时,定长的类型往前放,变长的往后放
                    比如性别           比如地址或描述信息

    >255个字符,超了就把文件路径存放到数据库中。
            比如图片,视频等找一个文件服务器,数据库中只存路径或url。

#3. 时间类型:
    最常用:datetime

#4. 枚举类型与集合类型

2.6.2整数类型

整数类型有
tinyint   smallint   mediumint   int   bigint
作用
存储年龄,id,号码等

========================================
        tinyint[(m)] [unsigned] [zerofill]

            小整数,数据类型用于保存一些范围的整数数值范围:
            有符号:
                -128 ~ 127
            无符号:
                0 ~ 255

            PS: MySQL中无布尔值,使用tinyint(1)构造。

========================================
        int[(m)][unsigned][zerofill]

            整数,数据类型用于保存一些范围的整数数值范围:
            有符号:
                    -2147483648 ~ 2147483647
            无符号:
                    0 ~ 4294967295

========================================
        bigint[(m)][unsigned][zerofill]
            大整数,数据类型用于保存一些范围的整数数值范围:
            有符号:
                    -9223372036854775808 ~ 9223372036854775807
            无符号:
                    0  ~  18446744073709551615
#"有符号和无符号tinyint,默认是有符号"
mysql> alter table t2 add x tinyint;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> desc t2;
+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| x     | tinyint(4) | YES  |     | NULL    |       |
+-------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)

#"超出范围报错"
mysql> insert into t1 values(-129),(-128),(127),(128);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql> insert into t2 values(-129),(-128),(127),(128);
ERROR 1264 (22003): Out of range value for column 'x' at row 1
mysql> insert into t2 values(-128),(-128),(127),(128);
ERROR 1264 (22003): Out of range value for column 'x' at row 4
mysql> insert into t2 values(-128),(-128),(127),(127);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> 

#"设置无符号tinyint,超出范围报错"
mysql> insert into t2 values (-2),(23),(2899);
ERROR 1264 (22003): Out of range value for column 'x' at row 1
mysql> insert into t2 values (2),(23),(2899);
ERROR 1264 (22003): Out of range value for column 'x' at row 3
mysql> insert into t2 values (2),(23),(255);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
#"int 和bigint不再尝试,也都是超出范围自动报错"

#"用zerofill测试整数数据类型的显示宽度
#int(3)这里是设置的显示宽度,不是设置存储的数据范围"
mysql> alter table t2 modify x int(3) zerofill;
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0
mysql> insert into t2 values (1),(11),(111),(1111);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from t2;
+------+
| x    |
+------+
|  002 |
|  023 |
|  255 |
|  001 |
|  011 |
|  111 |
| 1111 |#宽度超过限制仍然可以保存
+------+
7 rows in set (0.00 sec)

mysql> 
"没有必要为整数类型设置宽度,使用默认就可以"

2.6.3浮点型

猜你喜欢

转载自blog.51cto.com/10983441/2398779