Memcache和MsSQL交互流程图
如上图,传统的查询方法是直接查询数据库,数据库将结果返回给查询语句,而当有Memcache中间缓存层时,查询的是Memcache缓存数据,下面详细了解Memcache各类数据操作原理:
1,查询数据(select),首先通过指定的Key查询(get)Memcache中间缓存层数据,如果存在相对应数据,则直接获取出数据结果,查询过程完全不需要查询数据库。如果不存在,则查询MsSQL数据库,并以key对应value的形式将查询结果存储在Memcache缓存数据中,然后将结果返回给查询语句。
2,更新数据(update),首先更新数据,然后删除相关的memcache数据(delete)。
3,增加数据(add),首先删除相关缓存数据,然后增加数据。
4,删除数据(delete),删除数据,并删除Memcache数据。
对MsSQL的数据操作,主要涉及到的Memcache方法如下:
1,获取:get(key)
2,设置:set(key, value [, expiry])
3,删除:delete(key [, time])
实例:
假设一个贴子,获取贴子ID为2009的值,其Memcache与MsSQL交互流程如下:
string key = "sky";//key前缀
int cachetime = 100;//缓存有效时间(秒)
string id = "2009";
Memcache基本操作过程
1,查询:result = ......
DECLARE @dt1 AS datetime, @dt2 AS datetime;
SELECT @dt1 = '2008-8-4 9:36:41', @dt2 = '2008-8-2 9:33:39';
DECLARE @Days AS int, @Hours AS int, @Minutes AS int, @Seconds AS int;
SET @Seconds = DATEDIFF( second, @dt2, @dt1);
SET @Days = @Seconds / (24 * 60 * 60)
SET @Seconds = @Seconds - @Days * 24 * 60 * 60
SET @Hours = @Seconds / (60 * 60);
SET @Seconds = @Seconds - @Hours * 60 * 60
SET @Minutes = @Seconds / 60;
SET @Seconds = @Seconds - @Minutes * 60;
SELECT CONVERT(varchar(10), @Days ) + '天'
+ CONVERT(varchar(10), @Hours ) + '小时'
+ CONVERT(varchar(10), @Minutes ) + '分'
+ CONVERT(varchar(10), @Seconds ) + '秒'; ......
在工作和学习中,常常会遇到需要把数据库带回家继续进行开发的情况,但用数据库自带的工具,有时候很麻烦,总是需要选择数据存放的目录
下面的二句脚本可以实现数据库的分离和附件
1.分离数据库
Sp_detach_db 数据库名
2.附件数据库
Sp_attach_db '数据库名','mdf文件存放目录','ldf文件存放目录' ......
检查所使用的语句是否标准
/*
标准SQL和T-SQL之间有很多区别——太多了,这里就不说了。还有,如果你在SQL Server上工作,
那么使用这些私有的扩展是有好处的。由于许多SQL Server的特性的本质,你不使用非标准的命令的话,
将会有很多强大的功能无法实现。如果你想要看看你的SQL是否符合标准,你可以使用SET FIPS_FLAGGER
命令
*/
SET FIPS_FLAGGER 'level'
/*
' level '
对 FIPS 127-2 标准的遵从级别,将检查所有数据库操作是否达到该级别。如果数据库操作与选定的 ISO 标准级别冲突,则 Microsoft SQL Server 将生成一个警告。
level 必须是下列值中的一个。
值 说明
ENTRY 检查是否遵从 ISO 入门级标准。
FULL
检查是否遵从 ISO 完全级标准。
INTERMEDIATE 检查是否遵从 ISO 中间级标准。
OFF
不检查是否遵从标准。
*/
/*
SET FIPS_FLAGGER 的设置是在分析时设置,而不是在执行或运行时设置。在分析时进行设置意味着:SET 语句只要出现在批处理或存储过程中即生效,与代码执行实际上是否到达该点无关;并 ......
ORACLE
CREATE OR REPLACE FUNCTION SETSTATE(OLDVALUE VARCHAR2, POS NUMBER, SVALUE VARCHAR2)
RETURN VARCHAR2
IS
RETURN_VALUE VARCHAR2 (20);
LEN NUMBER(8);
I NUMBER(8);
TEMP_VALUE VARCHAR2(1);
BEGIN
LEN := LENGTH(OLDVALUE);
IF POS > LEN THEN
RETURN '指定的索引大于字符串的长度!';
END IF;
I := 0;
RETURN_VALUE := '';
FOR I IN 1..LEN LOOP
TEMP_VALUE := SUBSTR(OLDVALUE, I, 1);
IF I = POS THEN
TEMP_VALUE := SVALUE;
END IF;
RETURN_VALUE := RETURN_VALUE || TEMP_VALUE;
END LOOP;
& ......
ORACLE
CREATE OR REPLACE FUNCTION SETSTATE(OLDVALUE VARCHAR2, POS NUMBER, SVALUE VARCHAR2)
RETURN VARCHAR2
IS
RETURN_VALUE VARCHAR2 (20);
LEN NUMBER(8);
I NUMBER(8);
TEMP_VALUE VARCHAR2(1);
BEGIN
LEN := LENGTH(OLDVALUE);
IF POS > LEN THEN
RETURN '指定的索引大于字符串的长度!';
END IF;
I := 0;
RETURN_VALUE := '';
FOR I IN 1..LEN LOOP
TEMP_VALUE := SUBSTR(OLDVALUE, I, 1);
IF I = POS THEN
TEMP_VALUE := SVALUE;
END IF;
RETURN_VALUE := RETURN_VALUE || TEMP_VALUE;
END LOOP;
& ......
转载 http://www.jb51.net/article/17875.htm
MS-SQL游标的使用及理解 windows或DOS的“光标”不同,MS-SQL的游标是一种临时的数据库对象,既对可用来旋转储存在系统永久表中的数据行的副本,也可以指向储存在系统永久表中的数据行
游标为您提供了在逐行的基础上而不是一次处理整个结果集为基础的操作表中数据的方法。
1.如何使用游标
1)定义游标语句 Declare <游标名> Cursor For
2)创建游标语句 Open <游标名>
3)提取游标列值、移动记录指针 Fetch <列名列表> from <游标名> [Into <变量列表>]
4)使用@@Fetch_Status利用While循环处理游标中的行
5)删除游标并释放语句 Close <游标名>/Deallocate <游标名>
6)游标应用实例
--定义游标
Declare cur_Depart Cursor
For Select cDeptID,cDeptName from Department into @DeptID,@DeptName
--创建游标
Open cur_Depart
--移动或提取列值
Fetch from cur_Depart into @DeptID,@DeptName
--利用循环处理游标中的列值
While @@Fetch_Status=0
Begin
Print @DeptID,@DeptName
Fetch from ......