bootstrap手机网站微博推广方法有哪些
下面是小凰凰的简介,看下吧!
💗人生态度:珍惜时间,渴望学习,热爱音乐,把握命运,享受生活
💗学习技能:网络 -> 云计算运维 -> python全栈( 当前正在学习中)
💗您的点赞、收藏、关注是对博主创作的最大鼓励,在此谢过!
有相关技能问题可以写在下方评论区,我们一起学习,一起进步。
后期会不断更新python全栈学习笔记,秉着质量博文为原则,写好每一篇博文。
文章目录
- 一、数据库管理软件的由来
- 二、数据库的种类
- 三、MySQL介绍
- 1、mysql是什么
- 2、下载配置流程、软件底层详解
- (1)mysql软件架构详解
- (2)启动mysql服务端
- (3)客户端去连接服务端
- (4)初始化mysql(可选)
- (5)修改密码、忘记密码
- 3、my.cnf配置文件详解
- 4、统一字符编码
- (1)使用\s查看字符编码
- (2)设置默认字符编码
- 四、初识SQL语句
一、数据库管理软件的由来
基于我们之前所学,数据要想永久保存,都是保存于文件中,毫无疑问,一个文件仅仅只能存在于某一台机器上。
如果我们暂且忽略直接基于文件来存取数据的效率问题,并且假设程序所有的组件都运行在一台机器上,那么用文件存取数据,并没有问题。
很不幸,这些假设都是你自己意淫出来的,上述假设存在以下几个问题。
1、程序所有的组件就不可能运行在一台机器上
# 因为这台机器一旦挂掉则意味着整个软件的崩溃,并且程序的执行效率依赖于承载它的硬件,而一台机器机器的性能总归是有限的,受限于目前的硬件水平,就一台机器的性能垂直进行扩展是有极限的。# 于是我们只能通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行。2、数据安全问题
# 根据1的描述,我们将程序的各个组件分布到各台机器,但需知各组件仍然是一个整体,言外之意,所有组件的数据还是要共享的。但每台机器上的组件都只能操作本机的文件,这就导致了数据必然不一致。# 于是我们想到了将数据与应用程序分离:把文件存放于一台机器,然后将多台机器通过网络去访问这台机器上的文件(用socket实现),即共享这台机器上的文件,共享则意味着竞争,会发生数据不安全,需要加锁处理。3、并发根据2的描述,我们必须写一个socket服务端来管理这台机器(数据库服务器)上的文件,然后写一个socket客户端,完成如下功能:
# 1.远程连接(支持并发)
# 2.打开文件
# 3.读写(加锁)
# 4.关闭文件
总结:
我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。
二、数据库的种类
数据库分为关系型数据库与非关系型数据库:
# 关系型
MySQL、Mariadb、oracle、access、sqlserver# 非关系型
redis、mongodb、memcached
我们入门一般选MySQL数据库学习。
三、MySQL介绍
1、mysql是什么
#mysql就是一个基于socket编写的C/S架构的软件
#客户端软件mysql自带:如mysql命令,mysqldump命令等python模块:如pymysql
2、下载配置流程、软件底层详解
yum install mysql-server mysql -y
(1)mysql软件架构详解
因为mysql是C/S架构,因此:
mysql-server:mysql服务端,这个以后应该是要放到服务器上去的!
mysql:mysql客户端。
C/S架构的软件必须基于网络通信传输数据!其实我认为数据库这个软件就有点像我以前写的一个软件项目:基于socket实现远程控制云服务器
,为什么这么说呢,因为原理都是客户端接收用户发出的命令,然后传到mysql上,拿到其执行的返回结果,传回客户端显示出来。
(2)启动mysql服务端
systemctl start mysqld # 在linux中mysql一般安装之后自己就成了系统服务,所以可以采用系统服务的启动方式systemctl。nohup mysqld & # mysqld是服务端,mysql是客户端。所以mysqld这个命令就是启动mysql服务端的,nohup 和 &是让mysql后台运行。
(3)客户端去连接服务端
1. 首先我们想下,mysql客户端和服务端肯定'是基于socket进行网络通信'。
2. 那么我们的'socket客户端的connect函数需要ip+port',因此我们mysql客户端链接服务端应该需要指定ip和端口。
3. 'mysql是一个多用户软件',因此我们需要指定用户名及密码。因此mysql客户端连接服务端的语句如下:
mysql -h 172.31.0.2 -p 3306 -uroot -p123 # -h即为-host,-p即为-port# 我们这里ip是本地,数据库端口就是默认端口3306,因此可简写成:
mysql -uroot -p123mysql # 以root用户登录本机的3306端口的数据库,密码为空# 注意mysql安装之后是没有密码的。直接可以使用mysql -uroot -p登陆
你看
MariaDB [(none)]>
就相当于我们socket客户端的代码:input_msg = input('MariaDB [(none)]>').strip()
(4)初始化mysql(可选)
mysql_secure_installation # 设置密码,移除匿名用户等初始化mysql操作!
(5)修改密码、忘记密码
# 修改密码
mysqladmin -uroot -p123456 password 123 # 在linux的shell上修改mysql的用户的密码
# 忘记密码
1. 先关闭数据库,再以跳过授权表密码验证启动mysql数据库,实现客户端无密登录mysql服务端
nohup mysqld --skip-grant-tables &# 注意也可以编辑my.cnf,在[mysqld]下添加参数skip-grant-table也可以实现跳过授权表
2. 修改root用户的密码
update mysql.user set password = password('123') where user = 'root'; # 登录进入数据库后修改用户密码的操作
flush privileges; # 把所有操作引起的数据改变刷新进硬盘可能有人会问,password = password('123')啥意思?
# 答:我们数据库中的密码都不是以明文的方式显示出来的,存的都是采用加密算法加密过后的密码,password(123),应该是把123加密存入了数据库了。用户的密码的明文只有用户知道。
3、my.cnf配置文件详解
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
skip-grant-tables[mysql]
user = 'root'
password = 'mysql'[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
[mysqld]、[mysql]、[mysqld_safe]这三个的意思分别是当执行mysqld命令、mysql命令、mysqld_safe命令分别执行的操作写在下面.
1. 因为我[mysqld]下面写了skip-grant-tables参数,'因此执行mysqld命令启动服务端时',会跳过授权表
2. 因为我[mysql]下面写了user、password,'因此执行mysql命令客户端连接mysql服务端时',如果user是root就不用输密码了。当然你也可以直接mysql使用root身份登录。
4、统一字符编码
我们都知道存储数据,最大的忌讳就是存储时的数据的编码不对,引起乱码。
(1)使用\s查看字符编码
MariaDB [(none)]> \s
--------------
mysql Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1Connection id: 2
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 5.5.65-MariaDB MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 6 min 51 secThreads: 1 Questions: 4 Slow queries: 0 Opens: 0 Flush tables: 2 Open tables: 26 Queries per second avg: 0.009
--------------
除此之外,我们也可以采用show variables like '%char%'
查看字符编码
(2)设置默认字符编码
# 1. 修改my.cnf配置文件
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8#mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8#2. 重启服务
#3. 查看修改结果:
\s
show variables like '%char%'
四、初识SQL语句
有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写
mysql服务端软件即mysqld,帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要下载mysql的客户端,或者其他模块来连接到mysqld,然后使用mysql软件规定的语法格式去提交自己命令,实现对文件夹或文件的管理。该语法即sql
(Structured Query Language 即结构化查询语言)
SQL语言分为3种类型:
# 1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
# 2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
# 3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE1. 数据库的增删改查增:create database db1 charset utf8;查:show databases;改:alter database db1 charset latin1;删除: drop database db1;2. 表的增删改查增:create table t1(id int,name char);查:show tables,desc t1改:alter table t1 modify name char(3);alter table t1 change name name1 char(2);删:drop table t1;3. 表中数据的增删改查增:insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');查:select * from t1 where id=1;改:update t1 set name='sb' where id=2;删:delete from t1 where id=1;清空表:delete from t1; #如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。truncate table t1;数据量大,删除速度比上一条快,且直接从零开始,auto_increment 表示:自增primary key 表示:约束(不能重复且不能为空);加速查找