MySQL列类型介绍


列类型
建表就是把表头建好就行,剩下的都是数据的增删改查。
建表需要表名称及声明表头。
定义列是需要注意分配的宽度,合理利用资源。
存储同样数据,不同的列类型所占据的空间和效果是不一样的。所以要选择合理的列类型。
重点:列类型的存储空间和占据的字节。
MySQL三大列类型
整型、浮点型和字符型

整型

  • 整型
    • tinyint
      • 占据空间1个字节,8bit
      • 存储范围-128~127或0~255(无符号数)
    • smallint
      • 占据空间2个字节,存储范围依次类推
    • mediuint
      • 占据空间3个字节
    • int
      • 占据空间4个字节
    • bigint
      • 占据空间8个字节
mysql> create table salary (
    -> sname varchar(20) not null default '',
    -> sage tinyint unsigned not null default 0
    -> )engine myisam charset utf8;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into salary values ('a',18);
Query OK, 1 row affected (0.00 sec)

mysql> select * from salary;
+-------+------+
| sname | sage |
+-------+------+
| a     |   18 |
+-------+------+
1 row in set (0.00 sec)

mysql> alter table salary add gongzi smallint(6) zerofill  not null default 0;
Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from salary;
+-------+------+--------+
| sname | sage | gongzi |
+-------+------+--------+
| a     |   18 | 000000 |
+-------+------+--------+
1 row in set (0.00 sec)

mysql> desc salary;
+--------+-------------------------------+------+-----+---------+-------+
| Field  | Type                          | Null | Key | Default | Extra |
+--------+-------------------------------+------+-----+---------+-------+
| sname  | varchar(20)                   | NO   |     |         |       |
| sage   | tinyint(3) unsigned           | NO   |     | 0       |       |
| gongzi | smallint(6) unsigned zerofill | NO   |     | 000000  |       |
+--------+-------------------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

zerofill默认为unsigned型

浮点型

  • 浮点型
    • float(M,D),decimal(M,D)
      • M是精度,代表总位数
      • D是标度,代表小数位
        decimal称为定点型,精度比float浮点型的高

建立一个薪资表

mysql> create table salary (
    -> sname varchar(20) not null default '',
    -> gongzi float(6,2)
    -> ) engine myisam charset utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into salary values ('a',-1234.56);
Query OK, 1 row affected (0.00 sec)

mysql> insert into salary values ('b',1234.56);
Query OK, 1 row affected (0.00 sec)

mysql> select * from salary;
+-------+----------+
| sname | gongzi   |
+-------+----------+
| a     | -1234.56 |
| b     |  1234.56 |
+-------+----------+
2 rows in set (0.00 sec)
mysql> alter table salary add bonu float(5,2) unsigned not null default 0.00;
mysql> insert into salary (sname,bonu) values ('a',-1234.56);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from salary;
+-------+---------+--------+
| sname | gongzi  | bonu   |
+-------+---------+--------+
| b     | 1234.56 |   0.00 |
| bb    |    NULL | 999.99 |
| a     |    NULL |   0.00 |
+-------+---------+--------+
3 rows in set (0.00 sec)

由上面可以看到5.5版本的无符号数会将负数转化为0并给一个warning信息

字符型

char:定长类型,每个参数占用内存固定,运行较快,如果输入字符长度不定可能会浪费内存空间;存入的时候不够的话在右侧用空格填充,取出来的时候去掉空格,因此char型的字符串右边空格会丢失。
varchar:变长类型,开头有1-2字节来标志列的内容长度,占用的内存地址=标志位+字符长度。
char(M),varchar(M)里面的M表示的是字符
text:文本类型,可以存储较大的文本端,搜索速度比较慢,声明text列时不必给默认值
block:二进制类型,用来存储图片、音频等信息。

日期时间类型

类型说明标准格式范围
date日期YYYY-MM-DD1000-01-01到9999-12-31
time时间HH:MM:SS-838:59:59~838:59:59
datetime日期时间YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00~9999-12-31 23::59:59
year年份类型YYYY1901~2155

举例

mysql> set names utf8;
mysql> create table test( star varchar(20) not null default '', birthday date not null default '0000-00-00' )engine myisam charset utf8;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test
    -> values
    -> ('Jay zhou','1979-01-18');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----------+------------+
| star     | birthday   |
+----------+------------+
| Jay zhou | 1979-01-18 |
+----------+------------+
1 row in set (0.00 sec)

mysql> alter table test add sign time not null default '00:00:00';
Query OK, 1 row affected (0.04 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into test
    -> values
    -> ('xiaosan','1979-01-01','19:43:11');
Query OK, 1 row affected (0.00 sec)

mysql> select * from test;
+----------+------------+----------+
| star     | birthday   | sign     |
+----------+------------+----------+
| Jay zhou | 1979-01-18 | 00:00:00 |
| xiaosan  | 1979-01-01 | 19:43:11 |
+----------+------------+----------+
2 rows in set (0.00 sec)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值