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表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)这样一个表结构,就存在上述关系。 学号--> 所在院校--> (院校地址,院校电话)这样的表结构,我们应该拆开来,如下。

(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

总结:三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值