日历

2017年十二月
« 9月    
 123
45678910
11121314151617
18192021222324
25262728293031

最近评论

    linux企业应用

    mysql php源码安装和配置步骤 Discuz和Ucenter安装配置

    安装mysql:
        MySQL是目前最受欢迎的关系型数据库系统之一,在2008年以前由MySQL AB公司开发、发布和支持。2008年1月SUN公司将MySQL AB收购,目前MySQL项目由SUN公司继续开发和维护,SUN公司又被甲骨文收购。MySQL AB中的“AB”是瑞典语“Aktiebolag”或“股份公司”的首字母缩写,可翻译为“MySQL有限公司”。MySQL是一个开源的数据库服务器软件,可以自由从Internet下载和使用,官方站点为: www.mysql.com。MySQL是一个真正的多线程、多用户的SQL数据库服务器,基于客户/服务器结构实现,具有功能强大、使用简单、管理方便、查询速度快、安全可靠等优点。
        安装步骤如下:
    [root@myfreelinux ~]# rpm -qa | egrep mysql 在使用源码安装前,确认没有安装二进制的mysql,一面引起冲突。
    [root@myfreelinux ~]# cd /var/ftp/pub
    [root@myfreelinux pub]# ls
    mysql-5.0.56.tar.gz
    [root@myfreelinux pub]# tar zxf mysql-5.0.56.tar.gz
    [root@myfreelinux pub]# cd mysql-5.0.56
    [root@myfreelinux mysql-5.0.56]# ./configure –prefix=/usr/local/mysql
    [root@myfreelinux mysql-5.0.56]# make && make install

    linux企业应用

    mysql第十二部分 mysql存储过程的编程风格

        前面我们已经编辑了很多的存储过程,虽然每一个过程都能够运行且达到相应的目标,但是实际上并不符合mysql的编程风格。真正的编程风格是这样的:
    mysql> CREATE PROCEDURE proce()
        -> BEGIN
        ->     /* THERE MAYBE SOME COMMENTS!*/
        ->     UPDATE t1 SET filed=2;
        -> END;//
        关键字应该大写,我们已经编辑的众多存储过程一般都是使用小写字母,但真正的编程风格中关键字应该是大写,在命名约定中,数据表明最好是以“t”开头,而每个域,最好以“s”开头。
        注释和C语言中的一样:在BEGIN后的语句一般缩进一个TAB字符或4个空格,END则和BEGIN在同一列。
       
        下面来看几个例子,并学习一下:

    linux企业应用

    mysql第十一部分 MYSQL与ORACLE SQLSERVER DB2的区别

    下面,我们来看一下mysql中的一些细节问题,比如alter(修改)和drop(删除),oracle/sql server /db2/ANSI comparison,style,bugs,featere requests,resources等。
        首先看ALTER AND DROP
    mysql> show procedure status where db=’db1’//
        显示所有的存储过程,太多,这里就不列出来了,发现p20过程有一个说明,下面更改一下p20的comment说明,那么我们可以这样:
    mysql> alter procedure p20 comment ‘modify comment’//
    Query OK, 0 rows affected (0.00 sec)

    mysql> show procedure status where name=’p20’//
    +—–+——+———–+—————-+———————+———————+—————+—————-+
    | Db  | Name | Type      | Definer        | Modified            | Created             | Security_type | Comment        |
    +—–+——+———–+—————-+———————+———————+—————+—————-+
    | db1 | p20  | PROCEDURE | root@localhost | […]

    linux/unix基础知识

    mysql第十部分 如何查看创建的存储过程

    到目前为止,我们已经创建了很多的存储过程了,他们也都保存在mysql数据库中,如果我们要查看mysql实际上保存了什么信息,可以有四种方法,两种使用show语句,两种使用select语句,他们的格式如下:
    SHOW CREATE PROCEDURE / SHOW CREATE FUNCTION
    SHOW PROCEDURE STATUS / SHOW FUNCTION STATUS
    SELECT FROM MYSQL.PROC
    SELECT FROM INFORMATION_SCHEMA
    下面针对以上几种语句举例说明一下。
    1、使用show create procedure获得存储过程的信息,和show create table等mysql语法类似,这条语句不返回创建时设定的返回值,而是返回过程的语句信息:

    linux/unix基础知识

    mysql第九部分 mysql的游标

        下面开始学习游标,首先看一下游标的基本事务比如:声明游标,打开游标,从游标读取,关闭游标,他们的语法如下:
    DECLARE cursor-name CURSOR FOR SELECT…;
    OPEN cursor-name;
    FETCH cursor-name INTO variable [,variable];
    CLOSE cursor-name;
        那么现在就看几个游标的例子。       
    mysql> create procedure pro19(out value int)
        -> begin
        -> declare x,y int;
        -> declare cursor_1 cursor for select filed from t1;
        -> declare continue handler for not found
        -> set y=1;
        -> open cursor_1;
        -> repeat
        ->     fetch cursor_1 into x;
        -> until […]

    linux企业应用

    mysql第八部分 存储过程的异常处理

    在这部分,主要讲解一些简单的问题、异常处理器和条件。下面首先看几个简单的问题:
    1、log of failures 错误日志
    在INSERT失败时,希望将错误记录到日志文件中,以便需要时能查看到错误记录,当然也可以将错误时间、出错原因等记录到指定的文件中。
    2、下面做一个例子,创建一个主键表,一个外键表,在mysql中由于使用了InnoDB存储引擎,所以外键关联检查是打开的,所以向外键表中插入非主键表的值时,是不会成功的,操作过程和结果如下:
    mysql> create table t2
        -> (s1 int,primary key(s1))
        -> engine=innodb;//
    Query OK, 0 rows affected (0.28 sec)

    linux企业应用

    mysql第七部分 mysql存储过程的循环控制指令

        在mysql存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环。还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了。
        这几个循环语句的格式如下:
    WHILE……DO……END WHILE
    REPEAT……UNTIL END REPEAT
    LOOP……END LOOP
    GOTO。

    linux企业应用

    mysql第六部分 存储过程的变量声明if和case指令

        声明局部变量
        DECLARE仅被用在BEGIN……END复合语句中声明局部变量,并且必须在复合语句的开头,在任何其他语句之前。DECLARE声明局部变量的语法是:DECLARE var_name[…] type [DEFAULT value],声明的变量如果没有设定初始值,那么系统默认为NULL,如果设定初始值,初始值可以使一个表达式,不需要为一个常数。局部变量的作用范围在它被声明的BEGIN……END块内,如果在嵌套的块中,局部变量只声明了一次,这个变量也可以在嵌套的块中使用。
    mysql> create procedure pro2()
        -> begin
        -> declare x int;
        -> declare y int;
        -> set x=2;
        -> set y=4;
        -> insert into t1(filed) values(x);
        -> select filed * x from t1 where filed >=y;
        -> end;//
    Query OK, 0 rows affected (0.01 sec)

    linux企业应用

    mysql第五部分 mysql存储过程中的参数变量

    下面,学习怎样在存储过程中使用参数,首先看下面4个例子:
    1、create procedure p1() ……
    2、create procedure p2([IN] name data-type) ……
    3、create procedure p3(OUT name data-type) ……
    4、create procedure p4(INOUT name data-type) ……
    上面第一个例子的没有参数;第二个例子有一个输入参数(IN是input的缩写,而且参数默认是输入参数,所以IN可以省略不写);第三个例子中有一个输出参数;第四个例子中的参数既能作为输入参数也可以作为输出参数。根据这四个例子,再举几个实际的例子,第一种类型的例子在这里就不再列举了,“第二部分mysql为什么使用存储过程”使用的例子就是没有参数的情况。
        首先看一下输入的例子:
    mysql> create procedure p6(i int) set @x=i;
    Query OK, 0 rows affected (0.01 sec)

    linux/unix基础知识

    mysql第四部分 mysql的特征句子

       1、首先来看几个能反映存储过程特性的子句,子句在存储过程之后(也就是p20()之后),存储过程的主题之前(也就是sql语句之前)。
    mysql> create procedure p20()
        ->  language sql                #注意,每个->之后都要有一个空格,否则,辛辛苦苦将全部的存储过程语句写完后,会提示错误
        ->  not deterministic     #也可以在每行的最后一个词之后加一个空格
        ->  sql security definer
        ->  comment ‘a procedure’
        ->  select current_date,rand() from t1;
    调用一下存储过程,看一下结果:
    mysql> call p20;
    +————–+——————+
    | current_date | rand()           |
    +————–+——————+
    | 2010-06-25   | 0.25000709225424 |
    +————–+——————+
    1 row in set (0.00 sec)
    Query OK, 0 rows affected (0.00 sec)
        实际上并没有t1这个表中的数据!!只是返回了当前日期和一个随机数:lol: 那么这些子句,哪些是需要的,哪些是不需要的呢?接着看。

    linux企业应用

    mysql第三部分 在mysql中那些是合法的存储语句

         在Mysql存储过程使用包含INSERT, UPDATE,  DELETE, SELECT, DROP, CREATE, REPLACE等关键词的sql语句都是合法的sql语句,需要特别注意的是如果代码中包含MySQL扩充功能,那么代码将不能移植。在标准SQL语句中:任何数据库定义语言都是合法的,如:
    mysql> create procedure p() delete from t1;
        SET、COMMIT以及ROLLBACK也是合法的,如:
     mysql> create procedure p2() set @x=5;
        MySQL的附加功能:任何数据操作语言的语句都是合法,比如:mysql> create procedure p3() drop table t1;
       MySQL扩充功能:直接的SELECT也是合法的,比如:mysql> create procedure p4() select ‘a’;
        在SQL标准中,没有把DDL语句的功能定义为核心功能,所以在mysql中,将DDL功能只算一个附加功能。

    linux企业应用

    mysql 第二部分 mysql为什么使用存储过程

    存储过程对于MySQL来说是新的功能,它有以下几个优点:
        1、 存储过程是已经被认证的技术!虽然在Mysql中是新技术,但是相同功能的函数在其他DBMS中早已存在,而它们的语法往往是相同的。因此我们可以从其他人那里获得这些概念,也有很多我们可以咨询或者雇用的经验用户,还有许多第三方的文档可供我们阅读。          
        2、存储过程使系统运行的更快!虽然我们暂时不能在Mysql上证明这个优势,用户得到的体验也不一样。我们可以说的就是Mysql服务器在缓存机制上做了改进,就像Prepared statements (预处理语句)所做的那样。由于没有编译器,因此SQL存储过程不会像外部语言(如C)编写的程序运行起来那么快。但是提升速度的主要方法却在于能否降低网络信息流量。如果我们需要处理的是需要检查、循环、多语句但没有用户交互的重复性任务,我们就可以使用保存在服务器上的存储过程来完成。这样在执行任务的每一步时服务器和客户端之间就没那么多的信息来往了。          
        3、存储过程可重用! 如果我们改变了主机的语言,这对存储过程不会产生影响,因为它是数据库逻辑而不是应用程序。存储过程是可以移植的!当我们用SQL编写存储过程时,我们就知道它可以运行在Mysql支持的任何平台上,不需要我们额外添加运行环境包,也不需要为程序在操作系统中设置执行许可,或者为我们的不同型号的电脑配置不同的包。这就是与Java、C或PHP等外部语言相比使用SQL语句的优势。不过, 使用外部语言例程的好处还是很好的选择,它们只是没有以上的优点而已。
        4、存储过程可以被保存 !比如我们编好了一个程序,例如显示银行事务处理中撤销支票的信息,那些想要了解支票信息的人就可以找到我们的程序。它会以源代码的形式保存在数据库中。
        5、存储过程可以移植。mysql支持SQL 2003标准,同样支持DB2和Mimer数据库,但不支持Oracle、SQL Server数据库。

    linux/unix基础知识

    编辑MYSQL时出错:No curses/termcap library found

    系统环境:CentOS 5.4
    系统是默认安装,安装的软件不是很多,在编辑MYSQL时:
    [root@myfreelinux mysql-5.0.56]#./configure –prefix=/usr/local/mysql –with-charset=gb2312  –with-extra-charsets=all
    编译执行后出现如下错误:
    checking for termcap functions library… configure: error: No curses/termcap library found
     
    解决方法:
    编译时加上ncurses库的路径即可解决,即
    [root@myfreelinux mysql-5.0.56]#./configure –prefix=/usr/local/mysql –with-charset=gb2312  –with-extra-charsets=all –with-named-curses-libs=/usr/lib/libncurses.so.5

    linux/unix基础知识

    mysql 第一部分 简介 定义和实例

        简介:在这里,简单的来说是介绍了“存储过程、触发器、视图、信息架构视图”
        定义和实例:存储过程是一种存储在数据库中的程序(就像正规语言里的子程序一样),准确的来说,MySQL支持的“routines  (例程)”有两种:一是存储过程,二是在其他SQL语句中可以返回值的函数(使用起来和Mysql预装载的函数一样,如pi() )。在本书里面会更经常使用存储过程,因为这是使用习惯。
        一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。  在这里对局部变量,异常处理,循环控制和IF条件句有新的语法定义。           下面是一个包括存储过程的实例声明:
    CREATE PROCEDURE procedure1      /* 存储过程名*/          
    (IN parameter1 INTEGER)                    /*参数*/          
    BEGIN                                                           /*语句块头*/          
    DECLARE variable1 CHAR(10);         /* 变量声明 */           
    IF parameter1 = 17 THEN                   /* IF条件开始*/            
    SET variable1 = ‘birds’;                        /*   赋值*/           
    ELSE            
    SET variable1 = ‘beasts’;                   /* 赋值*/           
    END IF;                                                    /* IF结束*/          
      INSERT INTO table1 VALUES (variable1);/*  SQL的插入数据的语句*/          
    END                                                      /*  语句块结束*/          
    以后将会介绍你可以利用存储过程做的工作的所有细节。同时将介绍新的数据库对象——触发器,因为触发器和存储过程的关联是必然的。