1.数据库的安装
step1:从mysql官网下载安装包
然后解压文件,我是为了防止有其他问题出现,解压到了c盘。
step2:找到mysql的安装目录(我的是c:\mysql),在当前文件夹下创建配置文件my.ini,内容如下:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\\mysql #(这个是自己的mysql安装目录)
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=C:\\web\\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
setp3:启动mysql,以管理员身份打开cmd 命令行工具,切换目录:cd到mysql\bin
初始化数据库:
mysqld --initialize --console
执行完成后,会输出 root 用户的初始默认密码,如:
...
2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ
...
APWCY5ws&hjQ 就是初始密码,后续登录需要用到,你也可以在登陆后修改密码。
输入以下安装命令:
mysqld install
启动输入以下命令即可:
net start mysql
step4:登录mysql,(踩坑记录emmm...)
我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:
mysql -u root -p
成功之后提示:
Enter password:
此时输入自己专属的初始密码(一定要输对啊,同志们,我就是在这卡了还长时间,以为是自己哪出错了,一直在瞎搞,其实只要输对了就ok了,不说了,我知道是自己密码没输对的原因之后,想惩罚自己不准吃饭。。。)
step5:修改原始密码,继续踩坑。。。
我是在网上找的方法,但是第一步就出现下面的错误
mysql> use mysql;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
原因是:提示你第一步要做的就是修改原始代码,否则不能继续进行啊啊,不管那么多,直接去修改代码吧
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
密码改好了 ,继续去尝试登录代码,能成功登录即可。
但是利用navicat图形化显示时,又出幺蛾子了
经过大佬点拨,知道是密码的加密方式不一样,采用下面的解决办法即可
至此。。终于安装好了。
3.数据库基础知识
数据库定义
数据库是以某种有组织的方式存储的数据集合(可以将数据库看作是一个文件或是一组文件)。
ps:要注意区别数据库与数据库管理系统的区别。数据库(简称DB)是保存数据的容器,而数据库管理系统(简称DBMS)可以理解为数据库软件,即通过DBMS来创建和操纵DB.
关系型数据库
关系型数据库是建立在关系模型之上的数据库,即可以借助数学和集合的概念来处理数据库中的数据。
二维表
表(table)是一种结构化的文件,可用来存储某种特定类型的数据,是某种特定类型数据的结构化清单。
行
也成为“一条记录”,(如:一个顾客的所有信息)
列
表由列组成,是表中的一个字段。列存储表中的某部分信息,所有的表都是由一个或多个列组成。
ps:每个列都有相应的数据类型,限定了存储在列中的数据类型(如:有的列存储Int,或存储char。。)
主键
一条记录(每行)有一个或者几个唯一标识自己。
只要列满足一下条件,就能成为主键:
1.任意两行都不具有相同的主键值
2.每一行都必须有一个主键值(且主键值不允许为null)
3.主键列中的值不允许修改或删除
4.主键值不能重用(即如果将某行从表中删除,其主键不能赋予以后的新行)
外键
把所有数据都存放于一张表的弊端
- 表的组织结构复杂不清晰
- 浪费空间
- 扩展性极差
为了解决上述的问题,就需要用多张表来存放数据。表与表的记录之间存在着三种关系:一对多、多对多、一对一的关系。处理表之间关系问题就会利用到FOREIGN KEY
4.数据库管理系统
数据库
数据库管理系统(DBMS)是由一组相互关联的数据集合以及一些用来访问这些数据集合的程序组成。数据集合称为数据库,数据库管理系统就是提供一种高效访问数据集合的途径。
数据表
数据库是由一些数据表组成的,每个表都包含一种特定类型的记录,每种记录类型定义固定数目的字段或属性,表的列对应记录类型的属性。
视图
数据库系统的一个主要目的是给用户提供数据的抽象视图,也就是说,系统隐藏关于数据存储和维护的某些细节
一个可以用的系统必须能高效地检索数据,系统开发人员通过几个层次上的抽象来对用户屏蔽复杂性,以简化用户与系统的交互,
- 物理层(physical level),最低层次的抽象,描述数据实际上是怎样存储的,物理层详细描述复杂的底层数据结构
- 逻辑层(logical level),比物理层层次稍高的抽象,描述数据库中存储什么数据以及这些数据之间存在什么关系,虽然逻辑层的简单结构可能涉及复杂的物理层结构,但逻辑层的用户不必知道这样的复杂性,这称作物理数据独立性(physical data independence)。数据库管理员使用抽象的逻辑层,他必须确定数据库中应该保存哪些信息
- 视图层(view level),最高层次的抽象,只描述整个数据库的某个部分,数据库系统的很多用户并不需要关心所有的信息,而只需要访问数据库的一部分,视图层抽象的定义正式为了使这样的用户与系统的交互更简单,系统可以为同一数据库提供多个视图
视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询
- Microsoft Access不支持视图,没有与 SQL视图一致的工作方式
- MySQL从版本 5起开始支持视图
- SQLite仅支持只读视图,所以视图可以创建,可以读,但其内容不能更改
作为视图,它不包含任何列或数据,包含的是一个查询
视图的常见应用
- 重用 SQL语句
- 简化复杂的 SQL操作。在编写查询后,可以方便地重用它而不必知道其基本查询细节
- 使用表的一部分而不是整个表
- 保护数据。可以授予用户访问表的特定部分的权限,而不是整个表的访问权限
- 更改数据格式和表示,视图可返回与底层表的表示和格式不同的数据
创建视图之后,可以用与表基本相同的方式使用它们。可以对视图执行SELECT操作,过滤和排序数据,将视图联结到其他视图或表,甚至添加和更新数据
视图的常见规则和限制
- 与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)
- 对于可以创建的视图数目没有限制
- 创建视图,必须具有足够的访问权限。这些权限通常由数据库管理人员授予
- 视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造视图。所允许的嵌套层数在不同的 DBMS中有所不同(嵌套视图可能会严重降低查询的性能,因此在产品环境中使用之前,应该对其进行全面测试)
- 许多 DBMS禁止在视图查询中使用ORDER BY子句
- 有些 DBMS要求对返回的所有列进行命名,如果列是计算字段,则需要使用别名
- 视图不能索引,也不能有关联的触发器或默认值
- 有些 DBMS把视图作为只读的查询,这表示可以从视图检索数据,但不能将数据写回底层表。详情请参阅具体的 DBMS文档
- 有些 DBMS允许创建这样的视图,它不能进行导致行不再属于视图的插入或更新。例如有一个视图,只检索带有电子邮件地址的顾客。如果更新某个顾客,删除他的电子邮件地址,将使该顾客不再属于视图。这是默认行为,而且是允许的,但有的 DBMS可能会防止这种情况发生
存储过程
存储过程就是为以后使用而保存的一条或多条 SQL语句。可将其视为批文件,虽然它们的作用不仅限于批处理
通过把处理封装在一个易用的单元中,可以简化复杂的操作(如前面例子所述)
- 由于不要求反复建立一系列处理步骤,因而保证了数据的一致性。如果所有开发人员和应用程序都使用同一存储过程,则所使用的代码都是相同的,这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性
- 简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,那么只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这一点的延伸就是安全性。通过存储过程限制对基础数据的访问,减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会
- 因为存储过程通常以编译过的形式存储,所以 DBMS处理命令所需的工作量少,提高了性能
- 存在一些只能用在单个请求中的 SQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码
缺陷
- 不同 DBMS中的存储过程语法有所不同。事实上,编写真正的可移植存储过程几乎是不可能的。不过,存储过程的自我调用(名字以及数据如何传递)可以相对保持可移植。因此,如果需要移植到别的 DBMS,至少客户端应用代码不需要变动
- 一般来说,编写存储过程比编写基本 SQL语句复杂,需要更高的技能,更丰富的经验。因此,许多数据库管理员把限制存储过程的创建作为安全措施(主要受上一条缺陷的影响)
参考
1.https://windtrack.xyz/post/1015fd1e/
2.SQL必知必会(第4版)