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.限制结果的显示条数

 

 

 



 

posted @ 2018-02-13 15:38  孟庆健  阅读(336)  评论(0编辑  收藏  举报