zoukankan      html  css  js  c++  java
  • 数据库知识总结

    1. SQL语句

    1.1 数据库

    复制代码
    # 增
    create database review;
    
    # 查
    show databases;
    show create database review; # 查看数据库的创建,默认为  CHARACTER SET latin1 编码
    
    # 改
    # 没有专门的改操作,删了重建
    alter database review charset utf8; # 将数据库的字符编码改为utf8编码
    
    # 删
    drop database review;
    复制代码

    1.2 数据表

    复制代码
    use review;
    # 增(创建)
    create table test (
        id int auto_increment primary key,
        name varchar(32) not null default ''
    )engine=Innodb charset=utf8;
    
    create table test_join (
        id int auto_increment primary key,
        course varchar(32) not null default '',
        name_join int not null default 0,
        constraint fk_name_id foreign key (name_join) references test(id)
    )engine=Innodb charset=utf8;
    
    # 删
    drop table test;
    alter table test drop name;  # 删除列/字段名
    
    
    # 改
    alter table test  rename new_test;   # 更改表名
    alter table test change/modify name title varchar(32) not null default '';   # 修改字段名
    alter table test add title varchar(32) not null default '';    # 增加新列
    
    
    # 查
    show tables;
    复制代码

    1.3 数据行

    复制代码
    # 增
    insert into test (name) values ('wangyong'), ('liguo'), ('jiyuzhi');
    
    # 删
    delete from test where id=3;     
    delete from test;                # 删除之后,增加数据id会直接增加
    truncate test;                   # 删除之后,增加数据id会清空
    
    # 改
    update test set  name='title';   # 将name属性的值全部改为title
    update test set name='title' where id=2;   # 将id=2d的name属性的值改为title
    # 查
    select * from test;
    select name from test;
    复制代码

    1.4 数据行的高级查询

    复制代码
    # where
    select * from test where id>1 and id<=3;
    
    # between and  闭区间
    select * from test where id between 1 and 3;
    
    # in / not in 
    select * from test where id in (1,2,3);
    
    # 通配符
    select * from test where name like '%wang%';
    select * from test where name like '%wang_';
    
    # limit    select * from 表名 limit 索引偏移量, 取出多少条数据;                    
    select * from test where id limit 2,3;   # 从第2号位(第3个数)开始查询3个
    
    # group by  分组
    # select age, 聚合函数(count(num)/sum(num)/max(num)/min(num)/avg(num)) from 表名 group by 列名;
    select name, count(name) from test group by name; 
    select name, count(name) from test group by name having name='wangyong';   # 二次筛选
    
    # order by  排序
    select * from test order by name desc;   # desc:降序 
    select * from test order by name asc;    # asc:升序
    
    # 连表(left join、 right join、 inner join)
    # left join 左边的表全部显示, 右边没有用到不显示
    select test.name, test_join.course from test left join test_join on test.id=test_join.name_join;
    复制代码

    2. pymysql操作

    2.1 SQL注入

    原因: 相信用户输入的所有的数据

    解决方法:

    1. 自己手动去判断转义用户输入的数据

    2. 不要拼接SQL语句, 使用PyMySQL中的execute方法, 防止SQL的注入

    复制代码
    import pymysql
    gender = input('gender>>>:')
    sname = input("sname>>>:")
    
    # 链接服务器
    conn = pymysql.connect(host = 'localhost', user = 'root', password = '', database = 'practiceday43', charset = 'utf8' )
    cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)
    
    # 写SQL语句,不要去拼接SQL语句
    sql = "select * from student where gender = %s and sname = %s"
    # 传值的时候,以元组形式给SQL传参
    cursor.execute(sql,(gender, sname))
    
    res = cursor.fetchone()
    print(res)
    if res:
        print('获得值成功')
    else:
        print('获得值失败')                                                             
    cursor.close()
    conn.close()
    复制代码

    2.2 事务

    四大特性:

    原子性: 一组操作, 要么全部成功, 要么全部失败 一致性: 操作之前和操作之后, 总的金额是一致的 隔离性: 本次事物的操作对其他事务的操作是没有任何影响的 持久性: 当我们commit/rollback之后, 影响就已经生效了, 补偿性事务来解决

    使用

    开启: start transaction 一组SQL语句的操作 完成(commit/rollback)

    复制代码
    create table user(
    id int auto_increment primary key,
    name varchar(32) not null default '',
    money int not null default 1000
    )engine=innodb charset=utf8;
    
     insert into user (name,money) values ('wangyong',1000),('liguo',1000);
    
    # 正常操作
     start transaction;
    update user set money=1100 where name='wangyong';
    updata user set money=900 where name='liguo';
    # 出现异常
     rollback;
    
    # 最终结果, 数据未发生变化
    mysql> select * from user;
    +----+----------+-------+
    | id | name     | money |
    +----+----------+-------+
    |  1 | wangyong |  1000 |
    |  2 | liguo    |  1000 |
    +----+----------+-------+
    复制代码

    3. 索引

    3.1 作用:加快查询的速度

    3.2 分类与创建:

    主键索引:primary key

    复制代码
    # 第一种:
        create table test(
            id int auto_increment primary key,
            name varchar(32) not null default ''
        )engine=innodb charset=utf8;
    
    # 第二种:
        create table test(
            id int not null default 0,
            name varchar(32) not null default ''
        )engine=innodb charset=utf8;
        
        alter table test change id id int auto_increment primary key;
    复制代码

    唯一索引:unique

    复制代码
    # 第一种
        create table test(
            id int auto_increment primary key,
            name varchar(32) not null default '',
            unique ix_name (name)
        )engine=innodb charset=utf8;
    
    # 第二种  create unique index 索引名称 on 表名(name);
        create table test(
            id int auto_increment primary key,
            name varchar(32) not null default ''
        )engine=innodb charset=utf8;
        
        create unique index ix_name on test (name);
    
    # 创建联合唯一索引  create unique index 索引名称 on 表名 (name,age);
        create table test(
            id int auto_increment primary key,
            age int not null default 0, 
            name varchar(32) not null default ''
        )engine=innodb charset=utf8;
        
        create unique index ix_name_age on test (age, name);
    复制代码

    普通索引:index

    复制代码
    # 第一种
        create table test(
            id int auto_increment primary key,
            name varchar(32) not null default '',
            index ix_name (name)
        )engine=innodb charset=utf8;
    
    # 第二种
         create table test(
            id int auto_increment primary key,
            name varchar(32) not null default ''
        )engine=innodb charset=utf8;
        
        create index ix_name on test (name);
        
     # 联合索引 
        create table test(
            id int auto_increment primary key,
            age int not null default 0, 
            name varchar(32) not null default ''
        )engine=innodb charset=utf8;
        
        create index ix_name_age on test (age, name);
    复制代码

    3.3 查看是否使用索引:explain

    复制代码
    explain selext * from test;
    
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-------------
    | id | select_type | table | type  | possible_keys | key     | key_len | ref  | rows | Extra       
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-------------
    |  1 | SIMPLE      | test  | index | NULL          | ix_name | 98      | NULL |    1 | Using index 
    +----+-------------+-------+-------+---------------+---------+---------+------+------+-------------
    复制代码

    3.4 使用规则

    复制代码
    - 不建议使用 like 进行搜索
    - 组合索引最左前缀
    如果组合索引为:(name,email)
        where name and email       -- 使用索引
        where name                 -- 使用索引
        where email                -- 不使用索引
    复制代码

    3.5 删除索引

    复制代码
    # drop 索引名称 on 表名
    drop index ix_name_age on test;
    
    mysql> explain select * from test;
    +----+-------------+-------+------+---------------+------+---------+------+------+-------+
    | id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra |
    +----+-------------+-------+------+---------------+------+---------+------+------+-------+
    |  1 | SIMPLE      | test  | ALL  | NULL          | NULL | NULL    | NULL |    1 | NULL  |
    +----+-------------+-------+------+---------------+------+---------+------+------+-------+
    复制代码

    4 存储介绍

    复制代码
    Innodb(支持高并发)
        1.(默认版本包含5.5)
        2.支持事务
        3.不支持全文索引
        4.索引和数据都是在同一个文件中, .ibd 表的结构实在.frm文件中
    
    MyIsam(支持高并发不是特别理想)
        1.(默认版本5.5以下 5.3)
        2.不支持事务
        3.支持全文索引
        4..frm: 表结构
          .MYD: 表数据
          .MYI: 表索引
        
       
    全文索引:(中文很好)
        sphinx 
  • 相关阅读:
    Android自定义之仿360Root大师水纹效果
    Android之TextView的Span样式源码剖析
    Android之TextView的样式类Span的使用详解
    随着ScrollView的滑动,渐渐的执行动画View
    仿微信主界面导航栏图标字体颜色的变化
    android自定义之 5.0 风格progressBar
    Android性能优化之内存篇
    Android性能优化之运算篇
    How to install Zabbix5.0 LTS version with Yum on the CentOS 7.8 system?
    How to install Zabbix4.0 LTS version with Yum on the Oracle Linux 7.3 system?
  • 原文地址:https://www.cnblogs.com/liguodeboke/p/11129736.html
Copyright © 2011-2022 走看看