创建一个带有输入参数的嵌套调用的存储过程的方法

在学习SQL的时候,发现我们的教材里没有存储过程的描述,实在是太水了!于是到图书馆借了本SQL server的书,希望能找到完成以下的要求的方法。因为对SQL的语法不熟悉,还是没做出来。上网查阅了之后,还是没有找到我想要的结果。最后,跟同学讨论之后,完成了这个问题,在这里,给出这个问题的解决方法,希望在未来能给网友带来帮助。

题目:

创建并执行带有输入参数的嵌套调用的存储过程proc_嵌套_学生成绩,输入学生的姓名,可以查询学生的每门课的成绩。首先创建一个带有输入和输出参数的存储过程proc_STU,查询指定学生姓名的学生编号,输入参数保存在“@Sname”,输出参数保存在“@Sno”中,最后根据Sno在Reports表中查询成绩。

首先,先创建存储过程proc_STU:

 

 

 

这个存储过程是用来嵌套在下面这个“proc_嵌套_学生成绩”存储过程中的。接着,就要创建“proc_嵌套_学生成绩”

 

 

 

 

 

要注意以上的语句的!最后,只要输入语句“EXEC proc_嵌套_学生成绩 @Sname=’某某某’”并执行就行了。

Tonitech版权所有 | 转载请注明出处: http://www.tonitech.com/?p=439

Linux中PHP的Memcache扩展安装

  最开始我先说一句,以下很多的安装路径视每台机器的情况而定,文中的路径是我电脑的路径,大家如果跟我的不一样可以使用find来查找路径。

PHP的Memcache扩展安装分为三个步骤:

第一个步骤是:安装libevent

第二个步骤是:安装Memcached

第三个步骤是:安装PHP的Memcache模块

 

下载软件

所需软件(去以下网址中下载最新版本)

libevent-2.0.19-stable.tar.gz (http://libevent.org/)

memcache-3.0.6.tgz (http://pecl.php.net/package/memcache)

memcached-1.4.13.tar.gz (http://www.danga.com/memcached/)

将文件上传到服务器中,我存放的位置是/usr/local/src/

 

安装libevent

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台,而且根据libevent官方网站上公布的数据统计,似乎也有着非凡的性能。因此很多的服务器可能已经安装了libevent,所以先测试libevent是否已经安装:

# ls -al /usr/lib | grep libevent

 

lrwxrwxrwx.   1 root root       21 7?. 23 01:04 libevent-1.4.so.2 -> libevent-1.4.so.2.1.3

-rwxr-xr-x.   1 root root   108948 6?. 22 19:55 libevent-1.4.so.2.1.3

-rw-r–r–.   1 root root   133014 6?. 22 19:55 libevent.a

lrwxrwxrwx.   1 root root       26 7?. 23 01:04 libevent_core-1.4.so.2 -> libevent_core-1.4.so.2.1.3

-rwxr-xr-x.   1 root root    37080 6?. 22 19:55 libevent_core-1.4.so.2.1.3

-rw-r–r–.   1 root root    47248 6?. 22 19:55 libevent_core.a

lrwxrwxrwx.   1 root root       26 7?. 23 01:04 libevent_core.so -> libevent_core-1.4.so.2.1.3

lrwxrwxrwx.   1 root root       27 7?. 23 01:04 libevent_extra-1.4.so.2 -> libevent_extra-1.4.so.2.1.3

-rwxr-xr-x.   1 root root    84228 6?. 22 19:55 libevent_extra-1.4.so.2.1.3

-rw-r–r–.   1 root root   103130 6?. 22 19:55 libevent_extra.a

lrwxrwxrwx.   1 root root       27 7?. 23 01:04 libevent_extra.so -> libevent_extra-1.4.so.2.1.3

lrwxrwxrwx.   1 root root       21 7?. 23 01:04 libevent.so -> libevent-1.4.so.2.1.3

 

如果没有以上的内容,那么你就要安装libevent了,先解压缩libevent-2.0.19-stable.tar.gz,再编译安装:

# cd /usr/local/src

# tar zxvf libevent-2.0.19-stable.tar.gz

# cd libevent-2.0.19-stable

# ./configure –prefix=/usr/local/libevent

# make && make install

安装好可以再用上面的方式检查一下。

 

安装memcached

解压缩 memcached-1.4.13.tar.gz, 编译安装

# cd /usr/local/src

# tar zxvf memcached-1.4.13.tar.gz

# cd cd memcached-1.4.13

# ./configure –prefix=/usr/local/memchached –with-libevent=/usr/local/libevent

# make && make install

 

启动memcached

# /usr/local/memchached/bin/memcached -d start -m 128 -p 11211 -u root

附:

以下是memcache启动、关闭参数:

-p 指定端口号(默认11211)

-m 指定最大使用内存大小(默认64MB)

-t 线程数(默认4)

-l 连接的IP地址, 默认是本机

-d start 启动memcached服务

-d restart 重启memcached服务

-d stop|shutdown 关闭正在运行的memcached服务

-m 最大内存使用,单位MB。默认64MB

-M 内存耗尽时返回错误,而不是删除项

-c 最大同时连接数,默认是1024

-f 块大小增长因子,默认是1.25

-n 最小分配空间,key+value+flags默认是48

值得注意的是重启memcache:

先找到memcache的pid:

# ps -ef|grep memcache

再kill掉进程,再执行启动相关参数的memcache,可以重新设置memcache的占用的内存。

 

安装php的memcache模块

# cd /usr/local/src

# tar zxvf memcache-3.0.6.tgz# cd memcache-3.0.6# /usr/local/php/bin/phpize# ./configure –enable-memcache –with-php-config=/usr/local/php/bin/php-config –with-zlib-dir# make && make install

安装完后会有类似这样的提示:

Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

把这个路径记住,然后修改php.ini

添加一行

extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/memcache.so

这时候就大功告成了!

 

检查memcache是否正常工作

部署好Memcached之后,需要对Memcached的使用情况进行跟踪:监控Memcached的状态信息、内存使用情况、hit/miss的值。通过对Memcached的监控不仅能立刻了解Memcached出现问题,还能够利用状态信息来分析业务数据的增长并为未来的容量规划提供依据。本文推荐使用memcache.php作为memcache监控来检查memcache是否正常工作以及跟踪使用情况:

到以下这个网址下载这个工具:

http://book.51cto.com/art/201202/314917.htm

将这个文件放到localhost下,并修改以下这部分的内容:

define(‘ADMIN_USERNAME’,’memcache’);  // Admin Username

define(‘ADMIN_PASSWORD’,’password’);   // Admin Password

define(‘DATE_FORMAT’,’Y/m/d H:i:s’);

define(‘GRAPH_SIZE’,200);

define(‘MAX_ITEM_DUMP’,50);

 

$MEMCACHE_SERVERS[] = ‘mymemcache-server1:11211’; // add more as an array

$MEMCACHE_SERVERS[] = ‘mymemcache-server2:11211’; // add more as an array

 

改成:

define(‘ADMIN_USERNAME’,’admin’);       // 我的管理用户名:admin,你可以随便设置

define(‘ADMIN_PASSWORD’,’123456′);      // 我的管理员密码:123456,你可以随便设置

define(‘DATE_FORMAT’,’Y/m/d H:i:s’);

define(‘GRAPH_SIZE’,200);

define(‘MAX_ITEM_DUMP’,50);

 

$MEMCACHE_SERVERS[] = ‘localhost:11211’; // 将前面的mymemcache-server1改成localhost

$MEMCACHE_SERVERS[] = ‘mymemcache-server2:11211’; // 这一行可以删除掉

 

最后打开http//:localhost/memcache.php,查看是否有下图的内容:

 

 

 

 

 

如果没有这内容,重启一下php或者服务器试试,重启之后一般都可以解决了。

CentOS下编译安装LAMP环境(Tony大作)

引子

CentOS下编译安装LAMP环境是博主Tony一段难忘的时光,谨以此文献给奋战在潜龙班的新人们。

 

说明

首先要感谢《完美应用红帽企业版Linux》一书,博主在参阅了此书之后,经过二十几次的严格实验和修改写下此文,希望广大网友尊重作者的劳动,转载请注明出处。

 

LAMP介绍

Linux+Apache+Mysql+PHP一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。

 

准备源码包

curl-7.15.0.tar.gz

freetype-2.4.2.tar.gz

gd-2.0.35.tar.gz

httpd-2.2.16.tar.gz

jpegsrc.v8b.tar.gz

libiconv-1.13.tar.gz

libmcrypt-2.5.8.tar.gz

libpng-1.2.44.tar.gz

libxml2-2.6.30.tar.gz

mysql-5.1.60.tar.gz

php-5.3.10.tar.gz

phpMyAdmin-3.4.10.1-all-languages.tar.gz

zlib-1.2.5.tar.gz

一共有12个软件源码包,大家只要去百度一下这个包的名字,都有下载资源。如果不想下载,而且时间不急,可以发电子邮件给我,索要这一些包,我会发送给你们的。下载完这些源代码包之后,全部存放在系统(http://www.tonitech.com/?p=280 这篇文章讲述如何在虚拟机中安装CentOS)的/usr/local/src/目录下备用(用Filezilla将源码包上传到虚拟机的这个目录下)。

 

安装编译环境

在命令行中输入如下指令:

yum install gcc gcc-c++ gcc-g77 flex autoconfig automake bison zlib-devel bzip2-devel ncurses-devel libtool libtool-ltdl openssl openssl-devel pam-devel libtermcap-devel curl-devel libxml2-devel libevent libevent-devel gettext-devel

 

LAMP编译和安装

 

安装iconv库

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压libiconv-1.13.tar.gz文件到默认目录libiconv-1.13下:

tar zxvf libiconv-1.13.tar.gz

3.然后进入libiconv-1.13目录:

cd libiconv-1.13

4.配置、编译和安装libiconv库

./configure –prefix=/usr && make && make install

 

安装libxml2库

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压libxml2-2.6.30.tar.gz文件到默认目录libxml2-2.6.30下:

tar zxvf libxml2-2.6.30.tar.gz

3.然后进入libxml2-2.6.30目录:

cd libxml2-2.6.30

4.配置、编译和安装libxml库:

./configure –prefix=/usr && make && make install

 

安装curl库文件

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压curl-7.15.0.tar.gz文件到默认目录curl-7.15.0下:

tar zxvf curl-7.15.0.tar.gz

3.然后进入curl-7.15.0目录:

cd curl-7.15.0

4.配置、编译和安装curl库:

./configure –prefix=/usr && make && make install

 

安装libmcrypt库

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压libmcrypt-2.5.8.tar.gz文件到默认目录libmcrypt-2.5.8下:

tar zxvf libmcrypt-2.5.8.tar.gz

3.然后进入libmcrypt-2.5.8目录:

cd libmcrypt-2.5.8

4.配置、编译和安装libmcrypt库:

./configure –prefix=/usr && make && make install

 

安装zlib库文件

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压zlib-1.2.5.tar.gz文件到默认目录zlib-1.2.5下:

tar zxvf zlib-1.2.5.tar.gz

3.然后进入zlib-1.2.5目录:

cd zlib-1.2.5

4.配置、编译和安装zlib库:

./configure –prefix=/usr && make && make install

 

安装libpng库文件

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压libpng-1.2.44.tar.gz文件到默认目录libpng-1.2.44下:

tar zxvf libpng-1.2.44.tar.gz

3.然后进入libpng-1.2.44目录:

cd libpng-1.2.44

4.配置、编译和安装libpng库:

./configure –prefix=/usr && make && make install

 

安装JPEG库

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压jpegsrc.v8b.tar.gz文件到默认目录jpeg-8b下:

tar zxvf jpegsrc.v8b.tar.gz

3.然后进入jpeg-8b目录:

cd jpeg-8b

4.配置jpeg库:

./configure –prefix=/usr –enable-shared –enable-static

5.编译和安装jpeg库:

make && make install

 

安装freetype库文件

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压freetype-2.4.2.tar.gz文件到默认目录freetype-2.4.2下:

tar zxvf freetype-2.4.2.tar.gz

3.然后进入freetype-2.4.2目录

cd freetype-2.4.2

4.配置、编译和安装freetype库

./configure –prefix=/usr && make && make install

 

安装GD库文件

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压gd-2.0.35.tar.gz文件到默认目录gd-2.0.35下:

tar zxvf gd-2.0.35.tar.gz

3.然后进入gd-2.0.35目录:

cd gd-2.0.35

4.配置gd库:

./configure –prefix=/usr/local/gd2/ –with-jpeg –with-png –with-freetype

5.编译和安装gd库:

make && make install

 

安装Apache服务器

具体操作如下:

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压httpd-2.2.16.tar.gz文件到默认目录httpd-2.2.16下:

tar zxvf httpd-2.2.16.tar.gz

3.然后进入httpd-2.2.16目录:

cd httpd-2.2.16

4.配置Apache:

./configure \
--prefix=/usr/local/apache2 \
--sysconfdir=/etc/httpd \
--with-z \
--with-included-apr \
--disable-userdir \
--enable-so \
--enable-deflate=shared \
--enable-expires=shared \
--enable-rewrite=shared \
--enable-static-support

5.编译和安装Apache:

make && make install

6.安装成功后,检查所有安装的文件,进入/usr/local/apache2/目录下:

cd /usr/local/apache2/

输入:

ls

确认是否有以下目录:

7.启动Apache服务器:

/usr/local/apache2/bin/apachectl start

8.查看80端口是否开启:

netstat -tnl|grep 80

确认是否显示如下:

9.最后在命令行中输入:

curl localhost

如果出现如下内容,说明Apache已经工作了:

 

安装MySQL数据库管理系统

具体操作如下:

1.首先要位mysqld增加一个登陆用户和用户组,用户名和组名都为“mysql”。指令如下:

groupadd mysql

useradd -g mysql mysql

2.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

3.解压mysql-5.1.60.tar.gz文件到默认目录mysql-5.1.60下:

tar zxvf mysql-5.1.60.tar.gz

4.然后进入mysql-5.1.60目录:

cd mysql-5.1.60

5.配置mysql:

./configure \
--prefix=/usr/local/mysql \
--with-extra-charsets=all \
--with-client-ldflags=-all-static \
--with-mysqld-ldflags=-all-static \
--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

6.编译和安装mysql:

make && make install

7.创建MySQL数据库服务器的配置文件:

cp support-files/my-medium.cnf /etc/my.cnf

8.进入mysql的安装目录:

cd /usr/local/mysql

9.初始化MySQL数据库授权表:

bin/mysql_install_db –user=mysql

10.将程序二进制的所有权改为root用户,数据目录的所有权改为运行mysqld程序的mysql用户:

chown -R root .

chown -R mysql var

chgrp -R mysql .

11.使用service脚本管理MySQL服务并启动MySQL:

cp share/mysql/mysql.server /etc/init.d/mysql

cp share/mysql/mysql.server /etc/init.d/mysqld

chmod 755 /etc/init.d/mysqld

chkconfig –add mysqld

chkconfig mysqld on

service mysqld start

12.查看3306端口是否开启:

netstat -anptu|grep :3306

确认是否显示如下:

13.设置MySQL管理员密码(我设置的是123456):

bin/mysqladmin -u root -p password ‘123456’

14.清空命令历史,防止密码泄露:

history -c

 

安装PHP

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压php-5.3.10.tar.gz文件到默认目录php-5.3.10下:

tar zxvf php-5.3.10.tar.gz

3.然后进入php-5.3.10目录:

cd php-5.3.10

4.配置PHP:

./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-libxml-dir --with-curl \
--with-png-dir \
--with-jpeg-dir \
--with-freetype-dir \
--with-gd=/usr/local/gd2 \
--with-zlib-dir \
--with-mcrypt \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--enable-soap \
--enable-mbstring \
--enable-sockets

5.更新动态链接库缓存:

ldconfig

6.编译和安装PHP:

make && make install

7.建立PHP配置文件:

cp php.ini-development /usr/local/php/etc/php.ini

8.编辑apache配置文件:

vim /etc/httpd/httpd.conf

在编辑器中:

AddType application/x-compress .Z

AddType application/x-gzip .gz .tgz  //在这一行下面添加

AddType application/x-httpd-php .php .phtml  //添加这一条

DirectoryIndex index.php  //添加php格式首页

9.修改完成之后重新启动Apache服务器:

/usr/local/apache2/bin/apachectl stop

/usr/local/apache2/bin/apachectl start

10.在/usr/local/apache2/htdocs目录下建一个test.php文件:

vi test.php

在编辑器中:

<?php

phpinfo();

?>

11.在浏览器中输入localhost/test.php,看看是否有下面的页面:

安装phpMyAdmin

1.进入准备的源码包所在的目录/usr/local/src/下:

cd /usr/local/src/

2.解压phpMyAdmin-3.4.10.1-all-languages.tar.gz文件:

tar zxvf phpMyAdmin-3.4.10.1-all-languages.tar.gz

3.复制目录到/usr/local/apache2/htdocs/下的phpmyadmin目录中,可以再浏览器中输入localhost/phpmyadmin,输入MySQL的用户名和密码即可访问:

cp -a phpMyAdmin-3.4.10.1-all-languages /usr/local/apache2/htdocs/ phpmyadmin

 

让Apache和MySQL随系统启动

1.编辑rc.local启动脚本:

vim /etc/rc.d/rc.local

在编辑器中添加:/usr/local/apache2/bin/apachectl start

机械硬盘、固态硬盘、内存虚拟硬盘——Memcache介绍(Tony原创)

近几年来,计算机的CPU、内存和显卡等主要配件的性能都提升得很快,而与之相对应的磁盘系统性能正越来越严重地成为整个电脑系统性能提升的瓶颈。

首先,我们看看机械硬盘、固态硬盘和内存虚拟硬盘的读写速度比较:

1.机械硬盘测试

机械硬盘的读写速度

测试使用的机械硬盘属性如下:

产品西数 WDC WD5000AAKX-001CA0 (蓝盘)

大小500 GB

转速7200 /

缓存16 MB

硬盘已使用共 117 次,累计 571 小时

固件15.01H15

接口SATA III

数据传输率600 MB/

特征S.M.A.R.T,  48-bit LBA,  NCQ

从测试的结果可以看出该机械硬盘的最快读写速度大概在110~120MB/秒左右。

2.固态硬盘测试

固态硬盘的读写速度

固态硬盘最大的特点就是读写速度快。采用闪存作为存储介质,读取速度相对机械硬盘更快。固态硬盘不用磁头,寻道时间几乎为0,持续写入的速度非常惊人。 

固态硬盘使用的是DELL XPS13D-2701 SSD固态硬盘。

可以看出固态硬盘的最快读写速度大概在300~500MB/秒左右。

3.内存虚拟硬盘测试

内存虚拟硬盘的读写速度

内存虚拟硬盘(ramdisk)是指通过软件技术,将物理内存进行分割,将一部分内存通过虚拟技术转变为硬盘以较大幅度提升计算机数据读取速度和保护硬盘。

测试使用的内存属性如下:

金士顿 DDR3 1333MHz 2GB

制造日期2011 年 07 

型号7F98 99P5471-002.A01LF

序列号:35D2268E

可以看出内存虚拟硬盘的最快读写速度在3000MB/秒以上。

4.Memcache介绍

从以上测试的结果可以看出,现在内存的读写速度比固态硬盘的读写速度快三四十倍,比如今堪称神速的固态硬盘要快10倍。现在我们很多的网站都会将数据存储在数据库中,虽然数据库有很多的优点,但数据库也有致命的缺点,例如:数据库的并发量是有限制的,如果有很多的用户访问,服务器就会瘫痪;数据库是存储在硬盘中的,数据的读写速度太慢会造成用户体验的降低。如果一个网站没有解决这两个问题,很可能造成大量的用户流失,我曾经的http://www.xiahuimingcheng.com就是因为这样的问题造成了很多用户不喜欢访问。

现在,我给大家介绍一个能减轻数据库负担的内存对象缓存系统——Memcache,以下是百度百科的解释:Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。 

通过上面对硬盘和内存的存储介质的分析,不难推出Memcache的读写速度有多快。本人亲自测试过,原来使用handle socket写入数据库需要91秒的大量数据,改成使用Memcache之后,只需要8秒钟。在未来,还会详细对比MemcachettServerHandle Socket以及文件系统的读写速度,敬请关注!