建表过程
建表跟我们实际生活中建表格或者 Excel 表格是一样的,主要就是列类型和数据构成的。
只要把表头建好了,这个表格实际上也就完成了,至于姓名,学校,公司下面的,实际上只是表的内容,所以建表的过程实际上就是画表头的过程,就是一个声明表头字段的过程。
建表语句
语法:create table 表名(
字段1 类型1 说明1,
字段2 类型2 说明2,
...
字段n 类型n 说明n)engine 引擎名 charset 字符编码;
举例如上:primary key,auto_increment,not null default,myisam 等含义往后再解释。
MySQL列类型
1.数值型
整型:tinyint,smallint,mediumint,int,bigint
数据类型分别占 1,2,3,4,8 个字节。
注意:下图的 tinyint(4) 后面的 4 代表的并不是存储在数据库中的具体的长度,以前总是会误以为 int(3) 只能存储 3 个长度的数字,int(11) 就会存储 11 个长度的数字,这是大错特错的。tinyint(1) 和 tinyint(4) 中的 1 和 4 并不表示存储长度,只有字段指定 zerofill 是有用,如 tinyint(4),如果实际值是 2,如果列指定了 zerofill,查询结果就是 0002,左边用 0 来填充。请参考:https://blog.csdn.net/jaryle/article/details/52025023
tinyint unsigned:无符号的 tinyint 类型。
zerofill:代表使用零填充,声明了 zerofill 就是 unsigned 类型。
小数型:float(M,D),double(M,D),decimal(M,D) -- float 为浮点类型,decimal 为定点类型
M:代表总位数(不包含小数点),D:代表小数位数
如 float(6,2) 代表数字位为 6 位,小数点后有 2 位。
float 占 4 个字节。
而 decimal 是一种定点类型,小数部分和整数部分分开存储,比 float 准确。
2.字符类型(char,varchar,text,blob)
char(6) ---- 定长字符串(对于定长字符串,写入时不够长度时用空格补,读出的时候把右边的空格删除)
varchar(6) ---- 变长字符串(对于变长字符串,需要在前缀用 1-2 个字节标记后面的长度)
区别:定长字符串查找快,但是会造成空间浪费,而不定长字符串能节省空间,但是查找起来没有定长字符串快。
注意:char(6) 或者 varchar(6) 后面的 6 应该理解为长度,而不能理解为字节,因为在不同的字符集下是不同的字节,gbk 下是 6 个 gbk 编码的汉字。
text:文本类型,可以存放比较长的文本段,但是搜索速度稍慢,因此如果不是特别长的内容,建议使用 char 或者 varchar 代替,varchar 最多能存 65535 长度那么长。注意 text 文本类型不需要加默认值。
blob:二进制类型,一般用来存放图像,音频等二进制的信息,防止因为一些字符集的问题导致存进去的时候部分二进制丢失,从而导致图像或者音频损坏。