C++学习路线(数据库部分)一

数据库概念(Database),就是按照数据结构来组织、存储和管理数据,建立在计算机存储设备上的仓库。我们可以把数据库看成电子化的文件柜,也就是存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。

为什么需要数据库 

一般情况下,要保存用户的数据,一个最简单的方法是把用户数据写入文件。例如,

要保存用户的密码信息,可以写入下面的文件中txt文件:

id,name,passwd(用户的id,用户的姓名,用户的密码)

1,小明,123456

2,小红,654321

3,小军,888888

4,小丽,666666

保存用户购买的道具prop.txt

id,prop,price,num(道具的id,道具的属性,道具的price,道具的数量)

1,金戒指,12,1

1,银戒指,10,1

2,房卡,10,10

3,鲜花,2,6

1,房卡,10,100

但是,随着应用程序的功能越来越复杂,数据量越来越大,如何管理这些数据就成了大问题:

  1. 读写文件并解析出数据需要大量重复代码;
  2. 从成千上万的数据中快速查询出指定数据需要复杂的逻辑。
  3. 数据缺乏安全感

如果每个应用程序都各自写自己的读写数据的代码,一方面效率低,容易出错,另一方面,每个应用程序访问数据的接口都不相同,数据难以复用。

所以,数据库作为一种专门管理数据的软件就出现了。应用程序不需要自己管理数据而是通过数据库软件提供的接口来读写数据。至于数据本身如何存储到文件,那是数据库软件的事情,应用程序自己并不关心。

程序员为什么要学习数据库 

  1. 几乎任何一个企业级应用,都要用到数据库。
  2. 无论开发、测试、运维还是架构师,数据库都是加分神器!
  3. 小的软件企业分工不明确,全能型人才能得到更多的机会(就业和提升)
  4. 外包和自由程序员必备

  • 用户通过客户端连接到 LoginServer,进行身份验证。
  • 成功登录后,用户可以选择进入游戏,请求由 MatchServer 处理,将用户匹配进合适的房间。
  • 匹配成功后,用户被引导至 RoomServer 所管理的游戏房间中。
  • 在游戏中,用户可以通过 ChatServer 发送聊天信息。
  • 游戏结束时,RoomServer 更新用户的游戏记录,并可能向 MySQL 写入数据,如积分变化等。

主流数据库简介

Oracle - 作为一种商业性数据库,在事务处理方面有自己独到的优势,功能比较强大,市场占有率也比较高。oracle数据库是一种大型的关系型数据库,在使用上会收费。在部署上,可以根据自己的环境采用单节点或者集群部署。经常会使用于银行和金融机构,存储大量数据,可以对海量数据进行分析处理,在安全性上使用访问控制和多种数据备份机制,可靠性高。

Mysql - 作为一种开源的轻量级数据库,在开源数据库中比较流行,由于小巧安装方便快捷,经常会用于互联网公司,维护也比较方便。因为开源,使用上比较灵活,mysql还有许多第三方的存储引擎,可以根据自己的需要进行安装。在功能上mysql可能没有oracle强大,但是对于资源的占用非常少,数据恢复快。在维护上,追求稳定的性能和易用性。

Redis - 作为一种缓存数据库,对于数据的读写特别快,redis之所以快,是因为它数据放在内存中,但是内存比较贵,另一方面,内存也是有限制的,当内存不够时,就需要使用redis的分布式方案。redis作为一种非关系型数据库,可以适用于高并发场景,配合关系型数据库作为做高速缓存,也可以降低磁盘IO,使用键值对存储,不适用于结构复杂的sql数据。另外MongoDB, SQL Server等数据库也是常用的数据库。

启动MySQL  服务

  • 图形化界面启动

右击“计算机”,在快捷菜单中选择“管理”命令,如图1-25所示,打开“计算机管理”对话框。也可以执行“开始”|“控制面板”|“管理工具”|“服务”来启动服务。

  • 命令行启动

   查看服务命令:  net start

     关闭服务命令:   net  stop  MySQL80

     启动服务命令:   net start  MySQL80

控制台登陆MySQL命令

mysql -h 127.0.0.1 -uroot -123456

(注:绿色部分为root的密码,根据个人设置不同而不同)

数据库操作

关系模型

关系数据库是建立在关系模型上的。而关系模型本质上就是若干个存储数据的二维,可以把它们看作很多Excel表。

  • 表的每一行称为记录(Record),记录是一个逻辑意义上的数据。
  • 表的每一列称为字段(Column),同一个表的每一行记录都拥有相同的若干字段。
  • 字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串''。通常情况下,字段应该避免允许为NULL。不允许为NULL可以简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。

和Excel表有所不同的是,关系数据库的表和表之间需要建立“一对多”,“多对一”和“一对一”的关系,这样才能够按照应用程序的逻辑来组织和存储数据。

  • 例如,一个班级表:

这种就是一对一,一个班主任对应一个班级

每一行对应着一个班级,而一个班级对应着多个学生,所以班级表和学生表的关系就是“一对多”:

反过来,如果我们先在学生表中定位了一行记录,例如ID=1的小花,要确定他的班级,只需要根据他的“班级ID”对应的值101找到班级表中ID=101的记录,即六年级一班。所以,学生表和班级表是“多对一”的关系。

如果我们把班级表分拆得细一点,例如,单独创建一个教师表:

ID

名称

年龄

1

马老师

26

2

张老师

39

3

潘老师

32

4

赵老师

27

班级表只存储教师ID:

ID

名称

班主任ID

101

六年级一班

1

102

六年级二班

3

这样,一个班级总是对应一个教师,班级表和教师表就是“一对一”关系。

创建数据库 

创建数据库是指在数据库系统中划分一块空间,用来存储相应的数据,这是进行表操作的基础,也是进行数据库管理的基础。

(1)在MySQL中,创建数据库之前,可以使用SHOW语句来显示当前已经存在的数据库,具体SQL语句如下:

    SHOW DATABASES;    

  1. 创建数据库的SQL语句如下:

CREATE DATABASE database_name;

      (其中参数database_name表示所要创建的数据库的名称)

查看数据库

查看数据库在上面已提及,SQL语句如下:

      SHOW DATABASES;    

选择数据库

在数据库管理系统中一般会存在许多数据库。在操作数据库对象之前,需要先选择一个数据库。

在MySQL中选择数据库可以通过SQL语句USE来实现,其语法形式如下:

    USE database_name;   

注:在上述语句中,database_name参数表示所要选择的数据库名字。

在选择具体的数据库之前,首先要查看数据库管理系统中已经存在的数据库,然后才能从这些已经存在的数据库中进行选择。如果选择一个不存在的数据库,就会出现错误。

 删除数据库

在删除数据库之前,首先需要确定所操作的数据库对象已经存在。在MySQL中删除数据库可以通过SQL语句DROP DATABASE来实现,其语法形式如下:

    DROP DATABASE database_name  

注:在上述语句中,database_name参数表示所要删除的数据库名字。

数据表操作

在MySQL数据库中,表是一种很重要的数据库对象,是组成数据库的基本元素,由若干个字段组成,主要用来实现存储数据记录。表的操作包含创建表、查询表、修改表和删除表,这些操作是数据库对象的表管理中最基本也是最重要的操作。

表的创建

基本语法:

CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];

其中,[表定义选项]的格式为:

<列名1> <类型1> [,…] <列名n> <类型n>

CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的

mysql> use school;   #选择数据库school

mysql> create table class1(class_id int, class_name varchar(128), class_teacher varchar(64));         #创建表class


CREATE TABLE 语句的主要语法及使用说明如下:

- CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。

- <表名>:指定要创建表的名称,表名称可以被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式创建。在当前数据库中创建表时,可以省略 db-name。有些数据库可以使用加引号的识别名,例如,'mydb'.'mytbl' 是合法的,但 mysql 是不合法。

mysql> create table school.class2(class_id int, class_name varchar(128), class_teacher varchar(64));         #创建表class2

mysql> create table school.class3(class_id int, class_name varchar(128), class_teacher varchar(64));         #Error! 会创建失败 

<表定义选项>:表创建定义,由列名(col_name)、列的定义(column_definition, 或者叫类型定义)以及可能的空值说明、完整性约束或表索引组成,如下图所示

mysql> use school;   #选择数据库school

mysql> create table class4(class_id int PRIMARY KEY, class_name varchar(128) NOT NULL, class_teacher varchar(64) UNIQUE);         #创建表class3

注意:

  • 默认的情况是,表被创建到当前的数据库中。若表已存在、没有当前数据库或者数据库不存在,则会出现错误。
  • 提示:使用 CREATE TABLE 创建表时,必须注意以下信息:

- 要创建的表的名称不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等。

- 数据表中每个列(字段)的名称和数据类型,如果创建多个列,要用逗号隔开。

列名

1)采用26字母和0-9的自然数加上下互相 ‘_’ 组成,命名简洁明确,多个单词用下划线 ‘_’ 隔开

2)全部小写命名,尽量避免出现大写

3)字段必须填写描述信息

4)禁止使用数据库关键字

5)字段名称一般采用名词或动宾短语

6)采用字段的名字必须是易于理解,一般不超过三个英文单词

7)在命名表的列时,不要重复表的名称(如:在 user 表中,出现 user_name 字段)

8)字段命名使用完整名称        

猜你喜欢

转载自blog.csdn.net/weixin_45169583/article/details/143306068