文章目录
数据库简介
关系型数据(SQL)
关系型数据库,是指采用了关系模型来组织数据的数据库,从语言功能层面来讲,一般是指用 SQL 语言来进行操作管理的关系型数据库。常用的关系型数据库有 MySQL、Oracle、SQLServer、PostGreSQL。
非关系型数据库(NoSQL)
NoSQL 通常指的是 non-relational ,也可以理解为 Not Only SQL,泛指非关系型数据库。常见的非关系型数据库有 MongDB、HBase、Redis
新型数据库(NewSQL)
NewSQL 是对各种新的可扩展/高性能数据库的简称,这类数据库不仅具有 NoSQL 对海量数据的存储管理能力,还保持了传统数据库支持 ACID 和 SQL 等特性。常见的 NewSQL 有 Google Spanner/F1、阿里 OceanBase、腾讯 TDSQL、TiDB、Cockroach。
MySQL优点:
运行速度快:MySQL 体积小,命令执行的速度快;
使用成本低:MySQL 是开源的,且提供免费版本,对大多数用户来说大大降低了使用成本;
使用容易:与其他大型数据库的设置和管理相比,其复杂程度较低,易于使用;
可移植性强:MySQL 能够运行与多种系统平台上,如 Windouws,Linux,Unix 等;
适用更多用户:MySQL 支持最常用的数据管理功能,适用于中小型企业甚至大型网站应用。
MySQL 缺点:
MySQL 最大的缺点是其安全系统,主要是复杂而非标准,另外只有到调用 mysqladmin 来重读用户权限时才发生改变;
MySQL 没有一种存储过程(Stored ProcedureStored Procedure)语言,这是对习惯于企业级数据库的程序员的最大限制;
MySQL不支持热备份;
MySQL 的另一个主要的缺陷之一是缺乏标准的 RI(Referential Integrity-RI)机制;Rl 限制的缺乏(在给定字段域上的一种固定的范围限制)可以通过大量的数据类型来补偿;
基础指令
首先需要cd到安装Mysql的位置
-
登录:
mysql -uroot -p -P3306 -hlocalhost
命令中的 “-u” 后面表示登录用户名,"-p" 表示密码单独输入,"-P" 表示端口号,"-h" 表示主机地址,出现如下图所示表示需要输入密码 -
创建子账号:
create usee 'test'@'localhost' identified by '123456';
创建一个子账号,可以给以不同的权限,并且给定密码。 -
退出:
quit;
-
展示全部的数据库:
show databases;
-
新建数据库:
create database try_batabase;
-
删除数据库:
drop database try_batabase;
-
选中数据库:
use try_batabase;
-
展示表:
show tables;
Mysql的数据库类型
整数类型
浮点型
float
,double
,decimal
。
实际应用中要根据字段在业务中实际表示的含义来选择数值字段数据类型,例如年龄字段 age 选择无符号 TINYINT 类型,金额数值对精度要求比较高,所以选择 DECIMAL 类型比较合适,时间戳类型使用 INT,对于数据量比较大的表的自增主键 id 可选择 BIGINT,具体字段类型的选择,还需要根据实际情况来综合分析,合理选择即可,字段的默认值尽量避免 NULL。
日期和时间类型
字符串类型
枚举类
二进制类型
设计数据表
一个数据表主要包含信息有 : 表名、主键、字段、数据类型、索引,本节主要介绍表的命名规范、字段命名、字段的数据类型选择。
数据表命名规范
数据表命名是小写字母和下划线 _ 组成,用来分割不同单词之间的含义,例如 “student_course” 表示学生选课关联表,实际命名需要根据具体功能而定,好的命名规范在实际工作中也是很重要的。
CREATE TABLE `student_course` ( # 其中 “student_course” 为表名称
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # “UNSIGNED” 表示无符号,“AUTO_INCREMENT” 表示自增
`student_id` int(10) UNSIGNED NOT NULL DEFAULT 0,# "NOT NULL DEFAULT 0 "表示默认不为空,且默认值为 0 。
`course_id` int(10) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (`id`)# 表示设置 “id” 为业务主键
);
第一设计范式
第一设计范式要求表中字段都是不可再分的,如果实体中的某个属性有多个值时,必须拆分为不同的属性 。通俗理解即一个字段只存储一项信息。
第二范式
第二设计范式要求表中必须存在业务主键,并且全部非主键依赖于业务主键。
第三范式
第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主键字段。很多时候我们为了满足第三范式往往会把一张表分成多张表。即满足第二范式前提**,如果某一属性依赖于其他非主键属性,而其他非主键属性又依赖于主键,那么这个属性就是间接依赖于主键**,这被称作传递依赖于主属性。 通俗解释就是一张表最多只存两层同类型信息。
下图就不符合
应该拆分为
反范式设计
没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,提高读性能,就必须降低范式标准,适当保留冗余数据。具体做法是: 在概念数据模型设计时遵守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。
数据表的方法
修改表名
- 修改表名
alter