zoukankan      html  css  js  c++  java
  • Python之MYsql、数据库

    一、数据库的操作及安装

    1、安装

     MySQL Community Server 5.7.16   ----   版本

    2、初始化

      mysqld --inisialize-insecure

    3、启动

      mysqld

    4、启动MySQL客户端并连接MySQL服务

     mysqld --initialize-insecure命令,其默认未给root账户设置密码

    5、查看是否MySQL启动

     tasklist |findstrmysql  

    6、数据库的基本命令

    mysqld --inisialize-insecure                                  初始化以没有密码的形式进入
    
    mysqld                                                        启动mysqld
    
    tasklist |findstr mysqld                                       查看是否mysql启动 
     
    mysql -uroot -p                                               链接
    
    quit                                                          退出
    
    tskill mysql                                                  干掉mysql
    
    mysqld --install                                              在winds 中安装mysqld
    
    mysqladmin -uroot password 123                                设置密码
                                              
    mysqld --skip-grant-tables                                    跳过受限直接启动mysqld
    
    update mysql.user set authentication_string=
    password(456) where user='root'and host='localhost';(5.7版本) 修改密码成功
    
    update mysql.user set password=password(5.6版本)
    
    flush privileges;                                             刷新权限
    
    select user();                                                查看当前用户
    
    create user 'mqj'@'localhost' identfied by '123';             创建本机账号
    
    create user 'egon'@'%' identfied by '123'                     创建远程账号
    
    create user 'wupeiqi'@'192.168.20.%' identified by '123'      创建远程网端账号
    
    mysql -h192.168.20.99 -ualex -p123                            远程链接
    
    
    数据库文件夹的的操作
    
    create database db1 charset utf8;                             增加db1文件夹
    
    show databases ;                                              查看所有数据库
    
    show create database db1;                                     查看db1文件夹
    
    drop database db1;                                            删除db1文件夹
    
    alter database db1 charset gbk;                               修改db1编码
    
    操作文件(表)
    切换到文件下:
    use db2                                                       切换文件夹
    
    c                                                            取消命令
    
    create table t1(id int,name char(10));                        创建表
    
    
    
    show  tables;                                                 查看当前文件下的所有表
    
    
    show create table t1;                                         查看表
    
    alter table t1 add age int;                                   增加字段
    
    alter table t1 modify name char(12);                          改表中的名字字符
     
    desc t1;                                                      查看表结构
    
    drop table t1;                                                 删除表
    
    操作文件的一行行内容(记录)
    
    insert into db1.t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');   增加记录
    
    select * from t1;                                                查看所有字段对应的值
    
    select  * from t1 where id>2;                                   查看id大于2的字段
    
    select name from t1;                                             查看单个字段
    
    update t1 set name='SB' where id=3;                              改里面的记录
    
    delete from t1 where id=3;                                       删除一条记录
    
    对于清空表的记录有两种方式,但是推荐使用后者
    delete from t1;
    truncate t1; #当数据量大的时候下,删除速度快                     整体删除
    
    
    自增id
    create table t2(id int primary key,name char(10)); 
    create table t3(id int not null unique,name char(10)); 
    create table t2(id int primary key auto_increment,name char(10)); 
    
    
    补充
    create table t6 select * from t5;                                  拷贝表
    
    
    create table t7 select * from t5 where 1=2;                        拷贝表结构
    
    alter tablet7 modify id int primary key auto_increment              改表结构
    
    delete t7 set name='' ;                                             删除记录 
    
    
    
    
    
    select database()                                             查看当前在那个文件夹下
    
    insert into t1(id) values(1)                                   插数据的方式
    
    select * from t1;                                              查看插入数据的内容
      
    select * from t1;
    
    
    数据类型
    1、数字(默认都是有符号,宽度指的是显示宽度,与存储无关)
    (1)tinyint [unsigned][zerofill]  (1个字节存)
            有符号:
                -128~~127
            无符号:
                0~~255
      (2) int [unsigned][zerofill]      (4个字节存)
             有符号:
                 -2147483648~~2147482647
             无符号: 
                 0~~4294967295     
     (3)bigint[unsigned][zerofill]   (8个字节存)
              有符号:
                 -9223372036854775808~~9223372036854775808
               无符号:
                 0~~494967295
    2、字符(宽度指的是字符个数 与存储有关):
         char   :定长(简单粗暴,不够则凑够固定长度存放起来,浪费空间,存取速度快)
         varchar: 变长(精准,计算除待存放的数据长度,节省空间,存取速度慢)
    3、日期
    #注册时间
         datatime 2017-09-06 10:39:46
    #出生年月日 ,开学时间
         data:2017-09-06
    #聊天记录,上课时间
         time:10:39:46
    #出生年
         year:2017
    4、枚举与集合
    enum枚举:规定一个范围,可有多个值,但是为该字段船只是,只能去规定范围中的一个
    set集合:规定一个范围,可有多个值,但是为该字段船只是,只能去规定范围中的一个或多个
    
    
    
    
    1:
    整型测试
    create table t1(id tinyint); 
    create table t2(id int); 
    create table t3(id bigint) ;
    
    #测试
    create table t4(salary float(5,2));
    
    insert into t4 values(3.735);
    insert into t4 values(3.735684);
    
    
    
    2、char 与 varcahr测试
    create table t6(name char(4));
    insert into t6 values('alex')
    insert into t6 values('欧德博爱');
    insert into t6 values('艾利克斯');
    
    
    
    
    
    create table t7(x char(5),y varchar(5));
    insert into t7 values('addd','dsds') #char_length:查看字符长度
     insert into t7 values('你好啊','好你妹')#char_length:查看字符长度
    
    了解
     insert into t7 values('你好啊','好你妹')#length:查看字节长度
     select char_length(x),char_length(y) from t7;
    
    
    
    注意两点:
    insert into t7 values('abc','abc');#length:查看字节长度
    select * from t7 where y='abc    '; #去掉末尾的空格然后去比较
    
    3、日期
    create table student(
    id int ,
    name char(5),
    born_date date,
    born_year year,
    reg_time datetime,
    class_time time
    );
    insert into student values(1,'alex',now(),now(),now(),now());
    insert into student values(1,'alex','2017-09-06','2017','2017-09-06 10:09:36','09:06:36');
     
    
    4、枚举与集合
    create table student1(
    id int  primary key auto_increment,
    name char(5),
    sex enum('male','female'),
    hobbies set('music','read','coding')
    );
    
    insert into student1(name,sex,hobbies) values('egon','male','music,read,coding');
    
    
    
    
    
    1 简单查询
    select * from employee;
    select name,salary from employee;
    
    2 where条件
    select name,salary from employee where salary > 10000;
    select name,salary from employee where salary > 10000 and salary < 20000;
    select name,salary from employee where salary between 10000 and 20000;
    select name,salary from employee where salary not between 10000 and 20000;
    
    select name,salary from employee where salary = 10000 or salary = 20000 or salary = 30000;
    select name,salary from employee where salary in (10000,20000,30000);
    
    
    select * from employee where salary = 10000 or age = 18 or sex='male';
    
    select * from employee where post_comment is Null;
    select * from employee where post_comment = Null;
    select * from employee where post_comment is not Null;
    
    select * from employee where name like '%n%';
    
    select * from employee where name like 'e__n';
    
    3 group by分组
    mysql> select depart_id,group_concat(name)  from employee group by depart_id;
    
    
    mysql> select depart_id,count(id)  from employee group by depart_id;
    
    
    mysql> select depart_id,group_concat(id)  from employee group by depart_id;
    
    
    mysql> select depart_id,count(id)  from employee group by depart_id;
    
    
    mysql> select depart_id,max(salary) from employee group by depart_id;
    
    
    mysql> select depart_id,min(salary) from employee group by depart_id;
    
    
    mysql> select depart_id,sum(salary) from employee group by depart_id;
    
    
    mysql> select depart_id,avg(salary) from employee group by depart_id;
    

    二、数据库文件件的操作

    create database db1 charset utf8; 增加db1文件夹
    
    show databases ; 查看所有数据库
    
    show create database db1; 查看db1文件夹
    
    drop database db1; 删除db1文件夹
    
    alter database db1 charset gbk; 修改db1编码

    2、操作文件

    切换到文件下:
    use db2 切换文件夹
    
    c 取消命令
    
    create table t1(id int,name char(10)); 创建表
    
    
    show tables; 查看当前文件下的所有表
    
    show create table t1; 查看表
    
    alter table t1 add age int; 增加字段
    
    alter table t1 modify name char(12); 改表中的名字字符
    
    desc t1; 查看表结构
    
    drop table t1; 删除表

    3、操作文件一行行内容

    insert into db1.t1 values(1,'egon1'),(2,'egon2'),(3,'egon3'); 增加记录
    
    select * from t1; 查看所有字段对应的值
    
    select * from t1 where id>2; 查看id大于2的字段
    
    select name from t1; 查看单个字段
    
    update t1 set name='SB' where id=3; 改里面的记录
    
    delete from t1 where id=3; 删除一条记录
    
    对于清空表的记录有两种方式,但是推荐使用后者
    delete from t1;
    truncate t1; #当数据量大的时候下,删除速度快 整体删除
    
    
    自增id
    create table t2(id int primary key,name char(10)); 
    create table t3(id int not null unique,name char(10)); 
    create table t2(id int primary key auto_increment,name char(10));

    4、一些不常用的操作

    create table t6 select * from t5; 拷贝表
    
    create table t7 select * from t5 where 1=2; 拷贝表结构
    
    alter tablet7 modify id int primary key auto_increment 改表结构
    
    delete t7 set name='' ; 删除记录

    三、数据库的设计

    连表的有性能消耗

    (1)、连表设计

    方式一:

                        class UserType(models.Model):
                            """
                            用户类型表,个数经常变动
                            """
                            title = models.CharField(max_length=32)
    
                        class UserInfo(models.Model):
                            """
                            用户表:讲师和班主任
                            """
                            username = models.CharField(max_length=32)
                            password = models.CharField(max_length=64)
                            email = models.CharField(max_length=32)
                            ut = models.ForeignKey(to="UserType")

    方式二:

                      - choices
                            # class UserInfo(models.Model):
                            #     """
                            #     用户表
                            #     """
                            #     username = models.CharField(max_length=32)
                            #     password = models.CharField(max_length=64)
                            #     email = models.CharField(max_length=32)
                            #
                            #     user_type_choices = (
                            #         (1, '班主任'),
                            #         (2, '讲师'),
                            #     )
                            #
                            #     user_type_id = models.IntegerField(choices=user_type_choices)

    四、事务

    事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,

    即可回滚到原来的状态,从而保证数据库数据完整性。

    五、存储

    存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,

    通过调用它的名字可以执行其内部的一堆sql

    使用存储过程的优点

       #1 程序与数据实现解耦

       #2 减少网络传输的数据量

    六、数据库优化查询方式

       1、优化查询的两种方式:                           

                               (1):prefetch_related

                               (2):select_related

    selsect_releated是主动连表,执行一次SQL

    prefetch_releated不连表执行3次SQL

    七、完整约束

        1、设置唯一约束

    如下:

    方法一:
    create table department1(
    id int,
    name varchar(20) unique,
    comment varchar(100)
    );
    
    
    方法二:
    create table department2(
    id int,
    name varchar(20),
    comment varchar(100),
    constraint uk_name unique(name)
    );

    八、数据库的备份

    1、备份与数据库的恢复

    drop database day43; 删除原先的文件夹
    show databases; 查看全部的文件夹
    
    create database day43; 创建一个文件夹
    
    use day43; 切换到day43这个文件夹下
    source E:\day43.sql; 恢复数据

    1、登录MySQL恢复:
    drop database day51;
    create database day51;
    source D:\day51.sql;

    2、不登录MySQL直接在外面恢复;
        mysql -uroot day51 < D:\day51.sql

    (2)、恢复到指定的库中:
    create database bak; 新建一个文件夹
    use dak; 切换到dak这个文件夹下
    mysql -uroot bak < D:\day51.sql; 恢复数据

     九、关键字的优先级

    from

    where

    group by

    having

    select

    distinct

    order by

    limit

    1.找到表:from
    
    2.拿着where指定的约束条件,去文件/表中取出一条条记录
    
    3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
    
    4.按照select后的字段得到一张新的虚拟表,如果有聚合函数,则将组内数据进行聚合
    
    5.将4的结果过滤:having,如果有聚合函数也是先执行聚合再having过滤
    
    6.查出结果:select
    
    7.去重
    
    8.将结果按条件排序:order by
    
    9.限制结果的显示条数


  • 相关阅读:
    牛客练习赛64 D-宝石装箱(容斥定律,背包)
    CF-GYM-[2019 USP Try-outs] 部分题解
    [Codeforces Round #642 (Div. 3)] ABCDEF题解
    [NCD 2019] G. Ali and the Breakfast (解析几何)
    [AtCoder Beginner Contest 165] E
    [Educational Codeforces Round 86 (Rated for Div. 2)] E. Placing Rooks (组合数学,容斥定律)
    [AtCoder Beginner Contest 164] -E
    牛客算法周周练3 C -小雨坐地铁(分层最短路)
    HDU 5726 GCD (RMQ + 二分)
    Codeforces Round #362 (Div. 2) C. Lorenzo Von Matterhorn (类似LCA)
  • 原文地址:https://www.cnblogs.com/mengqingjian/p/8446551.html
Copyright © 2011-2022 走看看