MySQL简介及数据库
mysql简介
mysql是一个轻量级关系型数据库管理系统,具有体积小,速度快,开源的优点
sql是一种结构化查询语言(Structured Query Language),专门用来管理和处理关系型数据库的标准化编程语言,mysql实现了SQL标准,使得用户能够使用SQL语言来与MySQL数据库进行交互和操作数据
为什么学习数据库?
1.结构化:数据在数据库中的存储可以依靠二维表结构来逻辑的存储数据,可以参考数据原有的依赖关系和结构关系去存储数据。
2.共享性:多个用户可以共同分享计算机数据库中的数据资源,同一数据可以同时被多人使用,从而实现了数据的高效共享性。
3.独立性:存储在数据库的数据和应用程序之间相互独立,互不影响。数据在磁盘上怎样存储由数据库管理而不依赖于应用程序,这样当数据的物理存储改变了,应用程序不用改变。
4.安全性:数据库在安全性的控制上也有很多措施,比如访问数据库时对用户的口令,用户的权限进行限制,再比如对数据的存储进行限制。
数据库(Database,简称DB)
概念:长期存放在计算机内,有组织、可共享的大量数据的集合,是一个数据“仓库”。
作用:存放、管理数据
分类:关系型数据库、NoSQL数据库。
常见的数据库:redis,MySQL,mongoDB
MySQL特点:
1. 操作便捷
2.小巧,功能齐全
3.免费、开源的数据库
4.可运行于windows或linux系统
MySQL数据库的特点
•开源免费,小巧但功能齐全
•可在Windows和Linux系统上运行
•操作方便,适用于中小型甚至大型网站应用
数据库结构
数据库(Database) | 以文件的形式存放在磁盘上,即对应于一个或多个物理文件。 |
字段(Field) | 也称域。表中的每一列称为一个字段。每个字段都有相应的描述信息。 |
索引(Index) | 索引实际上是一种特殊类型的表,其中含有关键字段的值和指向实际记录位置的指针,可以提高访问数据库的效率。 |
数据表(Table) | 简称表,由一组数据记录组成,数据库中的数据是以表为单位进行组织的。一个表是一组相关的按行排列的数据;每个表中都含有相同类型的信息。 |
记录(Record) | 表中的每一行称为一个记录,它由若干个字段组成。实体 |
SQL语句 | 结构化查询语句命令,用来从一个或多个表中获取一组指定的记录,或者对某个表执行指定的操作。 |
SQL语句分类
SQL语句,即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名。
DDL(数据定义语言):定义和管理数据对象,如数据库,数据表等
命令:CREATE、DROP、ALTER
DML(数据操作语言):用于操作数据库对象中所包含的数据
命令:INSERT、UPDATE、DELETE
DQL(数据查询语言):用于查询数据库数据
命令:SELECT
DCL(数据控制语言):用来管理数据库的语言,包括管理权限及数据更改
命令:GRANT、COMMIT、ROLLBACK
DDL语句操作数据库
创建数据库:CREATE DATABASE 库名
删除数据库:DROP DATABASE 库名
查看数据库:SHOW DATABASES
选择数据库:USE 库名
注:1.sql不区分大小写
2.“_”下划线进行名字分割,不适用驼峰名
3.语句sql结尾写一个“;”分号表示结束
4.一般关键词建议用大写
5.所有名称不允许用中文
DDL创建数据库表
CREATE TABLE 表名(
字段名1 字段类型 属性,
字段名2 字段类型 属性,
......
字段名3 字段类型 属性
);
create table student1( stu_name varchar(10), stu_age tinyint, stu_birthday datetime, stu_id char(18), stu_socre decimal(4,1) );
数据库的字段类型
1.数值型
Decimal(4,1) 0-100 000.0~999.9
int(1) 1000000
tinyint(4) 0010显示位数
2.日期和时间类型
设置当前 创建时间,或者是更新时间时给TIMESTAMP或者DATETIME字段 设置 DEFAULT CURRENT_TIMESTAMP 添加当前默认时间
NULL类型:
• 理解为“没有值”或“未知值”;
• 不要用NULL进行算术运算,结果仍为NULL;
•MySQL中,0或NULL都意味着为假,1为真。
3.字符串类型
char和varchar比较
数据库表的字段注释
查询创建的数据库结构
方式1:describe 表名 或 desc 表名
方式2:show create table 表名
数据库存储引擎
查看当前数据库支持的存储引擎:show engines;
-- DEFAULT NULL 该字段的值可以为空
-- ` 反引号--取消关键性
-- DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci 字符排序
-- ENGINE=InnoDB 非常重要 存储引擎 存储的规则,磁盘叫InnoDB
CREATE TABLE `student1` (
`stu_name` varchar(10) DEFAULT NULL,
`stu_age` tinyint DEFAULT NULL,
`stu_birthday` datetime DEFAULT NULL,
`stu_id` char(18) DEFAULT NULL,
`stu_socre` decimal(4,1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
数据库存储引擎-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区别
修改和删除数据库表
修改表名:
-- alter table 旧表名 reanme as 新表名;
alter table student1 rename as xuesheng;删除字段:
-- 删除字段(危险操作)
-- 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;
use xz3;
-- 方式二 change 能修改 数据类型和属性 还能修改字段名
-- alter table 表名 change 旧字段名 新字段名 要修改类型 要修改属性
alter table xuesheng change stu_qq qq varchar(20) comment"这是新的QQ号";
添加字段:
-- 字符串 '**' 或 "**"
-- alter table 表名 add 新字段名 类型 属性;
alter table xuesheng add stu_qq varchar(10) comment '这是学生的QQ号';删除表:
-- drop table 表名
drop table xuesheng;
三范式
数据库设计的三大范式
一、什么是范式
为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就叫做范式。
二、约束作用
数据库的设计范式是数据库设计所需要满足的规范,满足这些规范的数据库是简洁的、结构明晰的,同时,不会发生插入(insert)、删除(delete)和更新(update)操作异常。
三、三范式
第一范式:确保每列保持原子性
第二范式:确保表中的每列都和主键相关
第三范式:确保每列都和主键列直接相关,而不是间接相关
第一范式(1NF)确保每列保持原子性
1.每一列属性都是不可再分的属性值,确保每一列的原子性
2.两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据
第二范式(2NF)属性完全依赖于主键
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的。即满足第二范式必须先满足第一范式。
第二范式(2NF)要求数据库表中的每个实例或行必须可以被惟一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的惟一标识。这个惟一属性列被称为主键
第三范式(3NF)属性不依赖于其它非主属性属性直接依赖于主键
数据不能存在传递关系,即每个属性都跟主键有直接关系而不是间接关系。
像:a-->b-->c 属性之间含有这样的关系,是不符合第三范式的。
比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样一个表结构,就存在上述关系。 学号--> 所在院校--> (院校地址,院校电话)这样的表结构,我们应该拆开来,如下。
(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)
总结:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。
原文地址:https://blog.csdn.net/m0_74002833/article/details/140530657
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!