Mysql
的数据库的原理、安装、基本应用
第一部分:mysql的原理
mysql
执行流程:
mysql是一个单进程的服务,对于每一个请求都是用线程来响应的,这就需要一个连接器来处理新用户的请求,响应,销毁。
1、客户端请求,服务器端(连接器)开辟线程响应用户
2、用户发起
SQL语句查询数据库
3、查询缓存:记录用户的
SQL查询语句,如果再次查询同样内容,就返回缓存
4、如果缓存没有进入分析器:(分析器也可能借签缓存)
语法分析器:用户命令语法是否正确
词法分析器:将用户的命令进行切片,一个词一个词用空格隔开
,获得用户要查询的表,内容,用户的权限等
5、优化:执行路径的选择,生成执行树
每个
SQL语句都有很多执行路径,优化的目的就是在这些执行路径里选择一个最优的执行路径
6、存储引擎:用于管理存储在文件系统,甚至是裸设备上的数据管理程序,它本身给上层应用提供不同的管理,有的支持事务,有的不支持事务。
数据库对象:
逻辑对象:表,二维关系、索引、视图、触发器、存储过程、存储函数、事件調读器、游标、用户。
物理对象:数据管理组件(元数据)、存储引擎、 存储为物理文件。
数据库管理系统的基本功能:
管理存储(
maintaining storage)(存储引擎进行管理)
安全管理(
maintaining security)
元数据管理(
managing metadata)
事务管理(
managing transaction)
ACID(原子性、一致性、隔离性、持久性)
可以被看作一个整体的多个
SQL语句
连接管理(
supporting connectivity)
性能优化(
optimizing performance)
备份和还原机制(
providing back-up and recovery mechanisms)
响应数据查询
/修改请求(processing requests for data retrieval and modification)
存储引擎:将数据存储下来的中间层,
MyISAM
、InnoDB
、NDB
、Arcglve
、Federated
、Memory
、Merge:合并,多表合并成一个
rawdevice:裸设备,没有格式化
键
主键:(primary key)
非空(Not NULL)
不能有相同值
一个表只能有一个主键
外键:(foreign key)
表与表之间建立约束,不存在的不可建立约束
外键约束又叫引用型约束
唯一性约束:(unique key)
可以为空(NULL)
若不为空,则值不能相同
一个表可以有多个
日志文件:
Redo(重做日志、Undo、Data、Index、Binary、Error、Query、Slow(慢查日志,重要)
数据存储格式:
Binary、
ASCII
数据类型(
data type
):
整数型:
字符型:
日期时间型:
字符型的特殊类型(
MySQL内置的类型):
enum 枚举型,事先定义,最多定义
65535个,但最多可以取一个
set 集合型,也需事先定义,最多定义
64个,可取多个
第二部分:mysql的安装
安装方式:
1、 rpm包的直接安装
2、 源代码编译安装
3、 绿色软件(解压直接使用)
我在这里给大家带来的是第二、源代码编译安装mysql。根据下面的步骤一步一步的操作。
1
、准备数据存放的文件系统
[root@localhost ~]# partprobe /dev/sda
识别分区
[root@localhost ~]# pvcreate /dev/sda6
创建物理卷
[root@localhost ~]# vgcreate myvg /dev/sda5 创建卷组
[root@localhost ~]# lvcreate -L 2G -n mylv myvg 在创建逻辑卷
[root@localhost ~]# mke2fs -j /dev/myvg/mylv
格式化
[root@localhost ~]# mkdir /mydata
创建目录
[root@localhost ~]# vim /etc/fstab
编辑开机自动挂载文件
在文件中写下光标所在的那行:
[root@localhost ~]# mount /dev/myvg/mylv /mydata
挂载至
[root@localhost ~]# mkdir /mydata/data
在创建mydata子目录
2
、新建用户以安全方式运行进程:
# groupadd -r mysql
创建用户组
# useradd -g mysql -r -s /sbin/nologin -M -d /mydata/data mysql
创建用户
# chown -R mysql:mysql /mydata/data
把/mydata/data 目录属主属组改为myqsl
3
、安装并初始化
mysql-5.5.19
首先下载平台对应的mysql版本至本地,我这里是32位平台,因此,我在这选择的为mysql-5.5.19-linux2.6-i686.tar.gz。具体下载就不给出步骤。
# tar xvf mysql-5.5.19-linux2.6-i686.tar.gz -C /usr/local
解压至/usr/local 目录
# cd /usr/local/
切换至目录
# ln -sv mysql-5.5.19-linux2.6-i686 mysql
创建软链接
# cd mysql 切换至目录
# chown -R mysql:mysql ./ 改属主属组 .
# scripts/mysql_install_db --user=mysql --datadir=/mydata/data
初始化mysql
# chown -R root ./ .
把属主改回root
[root@localhost mysql]# ./scripts/mysql_install_db –help
查看帮助信息
4
、为
mysql
提供主配置文件:
[root@localhost mysql]# cd support-files/
切换至目录
[root@localhost support-files]# cp my-large.cnf /etc/my.cnf
复制并改名配置文件至/etc 下;
[root@localhost support-files]# vim /etc/my.cnf
打开配置文件
并修改此文件中thread_concurrency的值为你的CPU个数乘以2,另外还需要添加如下行指定mysql数据文件的存放位置;使用如下行:
5
、为
mysql
提供
sysv
服务脚本:
# cd /usr/local/mysql
切换至目录
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
复制服务脚本并改名为mysqld至/etc/rc.d/init.d/mysqld
添加至服务列表:
# chkconfig --add mysqld
加入服务
# chkconfig mysqld on
开启mysql
而后就可以启动服务测试使用了。
# service mysqld start
为了使用mysql的安装更全面,我下面的步骤将其开发组件导出给系统使用;
如下步骤:
6
、输出
mysql
的
man
手册至
man
命令的查找路径:
编辑 vim /etc/man.config,添加如下行即可:
MANPATH /usr/local/mysql/man
7
、输出
mysql
的头文件至系统头文件路径
/usr/include
:
这可以通过简单的创建链接实现:
# ln -sv /usr/local/mysql/include /usr/include/mysql
8
、输出
mysql
的库文件给系统库查找路径:
# echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/mysql.conf
而后让系统重新载入系统库:
# ldconfig -v
9
、修改
PATH
环境变量
,
让系统可以直接使用mysql的相关命令。
# vim /etc/profile
添加在定义环境变量PATH行上面
PATH=$PATH:/usr/local/mysql/bin:/usr/local/apache/bin
第三部分:
mysql
的基本应用
对管理员设置密码
第一种方式:
[root@localhost ~]# mysqladmin -uroot -hlocalhost -p password '12345'
执行这个命令后会显示
Enter password:
刚编译安装的mysql没有密码直接按确定键就ok啦!
第二种要进入
mysql
设置:
拿上面设置的密码来说吧;执行命令:
[root@localhost ~]# mysql -uroot -p
Enter password:
在这输入刚才设置的密码12345
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
进入mysql
设置密码:
mysql> set password for root@localhost=password('wangchao');
显示成功:Query OK, 0 rows affected (0.00 sec)
Mysql
的使用:
首先进入
mysql
[root@localhost ~]#
mysql -uroot -p
Enter password:
mysql>
show databases;
查看当前数据库
+--------------------+
| Database
|
+--------------------+
| information_schema |
| mysql
|
| performance_schema |
| test
|
+--------------------+
4 rows in set (0.01 sec)
mysql>
use test;
把此表设为默认数据库
Database changed
mysql>
show tables; 查看设为默认数据库有哪些表、这里此表为空;
Empty set (0.00 sec)
mysql>
create database jiaowu; 创建数据库;
Query OK, 1 row affected (0.00 sec)
mysql>
use jiaowu; 把教务设为默认数据库
Database changed
mysql>
create table students (
->
SID INT UNSIGNED AUTO_INCREMENT NOT NULL UNIQUE KEY,
->
Name CHAR(100) NOT NULL,
->
Age INT UNSIGNED,
->
Gender ENUM('F','M') DEFAULT 'M',
->
CID1 INT UNSIGNED,
->
CID2 SMALLINT UNSIGNED,
->
BirthDate DATETIME,
->
ExtraInfo TINYTEXT ); 创建表;
Query OK, 0 rows affected (0.10 sec)
mysql>
desc students; 查看表的内容
+-----------+----------------------+------+-----+---------+----------------+
| Field
| Type | Null | Key | Default | Extra |
+-----------+----------------------+------+-----+---------+----------------+
| SID
| int(10) unsigned | NO | PRI | NULL | auto_increment |
| Name
| char(100) | NO | | NULL | |
| Age
| int(10) unsigned | YES | | NULL | |
| Gender
| enum('F','M') | YES | | M | |
| CID1
| int(10) unsigned | YES | | NULL | |
| CID2
| smallint(5) unsigned | YES | | NULL | |
| BirthDate | datetime
| YES | | NULL | |
| ExtraInfo | tinytext
| YES | | NULL | |
+-----------+----------------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
mysql>
insert into students (Name,Age,Gender,CID1,CID2) values ('w','19','F',2,3);
Query OK, 1 row affected (0.05 sec)
向表中插入数据
mysql>
select * from students where age >=19; 在students表查询
+-----+------+------+--------+------+------+-----------+-----------+
| SID | Name | Age | Gender | CID1 | CID2 | BirthDate | ExtraInfo |
+-----+------+------+--------+------+------+-----------+-----------+
|
1 | w | 19 | F | 2 | 3 | NULL | NULL |
+-----+------+------+--------+------+------+-----------+-----------+
1 row in set (0.00 sec)
mysql>
drop table students; 删除表
Query OK, 0 rows affected (0.05 sec)