深入MySQL的使用
一、数据类型
1.数值类型
1.整型
UNSIGNED(无符号) 主要用于整型和浮点类型,使用无符号。即,没有前面面的-(负号)。
存储位数更长。tinyint整型的取值区间为,-128~127。而使用无符号后可存储0-255个长度。创建时在整型或浮点字段语句后接上:
Unsigned
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
tinyint | 1字节 | -128~127 |
smallint | 2字节 | -32768~32767 |
mediumint | 3字节 | -8388608~8388607 |
int | 4字节 | 范围-2147483648~2147483647 |
bigint | 8字节 | ±9.22*10的18次方 |
2.浮点类型
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
float(m, d) | 4字节 | 单精度浮点型,m总个数,d小数位 |
double(m, d) | 8字节 | 双精度浮点型,m总个数,d小数位 |
decimal(m, d) | decimal是存储为字符串的浮点数 |
3.字符类型
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-255字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过255个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65535字节 | 二进制形式的长文本数据 |
TEXT | 0-65535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
VARBINARY(M) | 允许长度0-M个字节的定长字节符串 | 值的长度+1个字节 |
BINARY(M) | M | 允许长度0-M个字节的定长字节符串 |
2.时间类型
注意:
1.时间类型在web系统中用的比较少,很多时候很多人喜欢使用int来存储时间。插入时插入的是unix时间戳,因为这种方式更方便计算。在前端业务中用date类型的函数,再将unix时间戳转成人们可识别的时间。
2.上面的类型你可以根据实际情况实际进行选择有些人为了在数据库管理中方便查看,也有人使用datetime类型来存储时间。
MySQL数据类型 | 所占字节 | 值范围 |
---|---|---|
date | 3字节 | 日期,格式:2014-09-18 |
time | 3字节 | 时间,格式:08:42:30 |
datetime | 8字节 | 日期时间,格式:2014-09-18 08:42:30 |
timestamp | 4字节 | 自动存储记录修改的时间 |
year | 1字节 | 年份 |
二、约束
约束是一种限制,它通过对表的行或列的数据做出限制,来确保表的数据的完整性、唯一性。
1.主键约束 primary key
主键约束相当于 唯一约束 + 非空约束 的组合,主键约束列不允许重复,也不允许出现空值。
每个表最多只允许一个主键,建立主键约束可以在列级别创建,也可以在表级别创建。
当创建主键的约束时,系统默认会在所在的列和列组合上建立对应的唯一索引。
# 添加主键约束
CREATE TABLE student(
id INT(32) PRIMARY KEY auto_increment,
name VARCHAR(32),
sex VARCHAR(32),
age INT(3),
salary FLOAT(8,2),
course VARCHAR(32)
)
# 查询所有字段
SELECT * FROM student;
# 删除主键约束
ALTER TABLE student DROP PRIMARY KEY;
2.唯一约束
含义:该字段上的数据不能重复,但可以为null
注意:一张表中可以有多个唯一约束
# 唯一约束
# 添加唯一约束
ALTER TABLE student ADD UNIQUE(phone);
# 修改唯一约束
ALTER TABLE student MODIFY name VARCHAR(32) UNIQUE;
# 删除唯一约束
ALTER TABLE student DROP INDEX name;
3.非空约束
含义:该字段上的数据不能为null
注意:一张表中可以有多个非空约束
# 非空约束
# 添加非空约束
ALTER TABLE student MODIFY name VARCHAR(32) NOT NULL;
# 删除非空约束
ALTER TABLE student MODIFY name VARCHAR(32) NULL;
# 默认值
ALTER TABLE student MODIFY `name` VARCHAR(32) DEFAULT "defaultName" NULL;
4.外键约束
含义:外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照关系
外键的缺点:添加数据还会去外键所在的表中查询,效率很低
# 外键约束
# 添加外键约束
ALTER TABLE student ADD FOREIGN KEY(c_id) REFERENCES class(id);
# 删除外键约束
# 注意:获取外键名--SHOW CREATE TABLE student;
ALTER TABLE student DROP FOREIGN KEY student_ibfk_1;
三、索引
索引用于快速找出在某个列中有一特定值的行。
当然索引也不易过多,索引越多写入,修改的速度越慢。因为,写入修改数据时,也要修改索引。