一、資料庫的操作及安裝 1、安裝 MySQL Community Server 5.7.16 版本 2、初始化 mysqld --inisialize-insecure 3、啟動 mysqld 4、啟動MySQL客戶端並連接MySQL服務 mysqld --initialize-insecure命令 ...
一、資料庫的操作及安裝
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.限制結果的顯示條數