mysql 基本数据类型 Mysql建表
整理常用的mysql使用的数据类型
tip:
- 本文中不区分大小写
- 本文中
#
后面皆为注释
日期 时间
类型 格式 范围 datetime
YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 timestamp
YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 ~ 2038 date
YYYY-MM-DD 1000-01-01 ~ 9999-12-31 year
YYYY 1901 ~ 2155 常用方法:
- 当前时间 now();
- UTC 日期时间 utc_date(), utc_time(), utc_timestamp();
tip: 因为我国位于东八时区,所以本地时间 = UTC 时间 + 8 小时。UTC 时间在业务涉及多个国家和地区的时候,非常有用。
字符串
类型 大小 用途 CHAR
0-255 bytes 定长字符串 VARCHAR
0-65535 bytes 变长字符串 TINYBLOB
0-255 bytes 不超过 255 个字符的二进制字符串 TINYTEXT
0-255 bytes 短文本字符串 BLOB
0-65 535 bytes 二进制形式的长文本数据 TEXT
0-65 535 bytes 长文本数据 MEDIUMBLOB
0-16 777 215 bytes 二进制形式的中等长度文本数据 MEDIUMTEXT
0-16 777 215 bytes 中等长度文本数据 LONGBLOB
0-4 294 967 295 bytes 二进制形式的极大文本数据 LONGTEXT
0-4 294 967 295 bytes 极大文本数据 注意:char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
数值类型
类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT
1 byte (-128,127) (0,255) 小整数值 SMALLINT
2 bytes (-32 768,32 767) (0,65 535) 大整数值 MEDIUMINT
3 bytes (-8 388 608,8 388 607) (0,16 777 215) 大整数值 INT
或INTEGER
4 bytes (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值 BIGINT
8 bytes (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值 FLOAT
4 bytes (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度 浮点数值 DOUBLE
8 bytes (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度 浮点数值 DECIMAL
对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值 浮点型: float(m, d), double(m, d), decimal(m, d); // m总个数,d小数位
整型: tinyint, smallint, mediumint, int, bigint
特殊关键字
- 空\不为空值:NULL、NOT NULL
- 主键:primary key
- 唯一键:unique key
- 自增长:auto_increment
- 默认值:default
- 默认当前时间 CURRENT_TIMESTAMP
- 字段描述:comment
建表
以下为创建一个表格:
CREATE TABLE table_name ( tid INT PRIMARY KEY AUTO_INCREMENT, tname VARCHAR(50) DEFAULT "无名称任务", ttime_start DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT "任务开始日期", # 默认为当前时间 ttime_end DATETIME COMMENT "任务结束日期", tstate INT COMMENT "任务类型", ttype INT DEFAULT 0 COMMENT "任务运行状态 0 运行中 1 结束运行", ttotal INT DEFAULT 0 COMMENT "任务总量", ttotal_end INT DEFAULT 0 COMMENT "任务完成总量", ttotal_unusual INT DEFAULT 0 COMMENT "任务异常总量", tintroduce VARCHAR(500) COMMENT "注释" ) ENGINE=INNODB; # 这是指定表格引擎
修改表名
ALTER TABLE 旧表名 RENAME TO 新表名;
修改表注释
ALTER TABLE 表名 COMMENT '新注释';
表字段操作
添加
字段:ALTER TABLE 表名 ADD 字段名 新数据类型 新类型长度 新默认值 新注释;
ALTER TABLE table_name ADD title VARCHAR(100) DEFAULT "无标题";
修改
字段类型:ALTER TABLE 表名 MODIFY [COLUMN] 字段名 新数据类型 新类型长度 新默认值 新注释;
alter table table1 modify column column1 decimal(10,1) DEFAULT NULL COMMENT '注释'; alter table table1 modify column1 decimal(10,2) DEFAULT NULL COMMENT '注释'; ## column 关键字可省略
修改
字段名称:ALTER TABLE 表名 CHANGE [column] 旧字段名 新字段名 新数据类型;
alter table table1 change column1 column1 varchar(100) DEFAULT 1.2 COMMENT '注释'; #正常,此时字段名称没有改变,能修改字段类型、类型长度、默认值、注释 alter table table1 change column1 column2 decimal(10,1) DEFAULT NULL COMMENT '注释' #正常,能修改字段名、字段类型、类型长度、默认值、注释 alter table table1 change column2 column1 decimal(10,1) DEFAULT NULL COMMENT '注释' # 正常,能修改字段名、字段类型、类型长度、默认值、注释 alter table table1 change column1 column2; # 报错
删除
字段:ALTER TABLE 表名 DROP [COLUMN] 字段名 ;