zoukankan      html  css  js  c++  java
  • pymysql的增删改查、索引

    1.pymysql增删改

        一定要有commit()

    import pymysql
    
    username = input("请输入用户名:")
    pwd = input("请输入密码:")
    
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        database="db2",
        user="root",
        password="",
        charset="utf8"
    )
    sql = "insert into userinfo(name,pwd) values(%s,%s)"
    cur = conn.cursor()
    
    res = cur.execute(sql,[username,pwd])
    
    print(res)
    conn.commit()    一定要加,否则数据库中不会保存,只会在缓存中保存。如果之前没有加这句,提交了一次,虽然没有提交上,但是id的自增确保留下来了
    cur.close()
    conn.close()
    View Code

    2.pymysql查询

        fetchone()

        fetchmany(size)

        fetchall()

    import pymysql
    
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        database="db2",
        user="root",
        password="",
        charset="utf8"
    )
    sql = "select * from userinfo"
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#会以字典的形式返回查询信息
    
    res = cur.execute(sql)
    print(res)
    
    # ret = cur.fetchone()
    # print(ret)
    # ret = cur.fetchone()
    # print(ret)
    # ret = cur.fetchone()
    # print(ret)
    # ret = cur.fetchone()
    # print(ret)
    # ret = cur.fetchone()
    # print(ret)
    # ret = cur.fetchone()#单次查询如果超出范围会返回none
    # print(ret)
    
    # ret = cur.fetchmany(6)#多条查询超过范围显示所有信息
    # print(ret)
    
    ret = cur.fetchall()
    print(ret)
    conn.commit()
    cur.close()
    conn.close()
    View Code
    import pymysql
    
    conn = pymysql.connect(
        host="localhost",
        port=3306,
        database="db2",
        user="root",
        password="",
        charset="utf8"
    )
    sql = "select * from userinfo"
    cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#会以字典的形式返回查询信息
    
    res = cur.execute(sql)
    print(res)
    
    ret = cur.fetchone()
    print(ret)
    #relative 相对于原来的位置,如果正数向下移动 反之亦然
    #absolute 相对于起始位置,正数向下移动
    cur.scroll(-1,mode="relative")
    ret = cur.fetchone()
    print(ret)
    
    conn.commit()
    cur.close()
    conn.close()
    View Code

    3.索引

      作用:约束+加速查询

        普通索引:create index ix_name on 表名(字段名); 

          作用:加速查询

        唯一索引:create unique index un_name on 表名(字段名);

          作用:约束+加速查询

        主键索引:设置主键

        覆盖索引:在索引文件中直接获取数据

          例如:select name from big_data where name = "zhang50000"; 对name字段设置了索引

        索引合并:把多个单列索引一起使用

          select * from big_data where name = "zhang13131" and id = 13131;

        联合索引:

          联合普通索引

          联合唯一索引

          联合主键索引

        最左前缀:

          如果使用组合索引,name email 组合索引之后,查询

          1.name和email    使用索引

          2.name      使用索引

          3.email      不使用索引

          对于同时搜索n个条件时,组合索引的性能好于多个单列索引

          组合索引的性能>索引合并的性能

          对于索引:

            1.创建索引:

                注意事项:

                    1.避免使用select *

                    2.count(1)或count(列)代替count(*)

                    3.创建表时尽量使用char代替varchar

                    4.表的字段顺序固定长度的字段优先

                    5.组合索引代替多个单列索引(经常使用多个条件查询)

                    6.尽量使用短索引(create index ix_title on tb(title(16)));特殊的数据类型text

                    7.使用连接(join)代替子查询

                    8.连表时注意条件类型需要一致

                    9.索引散列(重复少)不适于用索引,例如性别

            2.命中索引

            3.正确使用索引

              注意事项:

                like "%xx"

                select * from userinfo where name like "%al";

              使用函数:

                select * from userinfo where reverse(name) = "zhang333";

              or

                select * from userinfo where id = 1 or email = "zhang122@qq.com";

              类型不一致:

                select * from userinfo where name = 999;

              !=:

                select count(*) from userinfo where name != "zhang";

                特别的:如果是主键,则还是会走索引

              >:

                select * from userinfo where name > "zhang";

                特别的:如果是主键或索引是整数类型,则还是会走索引

                  select * from userinfo where id > 123;

                  select * from userinfo where num > 123;

              order by:

                select * from userinfo order by name desc;

                当根据索引排序时,选择的映射如果不是索引,则不走索引

                特别的:如果对主键排序则还是会走索引

                  select * from userinfo order by nid desc;

                组合索引最左前缀:

                  然后组合索引为:(name,email);

                  name and email   使用索引

                  name       使用索引

                  email      不使用索引

            对于创建索引,它是真实存在的,占用硬盘空间,尽量不要使用索引

            select * from big_data where id > 2000010 limit 10;

            select * from (select * from big_data where id > 2000020 limit 30) as A order by id desc limit 10;

  • 相关阅读:
    CSS的三种定位方式介绍(转载)
    CSS背景颜色透明
    去除网页滚动条的方法
    es6
    Android复习
    caculater
    字符流
    字节流
    File类
    泛型继承
  • 原文地址:https://www.cnblogs.com/qq849784670/p/9811238.html
Copyright © 2011-2022 走看看