数据库的列类型
数值
- tinyint(十分小的数据,占用1个字节)
- smallint ( 较小的数据,占用2个字节)
- mediumint(中等大小的数据,占用3个字节)
- int(标准的整数,占用4个字节,也是最常用的)
- bigint(较大的数据,占用8个字节)
- float(单精度浮点数,占用4个字节)
- double(浮点数,占用8个字节,存在精度问题)
- decimal(字符串形式的浮点数,在金融计算的时候,一般都是使用decimal)
字符串
- char(固定大小的字符串 0~255)
- varchar(可变字符串 0~65535 常用的变量)
- tinytext (微型文本 2^8)
- text(文本串 2^16-1 用于保存大文本)
时间日期
- data(YYYY-MM-DD 年月日)
- time(HH:mm:ss 时分秒)
- datatime(YYYY-MM-DD HH:mm:ss 也是目前为止最常用的时间格式)
- timetamp(时间戳 1970.1.1到现在的毫秒数 也较为常用)
- year(年份表示)
null
- 没有值,未知
- 注意:不要使用NULL来进行运算,结果为NULL!
数据库的字段属性
unsigned
- 无符号的整数
- 声明了该列不能为负数
zerofill
- 0填充的
- 不足的位数将会使用0填充,例如三位数的int类型数据,数值为5,会自动填充为005
auto increment
- 通常理解为自增,默认为自动在上一条记录的基础上+1
- 通常来设计唯一的主键,例如index,且必须为整数
- 可以自定义设置主键自增的起始值和步长
非空
- 假设设置为not null,如果不给其赋值,就会报错
- NULL,如果不填写值,那默认为null!
默认
- 设置默认的值
- 假设有sex,设置默认值为男,如果不指定该列的值,则会有默认的值!
题外话:每一个表都必须存在以下五个字段,未来做项目的时候会用到,表示一个记录存在的意义!
/* id 主键
`version` 乐观锁
is_delete 伪删锁
gmt_create 创建时间
gmt_updata 修改时间 */
数据库的类型
数据库引擎
早些年(5.1版本之前)一般使用MyISAM,现如今一般默认为InnoDB!
MyISAM | InnoDB | |
---|---|---|
事物支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大(为MyISAM的两倍) |
从常规使用操作的角度来看,MyISAM相比起InnoDB,体积更小,节约空间,速度较快,而InnoDB则是安全性高,支持事物的处理,并且可以多表多用户操作。
物理空间存在的位置
所有的数据库文件都存放在data目录下,可以很粗暴地理解为每一个文件夹都对应这一个数据库,本质上还是以文件的格式储存。
MySQL引擎在物理文件上的区别:
-
InnoDB在数据库表中只有一个*.frm文件(表的定义结构文件),以及上级目录下的ibdata1文件
-
MyISAM对应的文件一共有三份:
- *.frm
- *.MYD(表的数据文件data)
- *.MYI(索引文件index)
设置数据库表的字符集编码
CHARSET=utf8
MySQL的默认字符集编码为Latin1,并不支持中文!所以我们一般会设置为utf8编码格式!
也可以通过修改my.ini配置文件来修改默认的字符集编码(并不建议):
character-set-server=utf8