燕十八 Mysql 笔记 68 课
68 建表过程与字符类型的意义
目的:要学会建表
知识点:列类型
怎么建表?
以在 A4 纸上建表为例,表头写完就算表建好了,后面的是插入数据,建表的过程其实就是一个声明字段的过程
学号 | 姓名 | 家乡 | 入学年份 |
---|---|---|---|
001 | Mark | 山西 | 2014 |
建表又和列类型有什么关系呢?
列类型大小,过大浪费资源,过小存不下,合理分配空间。存储同样的数据,不同的列类型,所占的空间和效率是不一样的,这就是我们建表前要考虑列类型的原因。
69 Mysql 三大列类型
tee 生成一个 sql 文件
1 . 数值型:
-
整型:
- Tinyint 占据空间:一个字节,存储范围:-128 - 127、0 - 255 学习 tinyint 的参数并验证字节与范围的关系,默认是有符号 -128 - 127
- Smallint
- Mediuint
- Int
int 系列声明时的参数,(M) unsigned zerofill 各自代表什么,M 必须和 zerofill 一起出现才有意义,smallint(5) zerofill 用 0 填充,宽度为 5
alter table stu add sal smallint(5) zerofill not null default ‘0’;
-
小数(浮点型/定点型):
- 浮点数表示比较复杂
- Float(M,D) decimal (M,D) M 精度 D 标度
- 浮点数占多大的空间呢?如果 M <= 24,占 4 个字节,否则占 8 个字节
- 浮点和定点的区别:定点是把整数部分和小数部分分开存储的,比 float 精确,银行建议 decimal
-
字符串型:
- char varchar text blob
- char(6) 定长字符串,查找比较快,会浪费空间,用空格补齐,如果右边本来就有空格,取出时是删除空格,空格失效,范围 0-255 之间
- varchar(6) 变长类型 2 张三,生活中坐车的例子,对于 varchar(N) ,不用空格补齐,但列内容前,有 1-2 个字节来标志该列的内容长度。 0-65535 之间
- Text:文本类型,可以存比较大的文本段,一般用来存储文章内容,新闻内容等,搜索速度比较慢,建议用 char varchar 来代替,声明 text 列时,不用加默认值,加了也没用。
- Blob 是二进制类型,用来存储图像、音频等二进制信息,意义在于 2 进制,0-255 都有可能出现,Blob 在于防止因为字符集的问题,导致信息丢失,比如:一张图片有 0xFF 字节,这个在 asci 字符集认为非法,在入库的时候被过滤了。
select concat(c,’!’),concat(v,’!’) from test;
注意:char(M) varchar(M) 限制的是字符,不是字节,即 char(2) charset utf8 ,能存 2 个 utf8 字符,比如”中国“,多了不能
create table test2 (article text);
视图:View
视图的学习:
查询每个栏目下商品的平均价格,并取平均前 3 高的栏目