前言
"<数据库原理及应用>(MySQL版)".以下称为"本书"中2.1节和2.2节第一部分内容
引入
本书P40:SQL(Structure Query Language结构化查询语言)是一种在关系数据库中定义和操纵数据的标准语言,是用户和数据库之间进行交流的接口.
---SQL是一种语言,是一种工具,值得欣慰的是如何实现它不用写应用的程序员去关心,会用即可
MySQL8.0安装的两个细节
要操作SQL语言,先安装一个MySQL.某度搜索"MySQL8.0安装",根据其步骤实操有两个地方要注意:
1.在最后finish阶段,"Starting the server 失败"
解决方法:
---不要关闭错误页面:出现红色感叹号时,保持安装界面打开,不要点击取消或关闭按钮。
---打开服务管理界面:
右键点击“计算机”(或“此电脑”),选择“管理”。
在左侧导航栏中依次展开“服务和应用程序”→“服务”,找到名称为“MySQL80”(不同版本可能略有差异,通常以MySQL开头)的服务。
---配置MySQL服务属性:
右键点击“MySQL80”服务,选择“属性”。
在弹出的窗口中切换到“登录”选项卡。
勾选“允许服务与桌面交互”,点击“应用”保存设置
重新执行安装:返回MySQL安装界面,点击“Execute”按钮重新尝试安装,此时“Starting the server”步骤大概率会成功
注:内容为转载,原帖MySQL安装时Starting the server 失败的问题_mysql8.0安装后starting the server不成功-CSDN博客
2.首次登陆mysql的问题
按照常规方法在控制台输入:mysql -u root -p,老是显示错误登陆不成功.原因是此时未设置密码---登陆密码和安装mysql输入的密码不一样.第一次登陆方法:mysql -u root,回车即可登陆.进入sql后可以修改登陆密码
2.1 SQL语言介绍
SQL是一种国际标准
2.1.1SQL数据库的体系结构
图2-1 SQL数据库的体系结构是图1-4的具体表达,在"模式"中添加了索引,内模式有了具体表示.
使用SQL的关系数据库的特点,主要有两点:
1.SQL用户可以是应用程序,也可以是终端用户.它可以独立使用,也可以被嵌入宿主语言如C++,Java等.
2.视图是一个虚表.
---前面提到过"视图"是一个搜索请求,它的结果是一张表.
其余内容了解即可
2.1.2 SQL的特点,是一些文字描述
2.1.3 SQL语言的组成
数据定义语言DDL,数据操纵语言DML和数据控制语言DCL
2.2 数据定义
对数据的概念回顾:前面提到过在数据库中,把"表"看作是数据库的基本数据.而在"表"定义时,"属性"是表的基本单位.综合来说,数据库的基本单位是"属性",利于后面的"数据类型"的理解.
2.2.1数据库的定义和删除
数据库的数据结构分析
本书P42原话:数据库是存放数据的容器,在设计一个应用系统时必须先设计数据库.在MySQL中一个数据库服务器可以包含多个数据库,每个数据库存放在以数据库名字命名的文件夹中,用来存放该数据库中的各种表数据文件.
---这段话有一定信息量,数据库服务器→数据库→表数据文件,简单表示如下图:
笔者写这个的目的是尝试站在高级语言描述:数据库的数据结构.以加深对数据库的理解
/*以下为伪代码*/
//数据库服务器类型定义
struct DataServer{vector<DataBase> dbs;
}//数据库类型定义
struct DataBase{vector<Table> tbs;Folder fdr; //文件夹对象
}//表类型定义
struct Table{vector<Attribute> abs; //属性的动态数组
}
说明如下:
1.根据"每个数据库都存放在以数据库名字命名的文件夹中(本书原话)",定义一个Folder类型表示数据库对象包含一个Folder对象(但没有去实现它).实现的效果可以类比Windows文件夹的效果---再深入一点,文件夹实际上是一个矩阵图形类对象(笔者之前分析过),从效果上来说,相当于未实现的前端.
注意:每个表是单独的数据文件,在使用mysql的一些IDE中,常常能看见"名称.表名"格式的数据.例如"1.stu"---表示写了一个stu类型的表,并命名为1的数据文件.如果按照该格式建立若干表,则表示有若干个数据文件.表和数据文件是一一对应关系.这点很方便操作,数据物理独立性的表现.
2.属性类型Attribute是一个"数据类型的类型",Java中有反射机制似乎能表达它,但C++没有(笔者也不知道底层是怎么实现,所以是伪代码).在<深入理解计算机系统>这本书中有提到,简单想一想:底层有专门的区域来表示数据类型,用指针指向该区域(表示第一个类型),并计算每个类型占用空间,然后指针偏移所占空间的大小,指向下一个类型(第二个类型)---底层都是二进制数,支持指针
回到前面的问题:数据库的数据结构是什么?类似于高度为3的一棵树.为什么高度是3,设计成4可不可以?对应着图2-1把"表空间"单独列为1层.(这段属于笔者个人看法,有待商榷)
=============================内容分割线↓===================================
目前为止,和树相关的几种数据结构:1文件树(Linux),2对象树(Qt),3身份证和4数据库的树.
这些数据结构有一些区别:3和4并不算"树".只是他们的样子长得像树.其中身份证的数据结构归于散列表,要先设计散列算法,根据算法设定了层高.
1,2是真正意义的"树",他们支持递归(递进).树还有二叉树,哈夫曼树等数据结构.
3,4可称为"类树"(类似于树的数据结构).3,4的数据结构有细微差别,笔者以后做个专题分析.
=============================内容分割线↑===================================
数据库的三个指令
本书P43:
建立数据库 CREATE DATABASE 数据库名
选择数据库 USE 数据库名
删除数据库 DROP DATABASE 数据库名
小结
数据库数据结构的分析,数据库定义和删除的指令.