数据库的原理和操作

本文介绍了数据库的基本概念,特别聚焦于MySQL数据库的使用。通过学习,读者将对数据库有初步认识,并能掌握MySQL的基本操作。
摘要由CSDN通过智能技术生成

数据库初识

数据库
1. 切换到root用户
	su - root
2. 查看本是否安装了mariadb
	rpm -qa | grep mariadb
3. 查看mariadb的状态
	service mariadb status
4. 启动mariadb
	service mariadb start
5. 关闭mariadb
	service mariadb stop


mysql数据库在启动的时候, 会先启动一个守护进程
	守护进程
		进程间通信(一个往共享内存里写东西, 一个读, 发现没更新共享内存(挂掉了),则会重启一个MySQL服务器)
			MySQL的服务器
守护进程在判断MySQL服务器是否允许正常, 如果在MySQL使用过程当中, 服务端挂掉了. 守卫进程就会重新拉起来MySQL服务端

MySQL原理:
	启动了一个MySQL服务端, mysql服务端被分成了很多层, 
		第一个叫连接层
			1. 用户验证
			2. 选择连接协议(TCP, 本地域套接字)
			3. 创建线程对客户端进行服务
		还有一个server层:
			1. 检查sql语句的语法是否规范
			2. 语义分析(sql语句到底要干啥)
			3. 权限检查(查看当前的用户是否有操作该表的权限)
			4. 分析SQL语句的查找方案
			5. 执行SQL	通过线程将查询到的数据返回客户端	
		存储引擎: 相当于linux操作系统当中的文件系统, 不同的存储引擎, 可以决定数据的存储方式.
			INNODB, MyISAM
	

sql语句是以分号结尾的, sql后面结束的时候必须加上分号;
select * from  user

mysql/mysql -u root -p密码     ----> 都是MySQL的客户端, 这两个主要作用是启动了一个程序 通过本地域套接字 和服务端连接
	前者是一个可执行程序 MySQL的客户端
	后者是登录到服务器的

假设侦听端口为3306
mysql客户端要经过网络去连接服务器(使用的tcp协议)
netstat: 查看端口情况
netstat -anp|grep 3306 查看这个端口有没有跟别人连接

域套接字:
	本质上就是在本地机器上创建一个文件, 客户端和服务端通过文件来进行通信, 本质上就是进程间通信; 这个进程间通信会走网络协议栈
	和进程间通信的共享内容很相似, 客户端往里写, 服务端读

服务端:
	创建socket: sockfd = sockfd(AF_UNIX, SOCK_STREAM, IPPROTO_TCP);
	bind:
		struct sockaddr_un server_un;
		server_un.sun_family = AF_UNIX;
		server_un.sun_path = ["文件名称"]; // 服务端和客户端就是通过这个文件来连接的
		bind(sockfd, (struct sockaddr*)&server_un, sizeof(server_un));
	listen
	accept
客户端:
	创建socket: sockfd = sockfd(AF_UNIX, SOCK_STREAM, IPPROTO_TCP);
	组织服务端的地址信息结构:
		struct sockaddr_un server_un;
		server_un.sun_family = AF_UNIX;
		server_un.sun_path = ["文件名称"]; // 服务端和客户端就是通过这个文件来连接的
	connect(sockfd, (struct sockaddr*)& server_un, sizeof(server_un));
	

MySQL数据库 ---> 数据库管理软件, 管理若干个数据库;  (相当于文件夹)
	A数据表:                                    (相当于文件)
		aa
		aaa
		aaaa
	B数据表:
		bb
		bbb
		bbbb
	C....

show databases; 查看当前MySQL当中有多少个数据库
show tables;  查看当前数据库当中的数据表

1. 如何创建一个数据库
	create database[数据库的名称]
2. 查看已经创建好的数据库的创建语句
	show create databases[数据库的名称]

字符集:
	ASCII字符集(1字节): 采用的是1个字节的低7位标识字符, 高位始终为0
`	LATIN1字符集(1字节): 相对于ASCII字符集做了扩展, 启用了最高位, 能表示字符的范围更加广
	GBK字符集: 支持中文的, 字符可以使用1个字节, 也可以使用2个字节
	UTF8: Unicode字符集(可以表示很多语言, 也支持中文), 支持了所有国家的文字字符, 采用的1-4字节
自上而下,表示字符的范围越来越广; 一般选用UTF8


3. 创建数据库的时候, 就需要指定字符集
	create database [数据库名称] charset=[字符集名称]  
浏览器一般发出来的数据先发给server端(相当于MySQL的客户端), 处理之后保存到数据库(相当于MySQL的服务器), 
若发送的数据是中文, MySQL客户端的字符集为utf8, 而MySQL服务器有两层, 假设连接层是utf8, server层是latin1, 则当数据到服务器的server层时就是乱码
	对于字符集的设置, 尽量在数据链路当中的每一个点, 都保持一致;
	乱码的来源就是由于前后端字符集不一致 ! ! !
MarIDB[test]> show variables like '%character%';
+--------------------------+----------------------------+
Variable_name              | Value                      | 
+--------------------------+----------------------------+
| character_set_client     | utf8                       |	// mysql客户端的字符集
| character_set_connection | utf8                       |	// 连接层字符集
| character_set_database   | latin1                     |	// 创建数据库默认的字符集
| character_set_filesystem | binary                     |	// 查询结果字符集
| character_set_results    | utf8                       |	// MySQL内部操作字符集
| character_set_server     | latin1                     |	// MySQL字段名称所用到的字符串
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
注意:  创建数据库的时候, 尽量数据库的字符集设置成utf8

4. 删除数据库
	drop database[数据库名称];
		连带数据库的表也会删除掉
	删除数据库这个操作一定要谨慎! ! ! 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值