Python之MYsql、数据库

2018-02-13 by 孟庆健

一、数据库的操作及安装

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 启动mysqldtasklist |findstr mysqld 查看是否mysql启动 mysql -uroot -p 链接quit 退出tskill mysql 干掉mysqlmysqld --install 在winds 中安装mysqldmysqladmin -uroot password 123 设置密码 mysqld --skip-grant-tables 跳过受限直接启动mysqldupdate 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; #当数据量大的时候下,删除速度快 整体删除自增idcreate 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~~4949672952、字符(宽度指的是字符个数 与存储有关): char :定长(简单粗暴,不够则凑够固定长度存放起来,浪费空间,存取速度快) varchar: 变长(精准,计算除待存放的数据长度,节省空间,存取速度慢)3、日期#注册时间 datatime 2017-09-06 10:39:46#出生年月日 ,开学时间 data:2017-09-06#聊天记录,上课时间 time:10:39:46#出生年 year:20174、枚举与集合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; #当数据量大的时候下,删除速度快 整体删除自增idcreate 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.找到表:from2.拿着where指定的约束条件,去文件/表中取出一条条记录3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组4.按照select后的字段得到一张新的虚拟表,如果有聚合函数,则将组内数据进行聚合5.将4的结果过滤:having,如果有聚合函数也是先执行聚合再having过滤6.查出结果:select7.去重8.将结果按条件排序:order by9.限制结果的显示条数

最新更新:

第七城市

栏目导航(关闭)