zoukankan      html  css  js  c++  java
  • day23——删除数据、更改数据、索引

    一、删除数据

    数据如下:

    [root@localhost ~]# mysql -uroot -ppzk123 -e "use test; select * from t1;"
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    | 1 | Tom | 17 |
    | 2 | John | 25 |
    | 3 | Jeny | 25 |
    +----+------+-----+

    使用 Python 删除第二条记录:

     1 #!/usr/bin/env python
     2 import MySQLdb
     3 
     4 def connect_mysql():
     5     db_config = {
     6         'host': '127.0.0.1',
     7         'port': 3306,
     8         'user': 'root',
     9         'passwd': 'pzk123',
    10         'db': 'test'
    11     }
    12     c = MySQLdb.connect(**db_config)
    13     return c
    14 
    15 if __name__ == '__main__':
    16     c = connect_mysql()
    17     cus = c.cursor()
    18     sql = 'delete from t1 where id=2;'
    19     try:
    20         cus.execute(sql)
    21         c.commit()
    22     except Exception as e:
    23         c.rollback()
    24         raise e
    25     finally:
    26         c.close()

    结果如下:

    [root@localhost ~]# mysql -uroot -ppzk123 -e "use test; select * from t1;"
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    | 1 | Tom | 17 |
    | 3 | Jeny | 25 |
    +----+------+-----+

    二、更改数据

    数据如下:

    [root@localhost ~]# mysql -uroot -ppzk123 -e "use test; select * from t1;"
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    | 1 | Tom | 17 |
    | 2 | John | 25 |
    | 3 | Jeny | 25 |
    +----+------+-----+

    使用 Python 修改数据(把 John 的年龄修改为20):

     1 #!/usr/bin/env python
     2 import MySQLdb
     3 
     4 def connect_mysql():
     5     db_config = {
     6         'host': '127.0.0.1',
     7         'port': 3306,
     8         'user': 'root',
     9         'passwd': 'pzk123',
    10         'db': 'test'
    11     }
    12     c = MySQLdb.connect(**db_config)
    13     return c
    14 
    15 if __name__ == '__main__':
    16     c = connect_mysql()
    17     cus = c.cursor()
    18     sql = 'update t1 set age=20 where id=2;'
    19     try:
    20         cus.execute(sql)
    21         c.commit()
    22     except Exception as e:
    23         c.rollback()
    24         raise e
    25     finally:
    26         c.close()

    修改结果:

    [root@localhost ~]# mysql -uroot -ppzk123 -e "use test; select * from t1;"
    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    | 1 | Tom | 17 |
    | 2 | John | 20 |
    | 3 | Jeny | 25 |
    +----+------+-----+

    三、索引

    1、索引简介

    索引就像书的目录一样,也可以理解是一个标签,创建索引的目录是为了加快我们对数据的查询,举个例子,数据库中有两万条记录,现在要查询 id 为 10086 的记录,如果没有索引,必须遍历整个表,直到 id 等于 10086 这一行被找到为止,如果在 id 字段上创建索引,MySQL 不需要任何扫描,直接在索引里面找 10086 就可以得知这一行的位置,可见,创建索引可以提高数据库的查询速度

    2、索引的分类

    (1) 普通索引:允许在定义索引的列中插入重复值和空值
    (2) 唯一索引:索引列的值必须唯一,但允许有空值
    (3) 单列索引:即一个索引只包含单个列,一个表可以有多个单列索引
    (4) 组合索引:即在表的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用
    (5) 全文索引:在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值
    (6) 空间索引:是对空间数据类型的字段建立的索引,MySQL 有四中空间数据类型,分别是 GEOMETRY 、POINT 、LINESTRING 、POLYGON

    3、索引的设计原则

    (1) 索引不宜过多,否则不仅占用磁盘空间,而且会影响插入、删除、更新语句的性能
    (2) 避免对经常更新的表进行过多的索引,并且索引中的列尽可能少
    (3) 数据量小的表最好不要使用索引,因为查询花费的时间可能比遍历索引的时间还要短,索引不会产生太大效果
    (4) 在条件表达式中经常用到的不同值较多的列上建立索引,在不同值很少的列上不要建立索引
    (5) 当唯一性是某种数据本身的特征时,指定唯一索引以确保数据完整性,提高查询速度
    (6) 在频繁进行排序或分组的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引

    4、在创建表的同时创建索引

    1. 创建普通索引

    mysql> create table book
    -> (
    -> bookid int not null,
    -> bookname varchar(255) not null,
    -> authors varchar(255) not null,
    -> info varchar(255) null,
    -> comment varchar(255) null,
    -> index(bookid)
    -> );

    mysql> explain select * from book where bookid=1G //explain可以用来查看是否使用了索引
    *************************** 1. row ***************************
    id: 1
    select_type: SIMPLE //表示查询类型,SIMPLE表示只是简单的查询,不使用UNION或子查询
    table: book //对哪个表进行查询
    type: system //指明该表与其他表之间的关联关系
    possible_keys: bookid //查询时可能选用的索引
    key: NULL //查询时实际选用的索引
    key_len: NULL //索引长度,值越小表示查询越快
    ref: NULL //指明了关联关系中另一个表里的数据列的名字
    rows: 1 //查询时预计会从这个数据表里读出的数据行的个数
    Extra: //提供了与关联操作有关的信息

    2. 创建唯一索引

    mysql> create table book
    -> (
    -> bookid int not null,
    -> bookname varchar(255) not null,
    -> authors varchar(255) not null,
    -> info varchar(255) null,
    -> comment varchar(255) null,
    -> unique index unique_index(bookid) //索引列的值必须唯一,unique_index是索引名
    -> );

    3. 创建组合索引

    mysql> create table book
    -> (
    -> bookid int not null,
    -> bookname varchar(255) not null,
    -> authors varchar(255) not null,
    -> info varchar(255) null,
    -> comment varchar(255) null,
    -> index multi_index(bookid, bookname) //multi_index是索引名
    -> );

    4. 创建全文索引

    mysql> create table book
    -> (
    -> bookid int not null,
    -> bookname varchar(255) not null,
    -> authors varchar(255) not null,
    -> info varchar(255) null,
    -> comment varchar(255) null,
    -> fulltext index fulltext_index(authors) //fulltext_index是索引名
    -> );

    5、在已经存在的表上创建索引

    alter table book add index bookid_index(bookid);           //为 bookid 字段创建普通索引,其中 bookid_index 是索引名
    alter table book add index bookid_index(bookid,bookname);  //为 bookid 字段创建组合索引,其中 bookid_index 是索引名
    alter table book add unique index bookid_index(bookid);    //为 bookid 字段创建唯一索引,其中 bookid_index 是索引名
    alter table book add fulltext index info_index(info);      //为  info  字段创建全文索引,其中  info_index  是索引名

    6、删除索引

    alter table table_name drop index index_name;
  • 相关阅读:
    Java进行数据库导出导入 亲测可用
    Linux 进程监控和自动重启的简单实现
    Linux的运行级别详细说明
    设置让程序开机自启动的方法
    Java读书推荐
    谈谈Python、Java与AI
    这是一篇测试随笔。
    雷林鹏分享:Apache POI数据库
    雷林鹏分享:Apache POI打印区域
    雷林鹏分享:Apache POI超链接
  • 原文地址:https://www.cnblogs.com/yangjinbiao/p/7887607.html
Copyright © 2011-2022 走看看