一、数据库的操作及安装
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.限制结果的显示条数
来源:oschina
链接:https://my.oschina.net/u/4353111/blog/4235749