一数据库的操作及安装
1 安装
- MySQLCommunityServer
- 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=rootand 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);
2char 与 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
找到表: from
拿着 where 指定的约束条件, 去文件 / 表中取出一条条记录
将取出的一条条记录进行分组 group by, 如果没有 group by, 则整体作为一组
按照 select 后的字段得到一张新的虚拟表, 如果有聚合函数, 则将组内数据进行聚合
将 4 的结果过滤: having, 如果有聚合函数也是先执行聚合再 having 过滤
查出结果: select
去重
将结果按条件排序: order by
限制结果的显示条数
来源: http://www.bubuko.com/infodetail-2497481.html