文章目录
1)数据库相关概念
1.1 什么是数据库(Database)?
数据库(DB)是数据管理的有效技术,是由一批数据构成的有序集合,这些数据被存放在结构化的数据表里。数据表之间相互关联,反映客观事物间的本质联系。数据库能有效地帮助一个组织或企业科学地管理各类信息资源。
数据库是数据的集合,具有统一的结构形式并存放于统一的存储介质内,是多种应用数据的集成,并可被各个应用程序所共享。
1.2 为什么需要数据库?
在日常生活中,人们可以直接用中文、英文等自然语言描述客观事物。在计算机中,则要抽象出对这些事物感兴趣的特征,并组成一个记录来描述。
- 例如,在学生档案中,学生信息是由学号、姓名、性别、年龄、籍贯、联系电话等特征组成的,那么这些具体的特征值所构成的一条记录就是一个学生的信息数据,例如:“2016010102,张三,男,26,山西,计算机学院,185********”。
值得注意的是,数据的描述形式还不能完全表达其内容,需要经过解释。例如,对于上面这条学生记录,了解其含义的人会得到这样的信息:张三的学号是 2016010102,今年 26 岁,山西人,就读于计算机学院,他的联系电话是 185********,而不了解其语义的人则无法理解其含义。所以,数据和对数据的解释是不可分的,数据的解释是指对数据含义的说明,数据的含义也称数据的语义,因此数据与其语义密不可分,没有语义的数据是没有意义和不完整的。
计算机数据(Data)的存储一般以硬盘为数据存储空间资源,从而保证计算机内的数据能够持续保存。对于数据的处理,一般会采用数据库相关的技术进行处理,从而保证数据处理的高效性。
采用数据库的管理模式不仅提高了数据的存储效率,而且在存储的层面上提高了数据的安全性。通过分类的存储模式让数据管理更加安全便捷,更能实现对数据的调用和对比,并且方便查询等操作的使用。
1.3 数据库的存储结构
数据库的存储结构是指数据库中的物理数据和逻辑数据的表示形式、物理数据和逻辑数据之间关系映射方式的描述。在数据库技术中,可以使用两种形式描述客观现实的数据:物理数据描述和逻辑数据描述。物理数据和逻辑数据之间的转换通过数据库管理系统实现。
1.3.1 物理数据描述
物理数据描述是指数据在存储设备上的存储方式,物理数据是实际存放在存储设备上的数据,这些数据也称为物理记录。根据物理记录存储的位置,又可以分为有序存储和无序存储。
在物理数据描述中,使用的数据描述术语包括以下各项:
- 位(bit):二进制的一个单位称为位,位只能取 1 或 0。
- 字节(byte):8 个位称为一个字节,可以存放对应 ASCII 码的一个字符。
- 字(word):若干个字节组成一个字。一个字所含的二进制的位数称为字长,许多计算机的字长是不同的,例如计算机的字长可以是 8 位、16 位、24 位、32 位等。
- 块(block):内存储器和外存储器交换信息的最小单位,又称为物理块或物理记录,每块的大小通常为 256 字节、512 字节、1024 字节等。
- 卷(volume):一台输入输出设备所能装载的全部有用信息,例如磁带机的一盘磁带即为一卷,磁盘设备的一个盘组也是一卷。
- 无序存储(unordered):数据记录按照插入的顺序进行存储。
1.3.2 逻辑数据描述
逻辑数据描述是指用户或程序员用于操作的数据形式,逻辑数据是一种抽象的概念,是对客观现实世界的反映和记录,这些数据也可以称为逻辑记录。
逻辑数据包含两个层次,一个层次是对客观现实信息世界的描述,另一个层次是对数据库管理系统中数据的描述。
在对客观现实信息世界的描述中,使用的术语包括以下几项:
实体(entity):
客观现实存在的东西使用实体来描述。实体既可以是具体的、有形的对象,也可以是抽象的、无形的对象。例如,一本书是一个有形对象,一次借书过程则是一个无形的对象。实体集(entities):
特性完全相同的同类实体的集合称为实体集。例如,一个图书馆所有的书籍是一个实体集,该图书馆的所有借书过程也是一个实体集。属性(attribute):
实体的特性称为属性。每个属性都有一个值域,这些值域可以是整数类型、浮点数类型、字符类型或日期类型等。例如,实体书的属性包括书名、书号、出版日期、页数、价格以及出版社等,这些属性对应的值域分别为字符类型、字符类型、日期类型、整数类型、浮点数类型和字符类型等。标识符(identifier):
能够唯一地标识每个实体的属性或属性集。例如,书的书号属性是实体书的标识符,借书过程实体的标识符包括借书证号、书号两个属性。
这些逻辑数据最终要通过数据库管理系统来转换成物理数据。
在数据库管理系统中,描述逻辑数据的术语包括:
(以关系型数据库管理系统为例进行介绍)
-
数据项(data item):
也称为字段(field),标记实体属性的可以命名的最小信息单位,数据项的命名一般采用属性的描述性名称。这些名称可以是中文、英文或汉语拼音。 -
元组(tuple):
也称为记录(record),数据项的集合称为元组。一个元组表示一个具体的实体。 -
关系(relation):
在关系型数据库系统中,同一类元组所在的集合称为关系。关系适用于描述实体集,它包括一个实体集的所有元组。例如,所有的图书可以组成一个 books 关系。 -
键码(key):
在关系型数据库系统中,能够唯一地标识关系中每个元组的数据项或数据项的组合称为关系的键码。
客观实体经过两层逻辑数据的描述,最后转变成实际存储的物理数据。
关系型数据库
存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。
- 常见的关系型数据库有Mysql,SqlServer等。
- 在轻量或者小型的应用中,使用不同的关系型数据库对系统的性能影响不大,但是在构建大型应用时,则需要根据应用的业务需求和性能需求,选择合适的关系型数据库。
非关系型数据库(NoSQL)
随着近些年技术方向的不断拓展,大量的NoSql数据库如MongoDB、Redis、Memcache出于简化数据库结构、避免冗余、影响性能的表连接、摒弃复杂分布式的目的被设计。
指的是分布式的、非关系型的、不保证遵循ACID原则的数据存储系统。
- NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。对于非结构化数据的处理更合适,如文章、评论,这些数据如全文搜索、机器学习通常只用于模糊处理,并不需要像结构化数据一样,进行精确查询,而且这类数据的数据规模往往是海量的,数据规模的增长往往也是不可能预期的,而NoSQL数据库的扩展能力几乎也是无限的,所以NoSQL数据库可以很好的满足这一类数据的存储。
- NoSQL数据库利用key-value可以大量的获取大量的非结构化数据,并且数据的获取效率很高,但用它查询结构化数据效果就比较差。
1.4 数据库在开发中的作用
从数据库系统应用角度来看,数据库系统常见的运行与应用结构有:客户端/服务器结构、浏览器/服务器结构。
-
客户端/服务器(C/S)结构
在客户端/服务器(Client/Server,C/S)结构中,数据库的使用者(如 DBA、程序设计者)通过命令行客户端、图形化界面管理工具或应用程序等连接到数据库管理系统,可以通过数据库管理系统查询和处理存储在底层数据库中的各种数据。
数据库使用者与命令行客户端、图形化界面管理工具或应用程序等直接交互,而不与数据库管理系统直接联系。
C/S结构:
- 命令行客户端、图形化界面管理工具或应用程序等称为“客户端”或“前台”,主要完成与数据库使用者的交互任务;
- 而数据库管理系统则称为“服务器”或“后台”,主要负责数据管理。
在客户端/服务器模式中:
- 客户端和服务器可以同时工作在同一台计算机上,这种工作方式称为单机方式;
- 也可以网络方式运行,即服务器被安装和部署在网络中某一台或多台主机上。
1.5 数据库存储数据的特点
- 将数据放到表中,表再放到库中。
- 一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。
- 表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。
- 表由列组成,我们也称为字段。所有表都是由一个或多个列组成的,每一列类似java 中的”属性”。
- 表中的数据是按行存储的,每一行类似于java中的“对象”。
2)MySQL
2.1 MySQL是什么?
MySQL数据库隶属于MySQL AB公司,总部位于瑞典,后被oracle收购。MySQL是基于客户机—服务器的DBMS。
2.2 MySQL的安装
2.2.1 下载和安装
- 社区版(免费)
- 企业版(收费)
2.2.2 查看服务器的版本
2.3 MySQL服务的启动和停止
2.4 MySQL服务的登录和退出
1、登录:
-
方式一:
通过mysql自带的客户端(只限于root用户)
-
方式二:
通过windows自带的客户端
- mysql 【-h主机名 -P端口号 】-u用户名 -p密码
C:\Users\Facek>mysql -uroot -p # 登录 Enter password: ***** ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) C:\Users\Facek>mysql -uroot -p Enter password: **** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 35 Server version: 5.7.26 MySQL Community Server (GPL) Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit # 退出 Bye
2、退出:
- exit或ctrl+C
2.5 MySQL的语法规范
- 不区分大小写,但建议关键字大写,表名、列名小写
- 每条命令最好用分号结尾
- 每条命令根据需要,可以进行缩进或换行
- 注释:
- 单行注释:
#注释文字
- 单行注释:
-- 注释文字
- 注意–后面要有一个空格
- 多行注释:
/* 注释文字 */
- 单行注释:
2.6 MySQL的常见命令
mysql> show databases; # 查看当前所有的数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| dailyfresh |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql> use dailyfresh; # 打开指定的库
Database changed
mysql>
mysql> show tables; # 查看当前库的所有表
+--------------------------+
| Tables_in_dailyfresh |
+--------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| df_address |
| df_goods |
| df_goods_image |
| df_goods_sku |
| df_goods_type |
| df_index_banner |
| df_index_promotion |
| df_index_type_goods |
| df_order_goods |
| df_order_info |
| df_user |
| df_user_groups |
| df_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+--------------------------+
20 rows in set (0.00 sec)
mysql> use dailyfresh;
Database changed
mysql> show tables from mysql; # 查看其它库的所有表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
31 rows in set (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| dailyfresh |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database test; # 创建数据库test
Query OK, 1 row affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| dailyfresh |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.00 sec)
mysql> create table customer(
-> id varchar(30),
-> age int,
-> name varchar(30),
-> birthday date); # 创建表customer
Query OK, 0 rows affected (0.07 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| customer |
+----------------+
1 row in set (0.00 sec)
mysql> desc customer; # 查看表的结构
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | varchar(30) | YES | | NULL | |
| age | int(11) | YES | | NULL | |
| name | varchar(30) | YES | | NULL | |
| birthday | date | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql> select * from customer; # 查看表中的所有记录
Empty set (0.00 sec)
mysql> insert into customer(id,name,age,birthday)
-> values('10002','Jerry',22,'2000-02-12'); # 向表中插入记录
Query OK, 1 row affected (0.01 sec)
mysql> select * from customer;
+-------+------+-------+------------+
| id | age | name | birthday |
+-------+------+-------+------------+
| 10002 | 22 | Jerry | 2000-02-12 |
+-------+------+-------+------------+
1 row in set (0.00 sec)
mysql> update customer
-> set age=20,birthday='1998-02-12' where id='10002'; # 修改表中的特定记录
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from customer;
+-------+------+-------+------------+
| id | age | name | birthday |
+-------+------+-------+------------+
| 10002 | 20 | Jerry | 1998-02-12 |
+-------+------+-------+------------+
1 row in set (0.00 sec)
mysql> delete from customer where id='10002'; # 删除表中的特定记录
Query OK, 1 row affected (0.01 sec)
mysql> select * from customer;
Empty set (0.00 sec)
【部分内容参考自】
- 数据库是什么?数据库的概念:http://c.biancheng.net/view/2361.html