20190829--day40
数据(Data)
描述事务的符号记录,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机
在计算机中描述一个事物,就需要抽取这一事物的典型特征,组成一条记录,就相当于文件里的一行内容,如:
1 haiyan female 20 甘肃 计算机系
单纯的一条记录并没有任何意义,如果我们按逗号作为分隔,依次定义各个字段的意思
id name sex age adderess major #字段
1 haiyan female 20 甘肃 计算机系 #记录
如果这样表示的话就了解了一个人的信息了,让人一看就清楚了
数据库(DB)
# 什么是数据库?
数据库,就是存放数据的仓库;
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享。
数据库管理系统(DBMS)
Database Management System
本身也是一个C/S架构的软件
# 定义:
数据库管理系统是数据库系统的核心组成部分,主要完成对数据库的操纵与管理功能,实现数据库对象的创建、数据库存储数据的查询、添加、修改与删除操作和数据库的用户管理、权限管理等。
通俗解释--> 这个工具负责来和硬盘打交道(当然中间还隔着操作系统),高效的管理数据,并且还支持对外通信,网络通信都是基于的socket,也就是说它还相当于一个socket服务端,那么想来到这个存数据的机器上来操作数据的人或者项目都可以连接到这个工具,并通过这个工具来管理数据
如MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。
数据库说白了就是文件夹
数据库管理系统就是一个软件
数据库服务器:就是对外专门提供数据的一个机器
数据库服务器,数据库管理系统,表与记录的关系(重点理解)
*表:student,scholl,class_list(即文件)*
*数据库:lzsh_info(即文件夹)*
*数据库管理系统:如mysql(是一个软件)*
*数据库服务器:一台计算机(对内存要求比较高)*
# 总结:
数据库服务器---运行--->数据库管理软件
数据库管理软件--->管理--->数据库
数据库---组织--->表,即文件夹---组织--->文件
表---存放--->多条记录,即文件---存放--->多行内容
数据库管理系统解决了
①操作文件的效率和便捷问题
②解决了多个服务同时使用数据的一致性问题
③解决了安全的问题
④解决了并发问题
数据库的分类
# 数据库有两大类:关系型数据库 和 非关系型数据库
关系型数据库(RDBMS) : mysql,oracle,sqlserver,sqllite(轻量级),access
非关系型数据库 : redis,mongodb,memcache(内存级别)
关系型数据库
# 定义:关系型数据库模型就是把复杂的数据结构归结为简单的二元关系
如下图:
非关系数据库
# 定义:非关系型数据库也被成为NoSQL数据库,NOSQL的本意是“Not Olnly SQL”,NoSQL的产生并不是要彻底地否定关系型数据库,而是作为传统关系型数据库的一个有效补充
# 高性能、高并发、对数据一致性要求不高
NOSQL非关系型数据库
1、NOSQL不是否定关系数据库,而是作为关系数据库的一个重要补充
2、NOSQL为了高性能、高并发而生,忽略影响高性能,高并发的功能
3、NOSQL典型产品memcached (纯内存),redis(持久化缓存),mongodb(文档的数据库)
SQL
结构化查询语句
其中最后一句挺重要的:不同数据库系统之间的SQL不能完全相互通用
结构化查询语言(Structured Query Language)简称SQL(发音:/ˈes kjuː ˈel/ "S-Q-L"),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
1986年10月,美国国家标准协会对SQL进行规范后,以此作为关系式数据库管理系统的标准语言(ANSI X3. 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对SQL规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用
后期真实的项目架构
- 前端(浏览器)进行搜索(发送网络请求,相当于一个socket信息)
- 后台(python代码)收到请求(后端相当于socket服务器)
- 在系统里面本地打开一个html的文件(文件里面会加上从数据库搜索到的数据)
- 从文件里面调出来的数据,我们会通过python语言写一个socket客户端
- socket客户端会连接DBMS服务端,这个时候客户端会给服务端发送一个socket,服务端根据socket,返回前端需要的数据到htm
- 把html给到浏览器,浏览器检测到是html文件,就渲染出用户想要的结果
查看字符集编码
mysql> show variables like '%char%';
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-8.0.17-macos10.14-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.03 sec)
启动mysql
方法一
MySQL客户端连接服务端时的完整指令
mysql -h 127.0.0.1 -P 3306 -u root -p
方法二
mysql -uroot -p
退出mysql
exit
Windows 适用
在mysql安装目录下创建一个my.ini(my.cnf)文件,写入下面的配置,然后重启服务端
[client]
#设置mysql客户端默认字符集
default-character-set=utf8
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
user = 'root'
password = '123'
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=E:mysql-5.6.45-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:mysql-5.6.45-winx64data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
如果密码忘记了怎么办?
1 停掉MySQL服务端(net stop mysql)
2 切换到MySQL安装目录下的bin目录下,然后手动指定启动程序来启动mysql服务端,指令: mysqld.exe --skip-grant-tables
3 重新启动一个窗口,连接mysql服务端,
4 修改mysql库里面的user表里面的root用户记录的密码:
update user set password = password('666') where user='root';
5 关掉mysqld服务端,指令:
tasklist|findstr mysqld
taskkill /F /PID 进程号
6 正常启动服务端(net start mysql)
修改密码的三种方式
# 方法1: 用SET PASSWORD命令
首先登录MySQL,使用mysql自带的那个客户端连接上mysql。
格式:mysql> set password for 用户名@localhost = password('新密码');
例子:mysql> set password for root@localhost = password('123');
# 方法2:用mysqladmin (因为我们将bin已经添加到环境变量了,这个mysqladmin也在bin目录下,所以可以直接使用这个mysqladmin功能,使用它来修改密码)
关于mysqladmin的介绍:是一个执行管理操作的客户端程序。它可以用来检查服务器的配置和当前状态、创建和删除数据库、修改用户密码等等的功能,虽然mysqladmin的很多功能通过使用MySQL自带的mysql客户端可以搞定,但是有时候使用mysqladmin操作会比较简单。
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例子:mysqladmin -uroot -p123456 password 123
# 方法3:用UPDATE直接编辑那个自动的mysql库中的user表
首先登录MySQL,连接上mysql服务端。
mysql> use mysql; use mysql的意思是切换到mysql这个库,这个库是所有的用户表和权限相关的表都在这个库里面,我们进入到这个库才能修改这个库里面的表。
mysql> update user set password=password('123') where user='root' and host='localhost'; 其中password=password('123') 前面的password是变量,后面的password是mysql提供的给密码加密用的,我们最好不要明文的存密码,对吧,其中user是一个表,存着所有的mysql用户的信息。
mysql> flush privileges; 刷新权限,让其生效,否则不生效,修改不成功。
存储引擎
默认存储引擎 Innodb
查看存储引擎 show engines;