关系型数据库系统是指使用了关系模型的数据库系统,关系模型中,数据是分类存放的,数据之间可以有联系。
NoSQL数据库指的是数据分类存放,但是数据之间没有关联关系的数据库系统,可与关系型数据库互补,如秒杀超卖。
NoSQL数据库没有严格的表结构,数据读写没有那么多的校验,读写速度快于关系型数据库,如用户登录信息,网站消息通知。
软件工具:MySQL、数据库管理工具navicat premium、代码编辑器VScode和nodepad++。
一、MySQL数据库安装与配置
用户管理
用户名:dev(开发者)
主机:%(可使用任意ip地址的主机使用该数据库)
navicat操作完成后别忘了保存
如何修改root密码
MySQL配置文件
在my.ini文件中,我们可以设置各种MySQL的配置
my.ini [client]
[mysql] 这俩负责客户端配置信息
[mysqld] 数据库配置信息
my.ini位置:C:\ProgramData\MySQL\MySQL Server 8.0
二、MySQL表操作
SQL是用于访问和处理数据的标准的计算机语言
SQL语言分类 1. DML 添加 修改 删除 查询
2. DCL 用户 权限 事务
3. DDL 逻辑库 数据表 视图 索引
SQL语句不区分大小写,但是字符串区分大小写
SQL语句必须以分号结尾
SQL语句中的空白和换行没有限制,但是不能破坏语法
SQL注释 #单行注释
关键字大写,非关键字小写,字符串该大则大,该小则小,表名可用英文、英文加数字,但不可使用中文
真实存在的表,表名t_xxx,像视图,表名则写为v_xxx
/*多行注释*/
创建逻辑空间 (等同于创建文件夹)
SHOW DATABASES;
CREATE DATABASE demo;
DROP DATABASE demo;
使用逻辑库
USE test;
创建数据表 (创建.ibd文件)
CREATE TABLE 数据表(
列名1 数据类型 [约束] [注释],
列名2 数据类型 [约束] [注释]
)[注释];
CREATE TABLE student(
id INT UNSIGNED PRIMARY KEY, 无符号整数确保学号不会出现负数,主键确保学号不会重复
name VARCHAR(20) NOT NULL, 不定长度20个字符以内
sex CHAR(1) NOT NULL, 固定长度1个字符
birthday DATE NOT NULL,
tel CHAR(11) NOT NULL,
remark VARCHAR(200)
);
增 INSERT INTO student VALUES(1,"李强","男","1995-07-09","15024733460",null);
SHOW tables;
DESC student; 数据表详情
SHOW CREATE TABLE student; 查看创建时所用SQL语句
DROP TABLE student;
数据类型:数字
类型 大小 说明
TINYINT 1字节 小整数
SMALLINT 2字节 普通整数
MEDIUMINT 3字节 普通整数
INT 4字节 较大整数
BIGINT 8字节 大整数
FLOAT 4字节 单精度浮点数
DOUBLE 8字节 双精度浮点数
DECIMAL DECIMAL(10,2) 整数位加小数位一共10位,精确到小数点后2位,可以自定义。并非将十进制转换成二进制再存储,而是转换成字符串存储,所以万无一失。
十进制的整数转换成二进制的整数不会损失精度。
十进制的浮点数无法再计算机中用二进制精确表达。
例如用二进制小数表示十进制的0.2,1/8+1/16+1/128+...无限逼近但不等于。
数据类型:字符串
类型 大小 说明
CHAR 1-255字符 固定长度字符串
VARCHAR 1-65535字符 不固定长度字符串
TEXT 1-65535字符 不确定长度字符串
MEDIUMTEXT 1-1千6百万字符 不确定长度字符串
LONGTEXT 1-42亿字符 不确定长度字符串
前两个加小括号
数据类型:日期类型
类型 大小 说明
DATE 3字节 日期
TIME 3字节 时间
YEAR 1字节 年份
DATETIME 8字节 日期时间
TIMESTAMP 4字节 时间戳
插入数据时要加引号,中间用-隔开
修改表结构
添加字段
ALTER TABLE 表名称
ADD 列1 数据类型 [约束] [注释],
ADD 列2 数据类型 [约束] [注释];
修改已有字段、约束、注释
ALTER TABLE 表名称
MODIFY 列1 数据类型 [约束] [注释],
MODIFY 列2 数据类型 [约束] [注释];
修改字段名称
ALTER TABLE 表名称
CHANGE 列1 新列名1 数据类型 [约束] [注释],
CHANGE 列2 新列名2 数据类型 [约束] [注释];
删除字段
ALTER TABLE 表名称
DROP 列1,
DROP 列2;
数据库的范式
构造数据库必须遵循一定的规则,这种规则就是范式
目前关系数据库有6种范式,一般情况下,只满足第三范式即可
第一范式:原子性
第一范式是数据库的基本要求,不满足这一点就不是关系数据库
数据表的每一列都是不可分割的基本数据项,同一列中不能有多个值,也不能存在重复的属性。
第二范式:唯一性
数据表中的每条记录必须是唯一的,为了实现区分,通常要为表加上一个列用来存储唯一标识,这个唯一属性列被称作主键列
第三范式:关联性
每列都与主键有直接关系,不存在传递依赖
依照第三范式,数据可以拆分保存到不同的数据表,彼此保持关联
字段约束
MySQL中的字段约束共有四种:
约束名称 关键字 描述
主键约束 PRIMARY KEY 字段值唯一,且不能为NULL
非空约束 NOT NULL 字段值不能为NULL 后面可以加DEFAULT
唯一约束 UNIQUE 字段值唯一,且可以为NULL
外键约束 FOREIGN KEY 保持关联数据的逻辑性
建议主键一定要使用数字类型,因为数字的检索速度会非常快
如果主键是数字类型,还可以设置自动增长
CREATE TABLE teacher(
id INT PRIMARY KEY AUTO_INCREMENT,
......
);
sex ENUM("男","女") NOT NULL, 枚举类型,只能从中选一个存储
外键约束的定义是写在子表上的
FOREIGN KEY (A属性)REFERENCES 父表表名(A属性)
如果形成外键闭环,我们将无法删除任何一张表的记录,所以不推荐使用外键
如何创建索引
CREATE TABLE 表名称(
...,
INDEX [索引名称] (字段),
......
);
主键(整型)自带索引,索引利用二叉树的二分查找可以大大提高查找数据的速度
添加索引
CREATE INDEX 索引名称 ON 表名 (字段);
ALTER TABLE 表名称 ADD INDEX [索引名] (字段);
查看索引
SHOW INDEX FROM 表名;
删除索引
DROP INDEX 索引名称 ON 表名;
索引的使用原则
数据量很大,而且经常被查询的数据表可以设置索引
索引只添加在经常被用作检索条件的字段上面
不要在大字段上创建索引