.net mysql query_ASP.NET新人学习笔记-数据库篇

仅作为学习记录使用,以及其他新人做参考。

主要还是说一下数据库分页的东西把。作为刚刚大三出来实习的新人,数据库的分页上面还是不太熟练,一下是最近的实习过程中使用到的和查阅资料总结的一些经验。如有错误,望指正

1.SQL server数据库分页:

sql server作为高校课程中使用最多的数据库,也是目前很多新人唯一会用的数据库(mysql差不多算在一起把),基础的增删查改就不做多余的赘述了,先来说说sql的分页把。

方案一:(在sql2012以上版本时可以使用Offset/Fetch Next方法实现)

select [column1]

,[column2]

...

,[columnN]

from [tableName]

order by [columnM]

offset(pageIndex-1)*pageSize rows

fetch next pageSize rows only

稍微解释一下吧,offset(pageIndex-1)*pageSize rows字面意思的是偏移量,就是指从第多少条数据开始检索,相当于skip的作用,

fetch next pageSize rows only从检索开始的位置取接下来的pageSize条数据

offset/fetch next这个语法再老版本的服务器上可能不支持,但是再sql2012之后推荐使用,性能比较不错

方案二:(利用ID大于多少和SELECT TOP分页)

SELECT TOP 页大小*

FROM TestTable

WHERE (ID >

(SELECT MAX(id)

FROM (SELECT TOP页大小*页数id

FROM表

ORDER BY id) AS T))

ORDER BY ID

其它方法,如使用rownumber,也是较为不错的方法,但使用环境局限,

Limit skip只有在mysql和特定的SQL server版本中可以使用,

Mysql差不多,但是mysql还有另外一个更简单的分页方法,使用limit,具体方法百度上有详细教程。

2.mongo数据分页

mongo对于很多在校大学生或者实习新人来说应该是陌生的,同样也是我第一款接触到的NoSql(Not Only SQL)即非关系型数据库,再刚开始用的时候可以说是完全找不到头绪。但是会用了之后,还是能明显感觉到nosql数据库再处理大量数据存储事务上,其效率还是要比传统的sql数据库快一些。但是相应的,nosql数据库对于数据的一致性的保持上是不如sql数据库的。

C#使用mongo有一点需要注意,不同版本的驱动,语法不同,redis也一样,

我这里使用的是

908dbf83c3d6

使用的驱动

前提:MongoCollection collection = db.GetCollection("Users");

方案一:条件查询 原生Query实现

var query =Query.GT(item => item.Amount, 2399927);

var result =collection.Find(query).SetLimit(100).SetSortOrder(SortBy.Ascending("amount")).ToList();

Console.WriteLine(result.First().ToJson());//BSON自带的ToJson

这个方法使用的其实是mongo数据库本身就带有的语法,封装到了Query类中,效率的话还是不错,

方案二:Skip原生Query实现

var result =collection.FindAll().SetSkip(100000).SetLimit(100).SetSortOrder(SortBy.Ascending("amount"));

Console.WriteLine(result.ToList().First().ToJson());

有一点需要注意的是,setlimit方法与setskip方法的使用需要注意其调用顺序

方案三:Linq 条件查询

var result =collection.AsQueryable().OrderBy(item => item.Amount).Where(item=>item.Amount>2399927).Take(100);Console.WriteLine(result.First().ToJson());

linq相信熟悉c#的都不会陌生了,这里使用了lambda表达式作为Linq查询的条件,

方案四:Linq Skip版本

var result =collection.AsQueryable().OrderBy(item =>item.Amount).Skip(100000).Take(100);Console.WriteLine(result.First().ToJson());

同方案三,都是使用了c#的linq,使用时要引用命名空间。

3.Redis连接与使用

redis作为一个在实际业务中广泛使用的数据库 ,其效率自然是不用说的,但一般是作为缓存库来用。自己做测试时需要注意的是,必须要把redis的服务运行起来,才能成功连接到redis数据库

连接

usingServiceStack;

usingServiceStack.Commands;

usingServiceStack.Text;

usingServiceStack.Redis;

//需要添加nuGet包里的serviceStack相关的包

private RedisClient redis = new RedisClient("127.0.0.1", 6379, "", 1);

//参数说明:连接地址,连接端口,连接密码,连接数据库(从数据库集合中通过index选择)

插入

redis.Add(key name, key value ,expired

time);//新增键名 键值 过期时间

实例:redis.Add(users.UserId.ToString(),

users,DateTime.Now.AddMilliseconds(1000*60*60*2));// Users是一个实体类

查询

redis.Get(key name);

实例:Users users =redis.Get(UserId.ToString());

删除

redis.Remove(key name);

更新

redis.Set(key name, new key value,expiredtime)

注意

这里需要注意到是,set会将该数据替换为新的数据,例如原数据为id:xxxx{xx:xx,yy:yy}新数据为id:xxxx{xx:yy}则更新后,结果并不是id:xxxx{xx:yy,yy:yy}而是id:xxxx{xx:yy},

908dbf83c3d6

redis非覆盖更新思路(仅供参考)

还有过期时间也会被重写,要保持过期时间不变,需要保存好

908dbf83c3d6

获取键名为KeyName的值的数据的剩余过期时间

mongo的update也是覆盖更新,要实现非覆盖更新可以再更新之前先将元数据保存下来,将要修改的数据更新到保存的数据中,再将这条数据写回去

908dbf83c3d6

mongo非覆盖更新思路(仅供参考)

4.MemCached连接与使用

memcached作为一款存储在内存中的数据库,作为缓存使用其效率也是非常的高

memcached的驱动也有很多版本,我这里使用的是enyim的,

usingEnyim.Caching;

usingEnyim.Caching.Memcached;

//需要添加nuGet包里的enyim

private MemcachedClient client = newMemcachedClient( );

static readonly object padlock = new object();

保存

client.Store(StoreMode.Set, KeyName,

KeyValue, DateTime.Now.AddMilliseconds(1000 * 60 * 5));//参数说明:模式,键名,键值,过期时间

删除

client.Remove(KeyName);

查询

client.Get(KeyName).ToString();

修改

client.Store(StoreMode.Replace, KeyName,KeyValue, DateTime.Now.AddMilliseconds(1000 * 60 * 5))

以上都是个人见解,若有错误,敬请指教,避免误导他人。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值