mysql数据库管理和数据类型,索引机制

1.数据库管理
DDL操作,修改表结构
如增加字段,修改字段类型/约束/注释,修改字段名,删除字段,sql语句如下

# 增加字段
ALTER TABLE student
ADD address VARCHAR(200) not null,
ADD home_tel CHAR(11) NOT NULL;

# 修改字段类型,约束,注释
ALTER TABLE student
MODIFY home_tel VARCHAR(20) NOT NULL;

# 修改字段名
ALTER TABLE student
CHANGE address home_address VARCHAR(200) not null;

# 删除字段
ALTER TABLE student
DROP home_address,
DROP home_tel;

中间可以通过desc student;来查看修改前后的变化

2.数据类型
数字型一般使用int即可,4个字节,精准保存浮点数时,使用DECIMAL,将数字保存为字符串,就不会缺失一些小数点后的数
如果使用double或者float类型,小数点后面只是无限接近,不能真正等于这个小数,小数点后一位为1时,是1/2,小数点后第二位为1时,是1/4,以此类推
可以在navicat上演示:

CREATE TABLE temp(
id INT UNSIGNED PRIMARY KEY,
num float(20,10)
);

此时的num字段,保留小数点后10位,往表中添加数据时,num填入0.2,保存之后得到的是:
精确小数
并不等于0.2,当小数点位数取比较多(此处保留小数点后10位)时能明显看出

当使用decimal类型保存数据时:

CREATE TABLE temp(
id INT UNSIGNED PRIMARY KEY,
num DECIMAL(20,10)
);

此时num输入0.2并保存时:
精确小数
此时保存的是准确的浮点数

字符串一般使用char或者varchar,后面带一个括号指定最大的字符长度
text,mediumtext,longtext是不确定字符串长度,以此类型定义字段时不能指定最大字符长度,一般不使用,如果需要存储这么长的字符串,建议用nosql
另外补充一个枚举的数据类型,sex enum('男','女') not null;,代表sex这个字段只能从男/女这个范围中选
mysql默认将boolean布尔型转称tinyint类型,true用1代替,false用0代替
可以在建表时,设置married boolean not null default false,代表married这个字段为“布尔型”,非空,默认为false
布尔型

3.索引机制
需要满足范式
第一范式:原子性,不满足此范式就不是关系型数据库
第二范式:唯一性,要有表明该记录不重复的字段,即唯一标识:主键
第二范式

第三范式:关联性,除了和主键有依赖,其余字段之间不能有传递依赖关系,
一般要满足第三范式即可,满足此范式,检索速度也会快一些,根据主键来检索,速度是快的,主键一般用整数类型
数据库有以下几个约束:主键约束,外键约束,唯一约束,非空约束
主键约束包含了唯一(unique)和非空(not null)的限制
一般不使用外键约束
外键约束,涉及两种角色,一种是父表,一种是子表,外键约束一般写在子表上。假设父表上的某一个记录与子表有关联,要想删除该记录,就需要先删除子表中相关的记录。
如此,大数据的操作下,可能会产生外键闭环,想要删除a就需要先删除b,想要删除b,就需要先删除c,想要删除c,就需要先删除a,构成这样的闭环,表中的数据就无法删除
因此,不建议使用外键约束

默认主键有加索引,所以根据主键查询会更快,毕竟排序过
但其他字段就不一定有索引了,如姓名,如果给姓名增加索引,同姓氏的名字会排在一个一起(集中区域),所以查找时,就不再是全表查询,而是范围查找
添加索引,可以在建表时创建,也可以在建表之后再添加:

# 在创建表时添加索引
create table t_message(
id int UNSIGNED PRIMARY key,
content VARCHAR(200) not null,
type enum('公告','通报','个人通知') not null,
create_time TIMESTAMP not null,
INDEX idx_type (type)
);
# 删除索引
drop INDEX idx_type on t_message;
# 查看索引
show index from t_message;
# 在创建之后添加索引
# 方式一
create index idx_type on t_message(type);
# 方式二
alter table t_message add index idx_type (type);

查看索引如下:
索引
默认主键是有添加索引的

猜你喜欢

转载自blog.csdn.net/qq_43523725/article/details/108401200