数据类型
整形
数据类型 | 存储范围 |
---|---|
TINYINT(1个字节) | 有符号值:-128到127(-2^7到2^7-1);无符号值:0到255(0到2^8-1) |
SMALLINT(2个字节) | 有符号值:-32768到32767(-2^15到2^15-1);无符号值:0到65535(0到2^16-1) |
MEDIUMINT(3个字节) | 有符号值:-8388608到8388607(-2^23到2^23-1);无符号值:0到16777215(0到2^24-1) |
INT(4个字节) | 有符号值:-2147483648到2147483647(-2^31到2^31-1);无符号值:0到4294967295(0到2^32-1) |
BIGINT(8个字节) | more large |
数据优化时选择最合理的数据类型
浮点型
数据类型 | 存储范围 |
---|---|
FLOAT[(M,D)] | -3.4*10(-38)~3.4*10(38) ,M是数字总位数,D是小数点后面的位数,如果M和D被省略,根据硬件允许的限制来保存值,单精度浮点数精确到大约7位小数位,占4个字节 |
DOUBLE[(M,D)] | -1.7*10(-308)~1.7*10(308) ,双精度,有效位是16位,占8个字节 |
日期时间型
日期类型 | 存储空间 | 日期格式 | 日期范围 |
---|---|---|---|
datetime | 8 bytes | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 |
timestamp | 4 bytes | YYYY-MM-DD HH:MM:SS | 1970-01-01 00:00:01 ~ 2038 |
date | 3 bytes | YYYY-MM-DD | 1000-01-01~ 9999-12-31 |
year | 1 bytes | YYYY | 1901~ 2155 |
在 MySQL 中创建表时,对照上面的表格,很容易就能选择到合适自己的数据类型,不过到底是选择 datetime 还是 timestamp,可能会有点犯难,这两个日期时间类型各有优点:
datetime 的日期范围比较大;,timestamp 所占存储空间比较小,只是 datetime 的一半
字符型
|列类型|存储需求|
|CHAR(M)|M个字节,0<=M<=255|
|VARCHAR(M)|L+1个字节其中L<=M,且0<=M<=65535|
|TINYTEXT|L+1个字节,其中L<2^8|
|TEXT|L+2个字节,其中L<2^16|
|MEDIUMTEXT|L+3个字节,其中L<2^24|
|LONGTEXT|L+4个字节,其中L<2^32|
|ENUM(‘value1’,’value2’,…)|1或2个字节,取决于枚举值的个数(最多65536个值)|
|SET(‘value1’,’value2’,…)|1,2,3,4或8个字节,取决于set成员的数目(最多64个成员)|
char的长度是固定的,varchar的长度是可变的,因为char的长度固定,方便查找,所以存取速度char比varchar要高一些,char相当于用空间换效率
数据表
打开数据库
命令:USE 数据库名称
查看当前打开的数据库:SELECT DATABASE()
创建数据表
命令:
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
......)
查看数据表列表: SHOW TABLES [FROM db_name] [LIKE 'pattern' | WHERE expr]
查看数据表结构: SHOW COLUMNS FROM db_name
插入记录
命令: INSERT[INTO] tbl_name[(col_name,...)]VALUES(val,...)
如果没有选择列名,插入的值必须要对应,多了或少了都会发生错误
记录查找
命令:SELECT expr,... FROM tbl_name
此处省略了SELECT的部分语句,以后会深入学习SELECT
空值与非空
- NULL:字段值可以为空
- NOT NULL:字段值禁止为空
自动编号
命令:AUTO_INCREMENT
自动编号,且必须与主键组合使用
默认情况下,起始值为1,每次的增量为1
约束
主键约束(PRIMARY KEY 或 KEY)
- 每张数据表只能存在一个主键
- 主键保证记录的唯一性
- 主键自动为NOT NULL
唯一约束(UNIQUE KEY)
- 唯一约束可以保证记录的唯一性
- 唯一约束的字段可以为空值(NULL)
- 每张数据表可以存在多个唯一约束
默认约束(DEFAULT)
- 当插入记录时,如果没有明确为字段赋值,则自动赋予默认值