数据库
数据库(Database,简称DB)
概念: 长期存放在计算机内,有组织、可共享的大量数据的集合,是一个 数据“仓库” 。
作用:存放、管理数据
分类:关系型数据库、NoSQL数据库。
数据库优点
结构化:数据在数据库中的存储可以依靠二维表结构来逻辑的存储数据,可以参考数据原有的依赖关系和结构关系去存储数据。
共享性:多个用户可以共同分享计算机数据库中的数据资源,同一数据可以同时被多人使用,从而实现了数据的高效共享性。
独立性:存储在数据库的数据和应用程序之间相互独立, 互不影响。数据在磁盘上怎样存储由数据库管理而不依赖于应用程序,这样当数据的物理存储改变了,应用程序不用改变。
安全性:数据库在安全性的控制上也有很多措施,比如访问数据库时对用户的口令,用户的权限进行限制,再比如对数据的存储进行限制。
MySQL
特点:操作便捷。小巧,功能齐全。免费,开源的数据库,可运行于Windows或Linux系统
MySQL服务启动
命令行方式启动
• 1、在MySQL安装路径下,打开cmd 控制台
• 2、输入net start mysql即可启动服务
• 3、输入net stop mysql即可关闭服务
可视化方式启动
• 1、选择计算机(我的电脑)右击鼠标选 择“管理”>“服务和应用程序”> 服务
• 2、找到MySQL服务,右键“启动”
数据库结构
数据库(Database):以文件的形式存放在磁盘上,即对应于一个或多个物理文件。
数据表(Table):简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。
字段(Field):也称域。表中的每一列称为一个字段。每个字段都有相应的描述信息。
记录(Record):表中的每一行称为一个记录,它由若干个字段组成。实体
索引(Index):索引实际上是一种特殊类型的表,其中含有关键字段的值和指向实际记录位置的指针,可以提高访问数据库的效率。
SQL语句:结构化查询语句命令,用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的操作。
SQL语句分类
SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一 种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库 脚本文件的扩展名。
DDL(数据定义语言):定义和管理数据对象,如数据库,数据表等,
命令:CREATE、DROP、ALTER
DML(数据操作语言):用于操作数据库对象中所包含的数据
命令:INSERT、UPDATE、DELETE
DQL(数据查询语言):用于查询数据库数据
命令:SELECT
DCL(数据控制语言):用来管理数据库的语言,包括管理权限及数据更改
命令:GRANT、COMMIT、ROLLBACK
DDL语句操作数据库
#库
创建数据库:CREATE DATABASE [IF NOT EXISTS] dbnam
删除数据库:DROP DATABASE [IF EXISTS] dbname
查看数据库:SHOW DATABASES
选择数据库:USE dbname
数据库表的字段类型
数据库存储引擎
查看当前数据库支持的存储引擎: show engines;
数据库存储引擎-InnoDB
• MySQL从3.23.34a开始就包含InnoDB存储引擎。大于等于5.5之后,默认采用InnoDB引擎。
• InnoDB是MysQL的默认事务型引擎,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。
• 除了增加和查询外,还需要更新、删除操作,那么,应优先选择InnoDB存储引擎。
• 除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
• 数据文件结构:
• 表名.frm存储表结构(MySQL8.0时,合并在表名.ibd中)。
• 表名.ibd存储数据和索引
• InnoDB是为处理巨大数据量的最大性能设计。
• 在以前的版本中,字典数据以元数据文件、非事务表等来存储。现在这些元数据文件被删除了。比如: .frm,.par , .trn ,.isl, .db.opt等都在MySQL8.0中不存在了。
• 对比MylISAM的存储引擎,InnoDB写的处理效率差一些,并且会占用更多的磁盘空间以保存数据和索引。
• MyISAM只缓存索引,不缓存真实数据;InnoDB不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响
数据库存储引擎-MyISAM
• MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务、行级锁、外键,有一个毫无疑问的缺陷就是崩溃后无法安全恢复。
• 5.5之前默认的存储引擎
• 优势是访问的速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用
• 针对数据统计有额外的常数存储。故而count(*)的查询效率很高
• 数据文件结构:
• 表名.frm存储表结构。
• 表名.MYD存储数据(MYData)。
• 表名.MYI存储索引 (MYIndex)
• 应用场景:只读应用或者以读为主的业务
数据库存储引擎-MyISAM 和InnoDB区别
# 表
-- 查看所有的表
show tables;
-- 创建表
-- create table 表名(
-- 字段名 类型 属性,
-- 字段名 类型 属性,
-- ...
-- 字段名 类型 属性
-- );
create table student(
stu_name varchar(10),
stu_age tinyint,
stu_birthday datetime,
stu_id char(18),
stu_score decimal(4,1)
);
-- 查看表结构
-- 方式一
-- desc 表名
desc student;
-- 方式二
show create table student;
-- ` 反引号 -- 取消关键性
-- DEFAULT NULL 该字段的值可以为空
-- DEFAULT CHARSET=utf8mb4 字符集
-- COLLATE=utf8mb4_0900_ai_ci 字符排序
-- ENGINE=InnoDB 非常重要 存储引擎
CREATE TABLE `student` (
`stu_name` varchar(10) DEFAULT NULL,
`stu_age` tinyint(4) DEFAULT NULL,
`stu_birthday` datetime DEFAULT NULL,
`stu_id` char(18) DEFAULT NULL,
`stu_score` decimal(4,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
-- 查看所有支持的存储引擎
show engines;
-- 表结构修改
-- alter table 表名 关键词 数据;
-- 关键词 rename as add drop modify change
-- 修改表名
-- alter table 旧表名 rename as 新表名;
alter table student rename as xuesheng;
-- 添加字段
-- 字符串 'xxx' "xxx"
-- alter table 表名 add 新字段名 类型 属性;
alter table xuesheng
add stu_qq varchar(20) comment '这是学生的qq号'
-- 删除字段(危险操作)
-- alter table 表名 drop 字段名;
alter table xuesheng drop stu_age;
-- 修改字段
-- 覆盖式,
-- 1.一定的默认值
-- 2.如果已经存在具体数据--数据是可以做隐式转换的
-- 方式一 modify 只能修改 数据类型 和 属性
-- alter table 表名 modify 字段名 要修改的类型 要修改的属性;
alter table xuesheng modify stu_name varchar(100);
alter table xuesheng modify stu_qq int;
-- 方式二 change 数据类型 和 属性 还可以修改字段名
-- alter table 表名 change 旧字段名 新字段名 要修改类型 要修改属性;
alter table xuesheng
change stu_qq qq varchar(20) comment '这是qq号';
-- 删除表(危险操作)
-- drop table 表名
drop table xuesheng;
数据库设计的三大范式
范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。 在关系型数据库中这种规则就叫做范式。
约束作用
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结 构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。
三范式
第一范式:确保每列保持原子性
1.每一列属性都是不可再分的属性值,确保每一列的原子性
2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据
第二范式:确保表中的每列都和主键相关
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的。即满足第二范式必须先满足第一范式。
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表 加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键
第三范式:确保每列都和主键列直接相关,而不是间接相关
总结:
三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。
如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库
表约束
约束实际上就是表中数据的限制条件
约束作用 :表在设计的时候加入约束的目的就是为了保证表中的记录完整和有效
约束种类
非空约束(not null)
唯一性约束(unique)
主键约束(primary key) PK
外键约束(foreign key) FK
检查约束(目前MySQL不支持、Oracle支持)
约束的添加
添加非空约束
alter table 表名 modify test_student char(10) not null;
添加唯一约束
alter table 表名 add unique(表字段名,字段,字段,字段);
添加主键约束
alter table 表名 add primary key(表的字段名,字段,字段);
添加外键约束
alter table 表名 add constraint N1 foreign key (表字段名) references 父表(父表字段名);
约束的删除
删除not null约束
alter table 表名 modify 列名 类型;
删除unique约束
alter table 表名 drop index 唯一约束名;
删除primary key约束
alter table 表名 drop primary key;
删除foreign key约束
alter table 表名 drop foreign key 外键名;