数据库是一切企业级项目必不可少的重要组成部分。目前最流行的开源数据库是 mysql。
操作系统中数据存放的载体是文件,Windows、Linux 和 MacOS 都是基于文件的操作系统。
数据库系统是指一个能为用户提供信息服务的系统。它实现了有组织地、动态地储存大量相关数据的功能,提供了数据处理和信息资源共享的便利手段。
数据库,顾名思义,就是用来存放数据的。数据库系统分为关系型数据库系统和非关系型数据库系统,关系型数据库系统是指使用了关系模型的数据库系统。关系模型中,数据是分类存放的,数据之间可以有关联关系。
关系型数据库可以有效组织和管理大量复杂的数据,所以关系型数据库才是最重要的数据库产品。主流的关系型数据库有 db2、oracle、mysql、sql server等。
非关系型数据库,也称为 nosql 数据库,非关系型数据库系统指的是数据分类存放,但是数据之间没有关联关系的数据库系统。关系型数据库并不适合所有的业务场景,非关系型数据库可以作为关系型数据库的补充。主流的非关系型数据库由 redis、memcache、mongodb等。
mysql 是当前应用最广泛、普及度最高的开源关系型数据库。
mysql 官网:https://www.mysql.com,下载地址:https://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-8.0.26.0.msi
在 mysql 官网下载 msi 安装包,Windows 系统下一步步安装即可,此处省略此过程。mysql 图形工具建议使用 Navicat。
mysql 默认的端口号是 3306,生产环境下为了安全可以更改此端口号。
sql 是用于访问和处理数据的标准的计算机语言。
sql 语言可以分为 3 类:DML(增删改查)、DCL(用户、权限、事务)、DDL(逻辑库、数据表、视图、索引)。
使用 sql 语句需要注意:
sql 语句不区分大小写,但是字符串区分大小写 sql 语句必须以 ; 结尾 sql 语句中的空格和换行没有限制,但是不能破坏语法
sql 语句的注释有两种,分别如下:
单行注释:# 这是一段注释文字 多行注释:/* 这是另一段注释文字 */
CREATE DATABASE 逻辑库名称; #创建数据库 SHOW DATABASES; #查看所有数据库 DROP DATABASE 逻辑库名称; #删除数据库
CREATE TABLE 数据表名称 ( 列名1 数据类型 [约束] [COMMENT 注释], 列名2 数据类型 [约束] [COMMENT 注释], ... ) [COMMENT = 注释]; #创建数据表,[] 表示可省略 SHOW TABLES; #查看当前数据库下所有数据表 DESC 数据表名称; #查看数据表结构 SHOW CREATE TABLE 数据表名称; #查看创建数据表时的语句 DROP TABLE 数据表名称; #删除数据表
数据类型:数字
类型 | 大小 | 说明 |
---|---|---|
TINTINT | 1 字节 | 小整数 |
SMALLINT | 2 字节 | 普通整数 |
MEDIUMINT | 3 字节 | 普通整数 |
INT | 4 字节 | 较大整数 |
BIGINT | 8 字节 | 大整数 |
FLOAT | 4 字节 | 单精度浮点数 |
DOUBLE | 8 字节 | 双精度浮点数 |
DECIMAL | — | DECIMAL(10, 2) |
数据类型:字符串
类型 | 大小 | 说明 |
---|---|---|
CHAR | 1~255 字节 | 固定长度字符串 |
VARCHAR | 1~65535 字节 | 不固定长度字符串 |
TEXT | 1~65535 字节 | 不确定长度字符串 |
MEDIUMTEXT | 1~2^24 字符 | 不确定长度字符串 |
LONGTEXT | 1~2^32 字符 | 不确定长度字符串 |
数据类型:日期
类型 | 大小 | 说明 |
---|---|---|
DATE | 3 字节 | 日期 |
TIME | 3 字节 | 时间 |
YEAR | 1 字节 | 年份 |
DATETIME | 8 字节 | 日期时间 |
TIMESTAMP | 4 字节 | 时间戳 |
ALTER TABLE 数据表名称 ADD 列名1 数据类型 [约束] [COMMENT 注释], ADD 列名2 数据类型 [约束] [COMMENT 注释], ...; #添加字段,[] 表示可省略 ALTER TABLE 数据表名称 MODIFY 列名1 数据类型 [约束] [COMMENT 注释], MODIFY 列名2 数据类型 [约束] [COMMENT 注释], ...; #修改字段类型和约束,[] 表示可省略 ALTER TABLE 数据表名称 CHANGE 列名1 新列名1 数据类型 [约束] [COMMENT 注释], CHANGE 列名2 新列名2 数据类型 [约束] [COMMENT 注释], ...; #修改字段名称,[] 表示可省略 ALTER TABLE 数据表名称 DROP 列名1, DROP 列名2, ...; #删除字段
构造数据库必须遵循一定的规则,这种规则就是范式。一般情况下,只满足第三范式即可。
第一范式:原子性 数据库表中的所有字段都只具有单一属性,单一属性的列是由基本的数据类型所构成的,设计出来的表都是简单的二维表 第二范式:唯一性 要求一个表中只具有一个业务主键,也就是说符合第二范式的表中不能存在非主键列只对部分主键的依赖关系 第三范式:关联性 指每一个非主键属性既不部分依赖也不传递依赖于业务主键,也就是在第二范式的基础上消除了非主属性对主键的传递依赖
mysql 中的字段约束有 4 种:
约束名称 | 关键字 | 描述 |
---|---|---|
主键约束 | PRIMARY KEY | 字段值唯一,且不能为 NULL |
非空约束 | NOT NULL | 字段值不能为 NULL |
唯一约束 | UNIQUE | 字段值唯一,且可以为 NULL |
外键约束 | FOREIGN KEY | 保持关联数据的逻辑性 |
主键约束:
主键约束要求字段的值在全表必须唯一,而且不能为 NULL 建议主键一定要使用数字类型,因为数字的检索速度会非常快 如果主键是数字类型,还可以设置自动增长(AUTO_INCREMENT)
非空约束:
非空约束要求字段的值不能为 NULL NULL 表示没有值,而不是空字符串 ''
唯一约束:
唯一约束要求字段值如果不为 NULL,那么在全表必须唯一
外键约束:
外键约束用来保证关联数据的逻辑关系 外键约束的定义时写在子表上的,关联父表的字段
外键约束如果形成外键闭环,将无法删除任何一张表的记录。一般情况下,不建议使用外键约束。
一旦数据排序之后,查找的速度就会翻倍,现实世界跟程序世界都是如此。
对于需要频繁查找且不是主键的字段,应该给该字段添加索引,索引可以大大提高查找的速度。
CREATE TABLE 数据表名称 ( 列名1 数据类型 [约束] [COMMENT 注释], 列名2 数据类型 [约束] [COMMENT 注释], INDEX [索引名称] (字段), ... ) [COMMENT = 注释]; #创建数据表并添加索引,字段即列名,[] 表示可省略
CREATE INDEX 索引名称 ON 数据表名称(字段); #添加索引,字段即列名 ALTER TABLE 数据表名称 ADD INDEX [索引名称](字段); #添加索引,字段即列名 SHOW INDEX FROM 数据表名称; #查看数据表中的所有索引 DROP INDEX 索引名称 ON 数据表名称; #删除索引
索引的使用原则:
数据量很大,而且经常被查询的数据表可以设置索引 索引只添加在经常被用作检索条件的字段上面 不要在大字段上创建索引