列类型
建表就是把表头建好就行,剩下的都是数据的增删改查。
建表需要表名称及声明表头。
定义列是需要注意分配的宽度,合理利用资源。
存储同样数据,不同的列类型所占据的空间和效果是不一样的。所以要选择合理的列类型。
重点:列类型的存储空间和占据的字节。
MySQL三大列类型
整型、浮点型和字符型
整型
- 整型
- tinyint
- 占据空间1个字节,8bit
- 存储范围-128~127或0~255(无符号数)
- smallint
- 占据空间2个字节,存储范围依次类推
- mediuint
- 占据空间3个字节
- int
- 占据空间4个字节
- bigint
- 占据空间8个字节
- tinyint
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浮点型的高
- float(M,D),decimal(M,D)
建立一个薪资表
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-DD | 1000-01-01到9999-12-31 |
| time | 时间 | HH:MM:SS | -838:59:59~838:59:59 |
| datetime | 日期时间 | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00~9999-12-31 23::59:59 |
| year | 年份类型 | YYYY | 1901~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)

被折叠的 条评论
为什么被折叠?



