一、数据库的操作及安装
1、安装
MySQL
Commu
nity
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.限制结果的显示条数