博主依然不想打字,又向你仍来了一堆代码。。。

13(续)

在SELECT中用COUNT()以及联合

mysql> SELECT customers.cust_id,COUNT(orders.order_num) AS num_ord
-> FROM customers INNER JOIN orders
-> ON customers.cust_id=orders.cust_id
-> GROUP BY cust_id;
+------------+---------+
| cust_id | num_ord |
+------------+---------+
| 1000000001 | 2 |
| 1000000003 | 1 |
| 1000000004 | 1 |
| 1000000005 | 1 |
+------------+---------+
4 rows in set (0.00 sec)

14、组合查询

UNION,UNION ALL(显示重复行);

多条SELECT合并为一个查询输出;

必须有相同的列数,顺序可以不一样但数据类型要可以转换的;

UNION ALL显示重复行,除此以外的使用,都可以用WHERE来替换;

ORDER BY放在最后一句,只需要一句;

不过事实证明,顺序还是会有影响的 。。。

mysql> SELECT cust_name,cust_contact,cust_emali
-> FROM customers
-> WHERE cust_state IN ('IL','IN','MI');
ERROR 1054 (42S22): Unknown column 'cust_emali' in 'field list'
mysql> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_state IN ('IL','IN','MI');
+---------------+--------------+-----------------------+
| cust_name | cust_contact | cust_email |
+---------------+--------------+-----------------------+
| Village Toys | John Smith | sales@villagetoys.com |
| Fun4All | Jim Jones | jjones@fun4all.com |
| The Toy Store | Kim Howard | NULL |
+---------------+--------------+-----------------------+
3 rows in set (0.00 sec) mysql> SELECT cust_name,cust_email,cust_contact
-> FROM customers
-> WHERE cust_name='Fun4All';
+-----------+-----------------------+--------------------+
| cust_name | cust_email | cust_contact |
+-----------+-----------------------+--------------------+
| Fun4All | jjones@fun4all.com | Jim Jones |
| Fun4All | dstephens@fun4all.com | Denise L. Stephens |
+-----------+-----------------------+--------------------+
2 rows in set (0.00 sec) mysql> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_state IN ('IL','IN','MI')
-> UNION
-> SELECT cust_name,cust_email,cust_contact
-> FROM customers
-> WHERE cust_name='Fun4All';
+---------------+-----------------------+-----------------------+
| cust_name | cust_contact | cust_email |
+---------------+-----------------------+-----------------------+
| Village Toys | John Smith | sales@villagetoys.com |
| Fun4All | Jim Jones | jjones@fun4all.com |
| The Toy Store | Kim Howard | NULL |
| Fun4All | jjones@fun4all.com | Jim Jones |
| Fun4All | dstephens@fun4all.com | Denise L. Stephens |
+---------------+-----------------------+-----------------------+
5 rows in set (0.00 sec) mysql> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_state IN ('IL','IN','MI')
-> UNION
-> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_name='Fun4All';
+---------------+--------------------+-----------------------+
| cust_name | cust_contact | cust_email |
+---------------+--------------------+-----------------------+
| Village Toys | John Smith | sales@villagetoys.com |
| Fun4All | Jim Jones | jjones@fun4all.com |
| The Toy Store | Kim Howard | NULL |
| Fun4All | Denise L. Stephens | dstephens@fun4all.com |
+---------------+--------------------+-----------------------+
4 rows in set (0.00 sec) mysql> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_state IN ('IL','IN','MI')
-> UNION ALL
-> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_name='Fun4All';
+---------------+--------------------+-----------------------+
| cust_name | cust_contact | cust_email |
+---------------+--------------------+-----------------------+
| Village Toys | John Smith | sales@villagetoys.com |
| Fun4All | Jim Jones | jjones@fun4all.com |
| The Toy Store | Kim Howard | NULL |
| Fun4All | Jim Jones | jjones@fun4all.com |
| Fun4All | Denise L. Stephens | dstephens@fun4all.com |
+---------------+--------------------+-----------------------+
5 rows in set (0.00 sec) mysql> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_state IN ('IL','IN','MI')
-> UNION
-> SELECT cust_name,cust_contact,cust_email
-> FROM customers
-> WHERE cust_name='Fun4All'
-> ORDER BY cust_name;
+---------------+--------------------+-----------------------+
| cust_name | cust_contact | cust_email |
+---------------+--------------------+-----------------------+
| Fun4All | Jim Jones | jjones@fun4all.com |
| Fun4All | Denise L. Stephens | dstephens@fun4all.com |
| The Toy Store | Kim Howard | NULL |
| Village Toys | John Smith | sales@villagetoys.com |
+---------------+--------------------+-----------------------+
4 rows in set (0.00 sec)

15、插入数据

INSERT,INSERT INTO,INSERT SELECT,SELECT INTO

插入完整的行,插入行的一部分,插入某些查询结果;

用INSERT INTO替代INSERT,提高可移植性;

注意格式写法;

最好写上列名;

INSERT一般只能插入一条,INSERT SELECT是个例外;

SELECT INTO实现复制(MySQL和Oracle的有所不同)

mysql> CREATE TABLE custNew(
-> cust_id INT PRIMARY KEY,
-> cust_contact VARCHAR(32),
-> cust_email VARCHAR(32),
-> cust_name VARCHAR(32),
-> cust_address VARCHAR(64),
-> cust_city VARCHAR(16),
-> cust_state VARCHAR(16),
-> cust_zip SMALLINT,
-> cust_country VARCHAR(16)
-> );
Query OK, 0 rows affected (0.21 sec) mysql> INSERT INTO custNew(
-> cust_id,
-> cust_email,
-> cust_name,
-> cust_zip,
-> cust_country,
-> cust_city)
-> VALUES(
-> 1021,
-> 'liangbocv@126.com',
-> 'Andy Liang',
-> 610000,
-> 'China',
-> 'Chengdu');
Query OK, 1 row affected, 1 warning (0.04 sec) mysql> INSERT INTO customers(
-> cust_id,
-> cust_email,
-> cust_name,
-> cust_zip,
-> cust_country,
-> cust_city)
-> SELECT cust_id,
-> cust_email,
-> cust_name,
-> cust_zip,
-> cust_country,
-> cust_city
-> FROM custNew;
Query OK, 1 row affected (0.03 sec)
Records: 1 Duplicates: 0 Warnings: 0 mysql> SELECT * FROM customers;
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI | 44444 | USA | John Smith | sales@villagetoys.com |
| 1000000002 | Kids Place | 333 South Lake Drive | Columbus | OH | 43333 | USA | Michelle Green | NULL |
| 1000000003 | Fun4All | 1 Sunny Place | Muncie | IN | 42222 | USA | Jim Jones | jjones@fun4all.com |
| 1000000004 | Fun4All | 829 Riverside Drive | Phoenix | AZ | 88888 | USA | Denise L. Stephens | dstephens@fun4all.com |
| 1000000005 | The Toy Store | 4545 53rd Street | Chicago | IL | 54545 | USA | Kim Howard | NULL |
| 1021 | Andy Liang | NULL | Chengdu | NULL | 32767 | China | NULL | liangbocv@126.com |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
6 rows in set (0.00 sec) mysql> CREATE TABLE custcopy(
-> cust_id VARCHAR(16),
-> cust_contact VARCHAR(32),
-> cust_email VARCHAR(32),
-> cust_name VARCHAR(32),
-> cust_address VARCHAR(64),
-> cust_city VARCHAR(16),
-> cust_state VARCHAR(16),
-> cust_zip VARCHAR(16),
-> cust_country VARCHAR(16)
-> );
Query OK, 0 rows affected (0.26 sec) mysql> SELECT *
-> INTO custcopy
-> FROM customers;
ERROR 1327 (42000): Undeclared variable: custcopy
mysql> CREATE TABLE custcopy2 AS
-> SELECT *
-> FROM customers;
Query OK, 6 rows affected (0.41 sec)
Records: 6 Duplicates: 0 Warnings: 0

16、更新和删除数据

UPADTE,DELETE

容易使用,但请小心使用;(没有UNDO!!!)

UPDATE为null=DELETE;

一些习惯:一定带WHERE ,避免对整个表有影响;

对数据做更改时,请先SELECT查询一下,看对象是否没错;

确保每个表有主键

mysql> SELECT cust_id,cust_address,cust_state
-> FROM customers
-> WHERE cust_id='';
+---------+--------------+------------+
| cust_id | cust_address | cust_state |
+---------+--------------+------------+
| 1021 | NULL | NULL |
+---------+--------------+------------+
1 row in set (0.00 sec) mysql> UPDATE customers
-> SET cust_address='2006 Xiyuan Ave.',
-> cust_state='SC'
-> WHERE cust_id='';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> SELECT cust_id,cust_address,cust_state
-> FROM customers
-> WHERE cust_id='';
+---------+------------------+------------+
| cust_id | cust_address | cust_state |
+---------+------------------+------------+
| 1021 | 2006 Xiyuan Ave. | SC |
+---------+------------------+------------+
1 row in set (0.00 sec) mysql> UPDATE customers
-> SET cust_email=NULL
-> WHERE cust_id='';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> DELETE FROM customers
-> WHERE cust_id='';
Query OK, 1 row affected (0.08 sec)

17、创建和操作表

CREATE,DROP,ALTER,RENAME,DEFAULT

更新表,和更新数据一样小心,做好备份;

重命名不太一样,mysql是RENAME

mysql> ALTER TABLE custcopy2
-> ADD cust_gender VARCHAR(8);
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SELECT CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2016-08-10 |
+----------------+
1 row in set (0.16 sec) mysql> ALTER TABLE custcopy2
-> ADD add_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
Query OK, 0 rows affected (0.46 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> DROP TABLE custcopy;
Query OK, 0 rows affected (0.13 sec) mysql> RENAME TABLE custcopy2 TO custcopy;
Query OK, 0 rows affected (0.10 sec)

18、使用视图

VIEW

view实际上就是个虚拟的表,只包含使用时动态检索数据的查询;

使用view,有利于代码重用,保护数据,简化操作;

视图名也要唯一;可以嵌套,一般禁止ORDER BY;

用于简化复杂联结,格式化输出,过滤不想要的数据等;

WHERE语句会自动合并

mysql> CREATE VIEW shit AS
-> SELECT cust_name,cust_id,cust_contact,cust_address
-> FROM customers
-> ;
Query OK, 0 rows affected (0.07 sec) mysql> SELECT cust_name,cust_address
-> FROM shit
-> WHERE cust_id='';
Empty set (0.00 sec) mysql> SELECT * FROM customers;
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI | 44444 | USA | John Smith | sales@villagetoys.com |
| 1000000002 | Kids Place | 333 South Lake Drive | Columbus | OH | 43333 | USA | Michelle Green | NULL |
| 1000000003 | Fun4All | 1 Sunny Place | Muncie | IN | 42222 | USA | Jim Jones | jjones@fun4all.com |
| 1000000004 | Fun4All | 829 Riverside Drive | Phoenix | AZ | 88888 | USA | Denise L. Stephens | dstephens@fun4all.com |
| 1000000005 | The Toy Store | 4545 53rd Street | Chicago | IL | 54545 | USA | Kim Howard | NULL |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
5 rows in set (0.00 sec) mysql> SELECT cust_name,cust_address
-> FROM shit
-> WHERE cust_id='';
+--------------+----------------+
| cust_name | cust_address |
+--------------+----------------+
| Village Toys | 200 Maple Lane |
+--------------+----------------+
1 row in set (0.00 sec) mysql> CREATE VIEW hasEmail AS
-> SELECT cust_name,cust_id,cust_email
-> FROM customers
-> WHERE cust_email IS NOT NULL;
Query OK, 0 rows affected (0.06 sec) mysql> SELECT *
-> FROM hasEmail
-> WHERE cust_name='Fun4All';
+-----------+------------+-----------------------+
| cust_name | cust_id | cust_email |
+-----------+------------+-----------------------+
| Fun4All | 1000000003 | jjones@fun4all.com |
| Fun4All | 1000000004 | dstephens@fun4all.com |
+-----------+------------+-----------------------+
2 rows in set (0.00 sec)

19、存储过程

PROCEDURE,DELIMITER,CALL

以下引用自百度:存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程。

有点好玩又有点繁琐的。。。

mysql> DELIMITER &&
mysql> CREATE PROCEDURE showAll()
-> BEGIN
-> SELECT * FROM customers;
-> END &&
Query OK, 0 rows affected (0.04 sec) mysql> CALL showAll();
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI | 44444 | USA | John Smith | sales@villagetoys.com |
| 1000000002 | Kids Place | 333 South Lake Drive | Columbus | OH | 43333 | USA | Michelle Green | NULL |
| 1000000003 | Fun4All | 1 Sunny Place | Muncie | IN | 42222 | USA | Jim Jones | jjones@fun4all.com |
| 1000000004 | Fun4All | 829 Riverside Drive | Phoenix | AZ | 88888 | USA | Denise L. Stephens | dstephens@fun4all.com |
| 1000000005 | The Toy Store | 4545 53rd Street | Chicago | IL | 54545 | USA | Kim Howard | NULL |
+------------+---------------+----------------------+-----------+------------+----------+--------------+--------------------+-----------------------+
5 rows in set (0.00 sec) Query OK, 0 rows affected (0.08 sec) mysql> DELIMITER $
mysql> CREATE PROCEDURE getID(
-> IN id VARCHAR(32))
-> BEGIN
-> SELECT *
-> FROM customers
-> WHERE cust_id=id;
-> END $
Query OK, 0 rows affected (0.00 sec) mysql> CALL getID('')$
+------------+--------------+----------------+-----------+------------+----------+--------------+--------------+-----------------------+
| cust_id | cust_name | cust_address | cust_city | cust_state | cust_zip | cust_country | cust_contact | cust_email |
+------------+--------------+----------------+-----------+------------+----------+--------------+--------------+-----------------------+
| 1000000001 | Village Toys | 200 Maple Lane | Detroit | MI | 44444 | USA | John Smith | sales@villagetoys.com |
+------------+--------------+----------------+-----------+------------+----------+--------------+--------------+-----------------------+
1 row in set (0.00 sec) Query OK, 0 rows affected (0.03 sec) mysql> DELIMITER ;

注意输入参数那里的变化。

20、事务管理

TRANSACTION,COMMIT,ROLLBACK,SAVEPOINT

用来维护数据库的完整性,保证成批的SQL操作要么完全执行,要么完全不执行;

保留点越多越好,更好的是形成习惯~

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec) mysql> SAVEPOINT begin;
Query OK, 0 rows affected (0.00 sec) mysql> INSERT INTO customers(cust_name,cust_country)
-> VALUES('Andy Liang','China');
Query OK, 1 row affected, 1 warning (0.00 sec) mysql> ROLLBACK TO begin;
Query OK, 0 rows affected (0.04 sec) mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)

MySQL是一步步来的,就是慢慢监督的一样。

21、使用游标

CURSOR

略。。。。(老子做web不想用游标,你来打我啊

22、约束,索引,触发器

约束:

PRIMARY KEY,UNIQUE,REFERENCES,ALTER,CONSTRAINT,CHECK

主键:值互异,NOT NULL,不修改/更新,不重用,每个表仅能有一个主键,可以用来定义外键(举例:id

唯一:值互异,可以有NULL,可修改/更新,可重用,可有多个唯一键,不能用来定义外键

外键:两个表,确定子表某一列的合法性

检查约束:CHECK,灵活约束

mysql> CREATE TABLE test(
-> id SMALLINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
-> socialid VARCHAR(64) UNIQUE,
-> cust_id VARCHAR(16) NOT NULL REFERENCES customers(cust_id),
-> quantity SMALLINT CHECK (quantity>0),
-> gender VARCHAR(8) CHECK (gender LIKE '[MF]')
-> );
Query OK, 0 rows affected (0.20 sec)

另外,用ALTER语句再对表进行更改操作

ALTER TABLE test
ADD CONSTRAINT PRIMARY KEY (cust_id); ALTER TABLE test
ADD CONSTRAINT UNIQUE KEY (id); ALTER TABLE test
ADD CONSTRAINT
FOREIGN KEY (cust_id) REFERENCES customers (cust_id); ALTER TABLE test
ADD CONSTRAINT CHECK (quantity<1000);

索引:

INDEX

搜索某些列的效率提高;

请动态的创建索引——数据库在不断更新,索引效率在变化;索引效率提升的代价是插入等操作性能的牺牲;大量空间的使用;

mysql> CREATE INDEX prod_name_id
-> ON PRODUCTS (prod_name);
Query OK, 0 rows affected (0.31 sec)
Records: 0 Duplicates: 0 Warnings: 0

触发器:

TRIGGER

在特定的数据库活动发生时自动执行;

一般用途:保证数据一致(全大写等),联动(log的记录)等;

约束要比触发器快,尽量用约束;

完!!(对,这里又灭有代码了

SQL必知必会 14-22(完)的更多相关文章

  1. 你必知必会的SQL面试题

    写在前面的话 本文参考原博<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 1>和<走向面试之数据库基础:一.你必知必会的SQL语句练习-Part 2>进行练习 ...

  2. SQL 必知必会

    本文介绍基本的 SQL 语句,包括查询.过滤.排序.分组.联结.视图.插入数据.创建操纵表等.入门系列,不足颇多,望诸君指点. 注意本文某些例子只能在特定的DBMS中实现(有的已标明,有的未标明),不 ...

  3. 读书笔记--SQL必知必会--建立练习环境

    书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL in 10 Minutes - Fourth Edition> MyS ...

  4. 0005 《SQL必知必会》笔记01-SELECT语句

    1.SELECT基本语句: SELECT 字段名1,···,字段名n FROM 表名 2.检索所有字段,用"*"替换字段名,这会导致效率低下 SELECT * FROM 表名; 3 ...

  5. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...

  6. MySQL必知必会-官方数据库表及SQL脚本导入生成

    最近在复习SQL语句,看的是MySQL必知必会这本书,但是发现附录中只有表设计,没有表的具体数据.所以在学习相应的语句中体验不是很好,去网上查了数据库的内容,自己慢慢导入到了数据库中.把表放出来作为参 ...

  7. 《SQL必知必会》学习笔记整理

    简介 本笔记目前已包含 <SQL必知必会>中的所有章节. 我在整理笔记时所考虑的是:在笔记记完后,当我需要查找某个知识点时,不需要到书中去找,只需查看笔记即可找到相关知识点.因此在整理笔记 ...

  8. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  9. 读书笔记--SQL必知必会12--联结表

    12.1 联结 联结(join),利用SQL的SELECT在数据查询的执行中联结表. 12.1.1 关系表 关系数据库中,关系表的设计是把信息分解成多个表,一类数据一个表,各表通过某些共同的值互相关联 ...

  10. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

随机推荐

  1. 计数排序(counting-sort)——算法导论(9)

    1. 比较排序算法的下界 (1) 比较排序     到目前为止,我们已经介绍了几种能在O(nlgn)时间内排序n个数的算法:归并排序和堆排序达到了最坏情况下的上界:快速排序在平均情况下达到该上界.   ...

  2. 表值函数与JS中split()的联系

    在公司用云平台做开发就是麻烦 ,做了很多功能或者有些收获,都没办法写博客,结果回家了自己要把大脑里面记住的写出来. split()这个函数我们并不陌生,但是当前台有许多字段然后随意勾选后的这些参数传递 ...

  3. c 线程(平行世界)

    我们已经知道如何使用进程来做一些事情了,然而 它并不是在什么地方都是最适合的. 我们看看进程的缺点是什么: 线程隆重登场 1. 如何创建线程 创建线程可以使用多种线程库,在此我们使用最流行的一种:PO ...

  4. 用C#实现MD5的加密(转载)

    方法一 首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer scien ...

  5. 在DevExpress中使用CameraControl控件进行摄像头图像采集

    在我们以前的项目了,做摄像头的图片采集,我们一般还是需要做一个封装处理的,在较新版本的DevExpress控件里面,增加了一个CameraControl控件,可以直接调用摄像头显示的,因此也可以做头像 ...

  6. electron之Windows下使用 html js css 开发桌面应用程序

    1.atom/electron github: https://github.com/atom/electron 中文文档: https://github.com/atom/electron/tree ...

  7. .Net Html如何上传图片到一般应用程序

    用html实现图片上传 后台采用.net其中在这里要借用一个js插件 在这里我会写一个图片上传的一个小Demo,有不全的地方多多包容,和提议, 我把已经写好的demo已经上传到百度云 在这里可以下载 ...

  8. C#开发微信门户及应用(38)--微信摇一摇红包功能

    摇一摇周边红包接口是为线下商户提供的发红包功能.用户可以在商家门店等线下场所通过摇一摇周边领取商家发放的红包.我曾经在<C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实 ...

  9. [翻译+山寨]Hangfire Highlighter Tutorial

    前言 Hangfire是一个开源且商业免费使用的工具函数库.可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows ...

  10. redis 安装

    安装wget http://download.redis.io/releases/redis-3.2.3.tar.gztar -xzvf redis-3.2.3.tar.gzcd redis-3.2. ...