mysql数据库基础

数据库及mysql


二分法:平均大概需要十四次左右就能找到我们需要查找的数据;问题是文件需要事先排好顺序;

我们将某一列给提取出来,通过二分法,平均14次找到这个用户名本身,这里面存放的是数据文件的地址。

我们将这个文件叫做索引文件。INDEX。


第二种方法叫做:B+数索引;是我们找到一个数据平均只需要四次左右;这样我们思考一个问题,我们这些数据需要放到那个地方去?

查找索引我们将其称为搜索码?谁来帮我们管理索引?就需要开发一个应用程序来帮助我们管理这两个文件之间的关系。这个工具我们称为

数据管理工具。

管理软件功能:帮我们管理数据,帮助我们维护索引与数据之间的关联性。



php自己开发一段程序,想去查找一个用户。是靠程序查找,还是靠管理软件来查找。这都是需要php自己去开发一套程序。查找程序是要我们程序自己去完成的。

我们可以将查找算法做成模块。



对数据的操作的两种方法:一种是通过软件来帮我们管理数据,算法都在软件里面自己写。还有一种方法则是通过管理软件来帮我们管理数据。因此程序只告诉标准,并返回结果。

这样以来这个管理软件就能够按照某一标准帮我们管理数据了。每一次更新数据之前,其实先进行的是查找,看是否有重复的。每一次删除也需要查询一遍。我们将这些众多的功能

都交由该文件来完成。


数据是如何通过php进行通信的?它们之间的通信需要有协议来帮我们实现。最简单的方式就是通过API帮我们实现。这个API其实就是一个库文件,帮我们提供删除、增加等功能。

那这个API需要用哪一种语言来编写。这就需要多种语言的API。增删改查就是API里面的语言。而如何将其显示,则是应用程序自身的问题。


ODBC:open  database connection:开放数据库互联。

驱动负责将程序翻译成cAPI。php程序员只需要使用php驱动就行了。java程序员只需要使用JAVA驱动就行了。。。。。。。我们只需要将这个驱动安装好即可。



如果不是程序员的话,数据库给用户提供一个命令行接口,通过这些命令行接口提供的内置命令。

通过这些命令来调用API,帮助我们完成特定的工作。



线程池(Thread Pool):数据库使用线程的方法来响应用户请求。


DBMS:

DataBase Management System (数据库管理系统)

用户视图

作为工程师来讲既要看到用户试图,又要看到物理试图。


物理视图  01代码;


数据的组织结构:

层次型的结构;

网状型结构;

关系型;

必须要根据业务逻辑来设计数据库;改了数据库就需要改程序,改了程序就要改数据库;

耦合度非常紧密。


RDBMS:

Relational Database Management System(关系型数据库管理系统)

在众多的管理软件中,数据库管理软件是最复杂的。


用户视图

DBA视图

数据文件视图


数据库管理软件应该具有的功能有哪些?

1、数据库创建、删除、

2、创建表、删除表、修改表

3、索引的创建、删除

4、用户和权限

5、数据增、删、改

6、查询


DML:Data Manapulate Language: 数据操作语言

INSERT, REPLACE(替换数据), UPDATE, DELETE 


DDL:Data Defination Lanuage: 数据定义语言

CREATE, ALTER, DROP

DCL:Data Control Language: 数据控制语言

GRANT, REVOKE

提供RDBMS的软件有哪些?

egresql(之前的加州伯克利大学研发的)

oracle  授权最便宜的要十几万;多的要几百万。价格很昂贵。

SYBASE 

Infomix


MYSQL  Postgresql(后sql公司研发的)

EnterpriseDB 



sql server是microsoft与sybase一块研发的一个数据库;只能允许在windows上面。


MYSQL,SQL,MYSQL AB(有限公司)

去IOE:IBM的小型机,O指的是ORACLE,E指的是EMC,专门做存储的。

靠一大堆的pc机集群,放在有众多pc机集群上面,而且比原来系统的性能更强。


SUN在2008年,花费10亿买了MYSQL。sun有自己的操作系统solaris,编程语言JAVA。


ORACLE购买了SUN。


ORACLE收购了BEA公司,BEA公司生产weblogic;peoplesoft公司。


OPENOFFICE -->>Libreoffice;


MYSQL的开源版本叫做MariaDB;目前大部分公司用的都是Mysql。Percona公司优化的mysql比原有的mysql性能要好很多很多。Percona提供了更多比mysql更好的功能。

现在的数据库设计者开始去关系化,这种数据库叫做nosql数据库。不在满足于关系型数据库的特性,而是根据业务的需要,关注数据库的读写性能,同时满足数据管理的作用。

比如:MongoDB,Redis,HBASE这三种数据库。


综上我们要先学好关系型数据库。


DBMS:

数据管理独立性;

有效地完成数据存取,并不需要每次都对数据进行完整的扫描。

数据完整性和安全性;

数据集中管理;

并发存储与故障恢复;一般而言,一个DBMS都应该提供相应的功能的。

减少应用程序开发时间;


Structure query language(结构查询语言):


sql86  sql89  sql92  sql99等等。定义了数据库的管理接口应该具有哪些功能等等。



关系型数据库组件:

各种应用程序

SQL命令

DBMS功能  提供一个分析器,做词法分析和语法分析。将分析的结果生成执行计划

计划执行器

优化器

 文件的存取方法

 先将文件读取到内存里面

事务管理器 处理数据       还应该有故障恢复管理器

锁管理器 磁盘空间管理器

进行管理之后,将其存储到磁盘上

DML:Data Manapulate Language: 数据操作语言

INSERT, REPLACE(替换数据), UPDATE, DELETE 


DDL:Data Defination Lanuage: 数据定义语言

CREATE, ALTER, DROP

DCL:Data Control Language: 数据控制语言

GRANT, REVOKE

具体mysql应该如何使用?

mysql的版本有两个版本:商业版和社区版本

     Community  EDITION(社区版)

ENTERPRISE EDITION(企业版)


www.mysql.com


mysql CLuster

mysql enterprise

mysql workbench:MySQL的统一图形化工具;

mysql  connectors:mysql的连接器;

我们一般下载社区版,有三种格式的mysql。


软件包格式:

软件包管理器特有的格式

rpm包,.exe格式等

通用二进制格式

源程序


下载Generic的包即可;


RHEL 5.8 (32bit)

mysql, mysql-server

[root@localhost ~]# yum list all |grep mysql

Unable to read consumer identity

apr-util-mysql.x86_64                       1.2.7-11.el5_5.2           base     

freeradius-mysql.x86_64                     1.1.3-1.6.el5              base     

freeradius2-mysql.x86_64                    2.1.12-3.el5               base     

libdbi-dbd-mysql.x86_64                     0.8.1a-1.2.2               base     

mod_auth_mysql.x86_64                       1:3.0.0-3.2.el5_3          base     

mysql.i386                                  5.0.77-4.el5_6.6           base     

mysql.x86_64                                5.0.77-4.el5_6.6           base     

mysql-bench.x86_64                          5.0.77-4.el5_6.6           base     

mysql-connector-odbc.x86_64                 3.51.26r1127-2.el5         base     

mysql-connector-odbc64.x86_64               5.1.8-1.el5                base     

mysql-devel.i386                            5.0.77-4.el5_6.6           base     

mysql-devel.x86_64                          5.0.77-4.el5_6.6           base     

mysql-server.x86_64                         5.0.77-4.el5_6.6           base     

mysql-test.x86_64                           5.0.77-4.el5_6.6           base     

php-mysql.x86_64                            5.1.6-32.el5               base     

php53-mysql.x86_64                          5.3.3-5.el5                base     

qt4-mysql.x86_64                            4.2.1-1.el5_7.1            base     

rsyslog-mysql.x86_64                        3.22.1-7.el5               base

注意mysql也是一种C/S架构的服务器;

mysql.i386:这个是客户端的软件包;

mysql-bench.x86_64:性能分析组件

mysql-test.x86_64 :性能测试器

mysql-connector-odbc.x86_64:连接器

mysql-server.x86_64:服务器端软件包

php53-mysql.x86_64 :php访问mysql的驱动


但是这个软件包特别老,需要使用mysql的最新软件包。



LAMP:需要使用mysql的源码包进行编译;因此除非特别需要定制MYSQL的某些性能;一般情况下建议使用msyql的二进制格式进行安装即可。


mysql,mysql-server


客户端进程叫mysql,服务器端进程叫做mysqld。msyql监听在tcp的3306端口。而且默认情况下,使用一个普通用户运行。

mysql只是一个RDBMS。


RDBMS:这个服务器在我们生成数据的时候,默认情况下保存在/var/lib/mysql目录里面;所以需要修改我们的数据文件目录的位置。


使用: yum install -y mysql-server安装服务器端软件;


mysql有一个初始化的动作,注意初始化是干什么的?

文件的元数据存放位置:元数据区存放;对于mysql数据库而言,也有很多元数据。

比如表名字,数据库名字,字段名字、字段属性等。所以mysql数据库本身有一个内置的数据库名字,这个数据库名字叫做mysql。

刚装完数据库的时候,这个数据库是不存在的。mysql初始化的过程就是建这个数据库的。所以mysql数据库安装完毕之后是没有mysql这个数据库的。


/usr/bin/mysqladmin -u root@HOST password ‘new-password‘  这个用户是mysql服务器的root,而不是操作系统的root。


mysql  -u  #用户          包括客户端主机名以及用户名,  username@HOST

  -p #passwd

  -h #mysqlserver    不支持本地IP

  这几个选项都可以不写。

  

mysql基于TCP的3306端口;如果客户端和服务器端位于同一个主机上,使用的是叫做socket的方式进行连接的。而在windows上面使用的是叫做共享内存的方式进行连接的。

[root@localhost mysql]# ls

ib_logfile0  ib_logfile1  ibdata1  mysql  mysql.soc 

这个mysql.soc说明的就是本地进程间的通信机制;

如果客户端与服务器端不位于同一台主机上,必须要使用tcp IP协议。

mysql客户端工具是交互式客户端工具。

mysql客户端:

交互式模式;

批处理模式(执行mysql脚本所用的)。


交互式模式中的命令类别:

客户端命令:\q

服务器端命令:select  

注意:所有的客户端命令,写完命令即可执行。服务器端命令则要写明命令结束符,默认是分号。


SQL接口:

ORACLE sql,PL/SQL;

SQL SERVER:T-SQL 事物sql

mysql接口扩展功能:show databases;

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema | 保证兼容性用的,是mysql运行过程中,位于内存中的信息。关机之后是空的,打开这个数据库之后,有很多数据。

| mysql              | 

| test                 空的,只有测试的时候才用到它。

每一个数据库,对应于我们操作系统的每一个目录。

[root@localhost mysql]# pwd

/var/lib/mysql

默认数据库存放位置。数据库区分大小写与否取决于文件系统类型。

  


对mysql数据库管理,我们应该有哪些相关内容:

关系数据库对象:

索引

视图

约束

存储过程

存储函数

触发器:做主动数据库时候用的

游标

用户



权限

事务


表:

行,列

表:实体

行:row

列:field,colum。

一个表至少有一个列,

字段名称:数据类型,类型修饰(限制);

字符型:

char(n);#不区分大小写的字符。

VARCHAR(n);

BINARY(N)   #区分大小写的字符;

VARBINARY(N)

char最多存储256个字符,也就是8个字节。

TEXT(n) 

BLOB(n)二进制的大对象

数值:

精确数值型:

整形

TINYINT(1)

SMALLINT(2)

MEDIUMINT(3)

INT(4)

BIGINT

修饰符:UNSIGNED,无符号(表示只有正数或者0)

十进制

DECIMAL

近似数值型

浮点型

FLOAT

DOUBLE

日期时间:

DATE

TIME

DATETIME

STAMP

布尔型:

mysql内置变量类型:ENUM(允许最多支持几种类型,叫做枚举)

 

 mysql是强类型的,必须要实现定义数据类型。


INT A=10

CHAR A=10



DDL(数据定义语言)


create

alter

drop

DML(数据操纵语言)

INSERT

UPDATE

DELETE

DCL (数据控制语言)

GRANT

REVOKE

注意对mysql而言,这些命令都不区分大小写。

创建数据库语言:

CREATE DATABASE db_name; 

CREATE DATABASE [IF NOT EXISTS] db_name;

DROP DATABASE [IF EXISTS] db_name;

创建表:

create table tb_name(col1,col2,....)

创建表:

mysql> create table mydb.students(Name CHAR(20) not null,Age TINYINT unsigned,Gender CHAR(1) not null);

查看表结构:

desc  students;

删除表:DROP TABLE tb_name;

修改表:

alter table stdudents 

MODIFY:修改字段属性

CHANGE:改变字段名称及属性;

ADD:添加字段

DROP:删除字段

例如添加字段:

alter table  add course VARCHAR(100);#给表增加一列

alter table students change course Course varchar(100) after name;#针对表中的course列进行修改;


mysql> help alter table;#查看修改表的帮助信息。




DML:

INSERT INTO  tb_name (col1,col2,...) values|value (‘string‘,num,...);

一次可以插入多行数据。

INSERT INTO  tb_name (col1,col2,...) values|value (‘string‘,num,...),(‘string’,num,...);

注意格式与之前的那个格式一样即可。

insert into students (Name,Gender) values (‘Linghuchong‘,‘m‘),(‘xiaolongnv‘,‘F‘);

也可以参照下面的语句插入数据。

insert into students values (‘xiaoxiangzi‘,‘hamagong‘,57,‘M‘) 

   

    update tb_name set column=value where ;  #注意将某一行内容进行修改,不指定where值将对整个表的数据进行修改。

delete from tb_name;#默认是删除表的所有行,加上where只删除表中符合某些条件的行。

选择和投影:

选择:指定某字段作为搜索码与某值比较,做逻辑比较运算。将符合条件的行筛选出来,where指定筛选条件。

投影:使用select的时候只显示某些特定的列。

选择:

select 字段 from tb_name where condition

*所有字段;

没有where表示所有行;


DCL(数据控制语言)

创建用户:

create user ‘username‘@‘host‘ identified by ‘password‘;

drop user ‘username‘@‘host‘

注意:jerry@localhost jerry@172.16.100.1是两个不同的用户;

HOST:

IP

HOSTNAME

NETWORK

通配符

_:匹配任意单个字符  172.16.0_

%:匹配任意字符;

jerry@‘%‘:注意使用通配符的时候要使用通配符引用起来。

GRANT pri1,pri2,... ON DB_NAME.TB_NAME TO ‘USERNAME‘@‘HOST‘ [IDENTIFIED BY ‘PASSWORD‘];

    REVOKE pri1,pri2,... ON DB_NAME.TB_NAME FROM ‘USERNAME‘@‘HOST‘;

create user ‘jerry‘@‘%‘ identified by ‘jerry‘;

查看用户的授权使用:show grants for user;

all privileges:表示所有的权限;

mysql> grant all privileges on mydb.* to ‘jerry‘@‘%‘;

客户端做测试:打开172.16.100.108


mysql -u jerry -p -h 172.16.100.1 

登录查看。

MySQL基础操作练习(所属的库叫做testdb):


新建如下表(包括结构和内容):


ID    Name          Age     Gender     Course

1     Ling Huchong   24      Male       Hamogong

2     Huang Rong    19      Female     Chilian Shenzhang

3     Lu Wushaung   18      Female     Jiuyang Shenggong

4     Zhu Ziliu     52      Male       Pixie Jianfa

5     Chen Jialuo   22      Male       Xianglong Shiba Zhang

CREATE TABLE Students (ID INT,Name char(20),Age TINYINT,Gender CHAR(2),Course VARCHAR(20));


INSERT INTO Students VALUES(1,‘Ling Huchong‘,24,‘M‘,‘Hamagong‘),(2,‘Huang Rong‘,19,‘F‘,‘Chilian Shenzhang‘),(3,‘Lu Wushaung‘,18,‘F‘,‘Jiuyang Shenggong‘);

INSERT INTO Students VALUES (4,‘Zhu Ziliu‘,52,‘M‘,‘Pixie Jianfa‘),(5,‘Chen Jialuo‘,22,‘M‘,‘Xianglong Shiba Zhang‘);

alter Students modify Course VARCHAR(22); 修改表的属性。

命令使用帮助查看如下:help alter table;

update  Students set Gender=‘M‘ where Gender=‘MA‘;

2、完成如下操作

(1)找出性别为女性的所有人;

SELECT Name from Students WHERE Gender=‘F‘;

(2)找出年龄大于20的所有人;

SELECT Name from Students where Age>20;

(3)修改Zhu Ziliu的Course为Kuihua Baodian; 

update Students set Course=‘kuihua baodian‘ where Name=‘Zhu Ziliu‘

    -> ;

(4)删除年龄小于等于19岁的所有人;

     delete from Students where Age<=19;

(5)创建此表及所属的库;

见上面语句。

(6)授权给testusser对testdb库有所有访问权限;

CREATE USER ‘testuser‘@‘%‘ IDENTIFIED BY ‘testuser‘;

grant all privileges on testdb.* to ‘testuser‘;


mysql默认情况下管理员用户是没有密码的,当前系统有哪些用户,如何查看?

在mysql这个数据库的user表里面;

mysql> select user,host,Password from user;

+----------+-----------------------+------------------+

| user     | host                  | Password         |

+----------+-----------------------+------------------+

| root     | localhost             |                  | 

| root     | localhost.localdomain |                  | 

| root     | 127.0.0.1             |                  | 

|          | localhost             |                  | 

|          | localhost.localdomain |                  | 

从上表可以看出,root是本地登录的用户;这里面localhost和127.0.0.1是两个不同的用户。同时还有两个用户为空,这表示有两个匿名用户。

为用户设定密码,方法如下:

1、mysql>SET PASSWORD FOR ‘USERNAME‘@‘HOST‘=PASSWORD(‘password‘);#PASSWORD表示将这个密码字符串要进行加密存放。

   mysql> SET PASSWORD FOR ‘root‘@‘localhost‘=PASSWORD(‘123456‘);

   

   因为mysql这张表是在内存中存放的,类似于我们的/pro目录,所以我们修改完数据库的密码或者授权之后,要重新读取授权信息。命令如下:

   新设置用户或者修改密码后需要用FLUSH PRIVILEGES刷新Mysql的系统权限相关表。

   FLUSH PRIVILEGES;

   

2、# mysqladmin -uUSERNAME -hHOST -p password ‘password‘ 这表示指定老密码,修改为新密码。如果没有老密码,-p选项可以省略。

mysqladmin -uroot -h127.0.0.1 -p password ‘123456‘

Enter password: 

注意这样之后,我们的mysql密码被修改了。

3、mysql> UPDATE user SET Password=PASSWORD(‘password‘) WHERE USER=‘root‘ AND Host=‘127.0.0.1‘;

AND

OR

NOT

 

想建一个用户,允许其在172.16.这个网段都能连接过来,可以使用如下命令:

grant all privileges on *.*  to ‘root‘@‘172.16.%.%‘ identified by ‘redhat‘;

FLUSH PRIVILEGES

这样之后,我们就可以通过root用户,远程登录我们的mysql服务器;不过不建议大家这样使用。因为这种用户名和密码都是明文传送的,不安全。


下面说说mysql的图形化客户端工具有哪些:

最重要的叫做:

1、phpMyAdmin  最轻量级的一种工具,只需要在服务器端安装即可。

2、Workbench

3、MySQL Front  

4、Navicat for MySQL

5、Toad



可以下载一个叫做Navicat的客户端工具做一次测试。



下面要说明php的工作机制:

注意php本身和mysql没有任何关系,只不过php里面的程序需要用到数据的时候,会去调用MySQL的驱动程序,通过mysql的驱动程序连接上mysql,才能调用mysql数据库仅此而已。


webapp,webapp server,数据库服务器。


这三个服务器可以架构在一台服务器上,叫做单层架构;

也可以将apache和php放在一台服务器上,mysql一台服务器,叫做两层结构。

各占有一台服务器,apache和php之间通过fastcgi,数据库的话,再通过TCP/IP协议调用数据库服务器。这种我们称为三层结构。


php和mysql都是cpu密集型的,都非常占cpu资源。

怎么去配置让apache、php、mysql三者之间建立关联关系?

首先我们要装一个php与mysql的连接器。

[root@localhost ~]# yum install php53-mysql -y


下面我们需要开发一个php的脚本,访问mysql服务器。

下面继续编辑我们的index.php:

[root@localhost ~]# cd /www/a.org/

编辑index.php

[root@localhost a.org]# cat index.php 

<title>A</title>

<h1>D</h1>

<?php

        $conn=mysql_connect(‘localhost‘,‘root‘,‘123456‘);

        if ($conn)

                echo "success...";

        else

                echo "failure..."

?>

然后重启我们的服务器,在页面进行测试http://172.16.100.2即可。测试我们的mysql是否关联上来。


LAMP:

phpMyadmin

论坛程序:

discuz

phpwind

phpbb

wordpress 个人博客系统,全球性的。

www.discuz.net就可以进行下载安装了。

一般情况下使用GBK编码的就可以了。

以discuz为例子进行阐释:

下载discuz软件包,进行解压缩;

mv upload/*  /www/a.org/

然后通过网页打开即可。

vim /etc/httpd/httpd.conf

AddDefaultCharSet#修改主配置文件的编码方式即可。


CMS:内容管理系统;

比如drupal;

joomla;


LAMP:


下载一个工具phpMyadmin-3.4.3.2-all-language.tar.gz

解压缩放到/www/a.org下面然后页面进行访问的时候就能访问到了,这个页面是我们的一个mysql的客户端工具。为了安全起见,建议大家再下载一个

php53-mcrypt-5.3.3-1.e15.i386.rpm




接下去就会进行讲解手动编译:apache2.4,mysql5.6,php5.4的系统。配置完成后,就会成为我们现在安装的这个样子。


需要对以上内容全部进行安装,看看里面的内容。


本文出自 “汗水成就梦想” 博客,请务必保留此出处http://redhatdragon.blog.51cto.com/9183870/1441265

mysql数据库基础

上一篇:LINUX 下mysql主从安装与同步


下一篇:MySQL安装:MariaDB二进制包方式安装