数据类型
1.数字
类型 | 大小 | 说明 |
TINYINT | 1字节 | 小整数 |
SMALLINT | 2字节 | 普通整数 |
MEDIUMINT | 3字节 | 普通整数 |
INT | 4字节 | 较大整数 |
BIGINT | 8字节 | 大整数 |
FLOAT | 4字节 | 单精度浮点数 |
DOUBLE | 8字节 | 双精度浮点数 |
DECIMAL(10,2) | ...... | 精确浮点数 |
2.不精确的浮点数
不精确的浮点数是由于其表示方式、二进制浮点数的精度限制、舍入误差、运算顺序的影响以及机器精度的限制所导致的。在使用浮点数时,需要了解其不精确性,并在必要时采取适当的措施来减少误差。
3.字符串
类型 | 大小 | 说明 |
CHAR | 1~255字符 | 固定长度字符串 |
VARCHAR | 1~65535字符 | 不固定长度字符串 |
TEXT | 1~65535字符 | 不确定长度字符串 |
MEDIUMTEXT | 1~1千6百万字符 | 不确定长度字符串 |
LONGTEXT | 1~42亿字符 | 不确定长度字符串 |
4.日期类型
类型 | 大小 | 说明 |
DATE | 3字节 | 日期 |
TIME | 3字节 | 时间 |
YEAR | 1字节 | 年份 |
DATETIME | 8字节 | 日期时间 |
TIMESTAMP | 4字节 | 时间戳 |
修改表结构
1.添加字段
ALLTER TABLE 表名称
ADD 列1 数据类型 [约束] [COMMENT 注释],
2.修改字段属性
ALLTER TABLE 表名称
MODIFY 列1 数据类型 [约束] [COMMENT 注释],
3.修改字段名字
ALLTER TABLE 表名称
CHANGE 列1 新列名1 数据类型 [约束] [COMMENT 注释],
4.删除字段
ALLTER TABLE 表名称
DROP 列1,
字段约束
1.范式
构造数据库必须遵守一定的规则,这种规则就是范式
目前关系数据库有6种范式,一般情况下,只满足第三范式即可
①第一范式:原子性
数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。
学号 | 姓名 | 班级 | 不符合第一范式 |
1000 | 张三 | 高三年纪1班 |
学号 | 姓名 | 年纪 | 班级 | 符合第一范式 |
1000 | 张三 | 高三年纪 | 1班 |
②第二范式:唯一性
数据表中的每条记录必须是唯一的。为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列 被称作主键列。
学号 | 成绩 | 日期 | 无法区分重复数据 |
1000 | 90 | 20241204 | |
1000 | 90 | 20241204 |
学号 | 成绩 | 日期 | 数据具有唯一性 |
1000 | 90 | 20241204 | |
1001 | 90 | 20241204 |
③第三范式:关联性
每列都与主键有直接关系,不存在传递依赖。
依照第三范式,数据可以拆分保存到不同的数据表,彼此保存关联。
编号 | 姓名 | 性别 | 部门 | 入职日期 |
1 | 张三 | 男 | 01 | 20241204 |
2 | 李四 | 男 | 03 | 20241204 |
编号 | 部门 | 电话 |
01 | 财务部 | 02021 |
02 | 销售部 | 02022 |
03 | 安保部 | 02023 |
2.约束
MySQL中有四种约束:主键约束(PRIMARY KEY)、非空约束(NOT NULL)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)
主键约束
主键约束要求字段的值在全表必须唯一,而且不能为NULL值
建议主键一定要使用数字类型,因为数字的检索速度会非常快
如果主键是数字类型,还可以设置自动增长
CREATE TABLE 表名称(
列名 类型 PRIMARY KEY AUTO_INCREMENT,
);
非空约束
非空约束要求字段的值不能为NULL值
NULL值以为没有值,而不是" "空字符串
CREATE TABLE 表名称(
列名 类型 PRIMARY KEY AUTO_INCREMENT,
列名 类型 NOT NULL,
列名 BOOLEAN NOT NULL DEFAULT FALSE
);
唯一约束
唯一约束要求字段值如果不为NULL,那么在全列必须唯一
CREATE TABLE 表名称(
列名 类型 NOT NULL UNIQUE
);
外键约束
外键约束用来保证关联数据的逻辑关系。
外键约束的定义是写在子表上。
如果形成外键闭环,我们将无法删除任何一张表的记录
索引机制
创建索引
CREATE TABLE 表名称(
.........
INDEX [索引名称](字段),
.........
);
添加和删除索引
创建索引: CREATE INDEX 索引名称 ON 表名(字段);
添加索引: ALTER TABLE 表名称 ADD INDEX [索引名](字段);
查询索引:SHOW INDEX FROM 表名;
删除索引: DROP INDEX 索引名称 ON 表名;
索引使用规则
数据量很大,而且经常被查询的数据表可以设置索引
索引只添加在经常被用作检索条件的字段上面
不要在大字段上创建索引
分页查询
语法结构:SELECT ...... FROM ...... LIMIT 起始位置,偏移量;
如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0。
SELECT name as "题库名称" from question_bank; 是将name名称替换为题目名称
查询结果集排序
如果没有设置,查询语句不会对结果集进行排序。也就是说,如果想让结果集按照某种顺序排列,就必须使用 ORDER BY子句
ASC代表升序(默认),DESC代表降序
如果排序列是数字类型,数据库就按照数字大小排序,如果是日期类型就按照日期大小排序,如果是字符串就按照
字符集序号排序 如果排序列值相同,默认按照主键排列