一、数据库
关系型数据库(RDBMS):
1.数据以表格的形式出现
2.每行为各种记录名称3.每列为记录名称所对应的数据域4.许多的行和列组成一张表单5.若干的表单组成database1.MySQL基本管理命令
第一次设置密码: mysqladmin -u root password "new_password";
登录:mysql -u root -p 密码
启动:/etc/init
.d
/mysqld
start 或/路径/bin
/mysqld_safe
&
添加用户:
mysql>
INSERT
INTO
user
(host,
user
,
password
,
select_priv, insert_priv, update_priv)
VALUES
(
'localhost'
,
'guest'
,
PASSWORD
(
'guest123'
),
'Y'
,
'Y'
,
'Y'
);
2.数据库类型
数值类型:
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数值 |
DOUBLE | 8 字节 | (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期和时间类型
类型 | 大小(字节) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
字符串类型:
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
3.常用命令
>show crteate table student; 查看建表语句
>
create table student(
stu_id INT NOT NULL AUTO_INCREMENT, name CHAR(32) NOT NULL, age INT NOT NULL, register_date DATE, PRIMARY KEY ( stu_id )); 新建表> insert into student (name,age,register_date) values("刘",21,"2016-08-28"); 插入数据
> select * from student; 查询数据
>select name='刘' from student;
>select * from student where name like 'wang%';
>select * from student where age>30;
>update student set name='张',age=81 where stu_id=2; 把stu_id=2的name,age更新
>delete from student where name='刘';
>select * from student where binary name="JACK"; 区分大小写
>select * from student order by age;按照age从小到大排序
>select AVG(age) from student; 计算平均age
> select register_date,COUNT(register_date) from student;
>alter table student add score int not null; 增加一列score
>alter table student drop score;删除一列
>alter table student change stu_id id int(8); 改字段的名字及数据类型
>alter table student modify name char(16); ; 改字段的数据类型
>select * from A inner join B on A.a=B.b; 查询A和B两个表中,a和b列数值相等的数据
> select * from A right join B on A.a=B.b,结果:
+------+---+
| a | b |+------+---+| 3 | 3 || 4 | 4 || NULL | 5 || NULL | 6 |+------+---+4 rows in set (0.00 sec)> select * from A left join B on A.a = B.b UNION select * from A right join B on A.a = B.b;
+------+------+| a | b |+------+------+| 3 | 3 || 4 | 4 || 1 | NULL || 2 | NULL || NULL | 5 || NULL | 6 |+------+------+6 rows in set (0.00 sec)>create index id on student;创建索引
>DROP INDEX [indexName] ON mytable; 删除索引
>show index from student;
4.事务
事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)
mysql> begin ; #开始一个事务 mysql> insert into a (a) values (555); mysql> rollback ; 回滚 , 这样数据是不会写入的 |
当然如果上面的数据没问题,就输入commit提交命令就行;
5.python连接MySQL
5.1下载安装
python pip.exe install pymysql
5.2执行SQL
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Liumj 4 import pymysql 5 6 # 创建连接 7 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='liumengjie') 8 # 创建游标 9 cursor = conn.cursor()10 # 执行SQL,并返回收影响行数11 #effect_row = cursor.execute("update hosts set host = '1.1.1.2'")12 effect_row = cursor.execute("select name,age from liumengjie.student")13 # 执行SQL,并返回受影响行数14 # effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))15 # 执行SQL,并返回受影响行数16 # effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])17 # 提交,不然无法保存新建或者修改的数据18 conn.commit()19 # 关闭游标20 cursor.close()21 # 关闭连接22 conn.close()
5.3获取数据
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:Liumj 4 import pymysql 5 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='liumengjie') 6 cursor = conn.cursor() 7 cursor.execute("select * from liumengjie.student") 8 row_1 = cursor.fetchone() # 获取第一行数据 9 # row_2 = cursor.fetchmany(3) # 获取前n行数据10 # row_3 = cursor.fetchall() # 获取所有数据11 conn.commit()12 cursor.close()13 conn.close()
二、redis
缓存数据库:NoSQL,意为不仅仅是SQL,四大分类:
键值(key-value)存储数据库
列存储数据库
文档型数据库
图形数据库
1.redis介绍:
redis是业界主流的key-value nosql 数据库之一。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list()、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis优点
-
异常快速 : Redis是非常快的,每秒可以执行大约110000设置操作,81000个/每秒的读取操作。
-
支持丰富的数据类型 : Redis支持最大多数开发人员已经知道如列表,集合,可排序集合,哈希等数据类型。
这使得在应用中很容易解决的各种问题,因为我们知道哪些问题处理使用哪种数据类型更好解决。 -
操作都是原子的 : 所有 Redis 的操作都是原子,从而确保当两个客户同时访问 Redis 服务器得到的是更新后的值(最新值)。
- MultiUtility工具:Redis是一个多功能实用工具,可以在很多如:缓存,消息传递队列中使用(Redis原生支持发布/订阅),在应用程序中,如:Web应用程序会话,网站页面点击数等任何短暂的数据;
2.redis基本操作
set(name,value,ex=None,px=None,nx=False,xx=false)
在Redis中设置值,默认,不存在则创建,存在则修改
参数:
ex,过期时间(秒)
px,过期时间(毫秒)
nx,如果设置为True,则只有name不存在时,当前set操作才执行
xx,如果设置为True,则只有name存在时,岗前set操作才执行
setnx(name,value) 只有name不存在时,执行添加操作。
psetex(name,time_ms,value)设置值,time_ms设置过期时间
mset(*args,**kwargs)批量设置
get(name) 获取值
mget(keys,*args) 批量获取
getbit(name,offset)获取name对应的值得二进制表示中的某位的值
bitcount(key, start=None, end=None) 获取name对应的值的二进制表示中 1 的个数