Day40 - MySQL视图和索引 、 python操作MySQL 、Redis基础

关系型数据库如何保证数据的完整性

1.实体完整性

每一条记录都是独一无二的没有冗余数据 - 主键/唯一索引

2.参照完整性/引用完整性

外键

3.领域完整性

没有无效的数据 - 数据类型 / 非空约束 / 默认值约束 / 检查约束

创建索引

create index idx_emp_ename on tbemp(ename);

删除索引

alter table tbemp drop index idx_emp_ename;

注意:表的索引相当于一本书的目录,它可以加速查询
但是索引会让增删改变得更慢 因为增删改数据时索引也需要更新
所以索引要建在经常被用作查询筛选条件的列上

python操作MySQL

导入pymysql模块
连接数据库插入多条数据

import pymysql


def main():
    # 1.创建连接(主机、端口、用户名、口令、数据库名)
    con = pymysql.connect(host='localhost',
                          port=3306,
                          user='root',
                          password='123456',
                          database='HRS',
                          charset='utf8',
                          autocommit=True)
    try:
        # 2.获取游标
        with con.cursor() as cursor:
            # 3.游标对象的executemany方法可以一次执行多个SQL操作
            # 相当于是以批处理的方式执行SQL(比一个个执行单条SQL效率更高)
            result = cursor.executemany(
                'insert into tbdept values (%s,%s,%s)',
                ((50, '研发2部', '深圳'),
                 (60, '销售3部', '广州'),
                 (70, '运维2部', '上海'))
            )
            # 4.处理服务器返回的信息
            print(result)
    except pymysql.MySQLError as e:
        print(e)
        con.rollback()
    finally:
        # 5.关闭连接释放资源
        con.close()


if __name__ == '__main__':
    main()

python连接数据库查询记录

import pymysql


class Dept(object):

    def __init__(self, no, name, loc):
        self.no = no
        self.name = name
        self.loc = loc

    def __str__(self):
        return f'{self.no}\t{self.name}\t{self.loc}'


def main():
    con = pymysql.connect(
        host='localhost',
        port=3306,
        user='root',
        password='123456',
        database='hrs',
        charset='utf8',
        cursorclass=pymysql.cursors.DictCursor
    )
    try:
        with con.cursor() as cursor:
            cursor.execute('select dno no, dname name, dloc loc from tbdept')
            depts = cursor.fetchall()
            for dept_dict in depts:
                dept = Dept(**dept_dict)
                print(dept)
    except pymysql.MySQLError as e:
        print(e)
    finally:
        con.close()


if __name__ == '__main__':
    main()

Redis内存数据库 - KV数据库

Redis提供了两种数据持久化数据的方案:
RDB - 周期性将内存数据写入dump文件
AOF - Append Only File - 把执行过的命令保存起来

Redis - 缓存(热点数据) / 队列

通过配置文件启动Redis服务

redis-server redis.conf > redis.log &

配置信息:

端口号

port 6379

绑定主机ip

bind 1.2.3.4

AOF

appendonly yes

设置密码

requirepass 123456

简单命令:

插入键值对

set key value

通过key取到value

get key

设置数据存货存活时间

set key value ex 10

查看数据存活时间

ttl key

查看数据库数据大小

dbsize

查看所有数据的key

keys *

查看指定key

keys key

保存数据

save

后台保存数据

bgsave

删除记录

del key

清空所有数据

flushall

退出数据库(默认保存)

shutdown

退出时不保存

shutdown nosave

你可能感兴趣的:(Day40 - MySQL视图和索引 、 python操作MySQL 、Redis基础)