欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

只有两行的表如何设置约束?

程序员文章站 2022-05-25 23:45:27
...
因为微信公众平台开发需要对access_token和jsapi_ticket进行缓存,所以建立了一个wx_token的表,表有三个字段,两行数据,如下:

| key| content | expire |
| access_token | xxxx | 111111111 |
| jsapi_ticket | xxxx | 111111111 |
只作为缓存,所以每次查询或者修改“content”和“expire”内的内容,“key”内的内容作为标示。

最开始我只是建立这两个表,没有设置主键和约束,但是这样查询和更新都会出现错误。
我的问题是:
1.必须要把key设置成主键吗?
2.不设置主键就没有办法查询和更新吗?(或者说简单的方法)如果有那么该如何建表?
以上。

回复内容:

因为微信公众平台开发需要对access_token和jsapi_ticket进行缓存,所以建立了一个wx_token的表,表有三个字段,两行数据,如下:

| key| content | expire |
| access_token | xxxx | 111111111 |
| jsapi_ticket | xxxx | 111111111 |
只作为缓存,所以每次查询或者修改“content”和“expire”内的内容,“key”内的内容作为标示。

最开始我只是建立这两个表,没有设置主键和约束,但是这样查询和更新都会出现错误。
我的问题是:
1.必须要把key设置成主键吗?
2.不设置主键就没有办法查询和更新吗?(或者说简单的方法)如果有那么该如何建表?
以上。

1、主键就相当于 唯一值+索引 的功能,你key字段的记录往下会有重复吗?你建表的时候忘加或者后期需要主键,可以后期添加的,有索引的话,当你记录数足够多时效率大大提高。(也可以单独创索引)

2、索引除了提高查询速度外,也能提高UPDATE,DELETE,INSERT操作的速度,比如你这里经常会使用:
select * from wx_token where key='access_token';
或者
update wx_token set content='值',expire='值' where key='access_token';

主要看记录数量、哪种DML语句执行的频繁来做决定。

AccessToken 和 Ticket 是有过期时间的,因此不建议使用数据库作为缓存层,可以考虑使用内存缓存(Apc 或 memcached)等。

https://github.com/thenbsp/wechat/blob/master/documentation/accesstoken.md
https://github.com/thenbsp/wechat/blob/master/documentation/ticket.md