Linux下Mysql和Redis的安裝和使用

MySQL

1.Mysql簡介:

數(shù)據(jù)庫是數(shù)據(jù)持久化的一種工具绵咱, 如果想要做到數(shù)據(jù)持久化必須將數(shù)據(jù)通過文件保存到硬盤中。主要有關(guān)系型數(shù)據(jù)庫非關(guān)系型數(shù)據(jù)庫兩種.Mysql就是一種應(yīng)用最為廣泛的關(guān)系型數(shù)據(jù)庫.

2.關(guān)系型數(shù)據(jù)庫的特點(diǎn)

  • 理論基礎(chǔ):集合論和關(guān)系代數(shù)

  • 具體表象:用二維表組織數(shù)據(jù)

    列 — 字段

    行 — 記錄

  • 編程語言:結(jié)構(gòu)化查詢語言(SQL)

3.Mysql安裝使用

3.1Mysql安裝

windows系統(tǒng)下載安裝: 百度搜索
Linux系統(tǒng)(服務(wù)器)安裝:

3.1 先檢查服務(wù)器是否已經(jīng)安裝mysql,執(zhí)行命令:yum list installed | grep mysql

3.2 若已安裝,可以卸載后再安裝:yum -y remove mysql

3.3清理之前的數(shù)據(jù)和日志文件(如果存在)
rm -rf /var/lib/mysql
rm -f /var/log/mysqld.log

3.3 下載Mysql的源:

在終端根目錄下執(zhí)行如下代碼下載Mysql源文件

wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm

3.4 將第三方源安裝到本地:

執(zhí)行命令:yum localinstall mysql57-community-release-el7-8.noarch.rpm

3.5 安裝mysql:

執(zhí)行命令:yum install mysql-community-server

3.6 登錄mysql并重置密碼

3.6.1 systemctl start mysqld 啟動(dòng)mysql

3.6.2 systemctl status mysqld 查看MySQL狀態(tài),是否啟動(dòng)成功

3.6.3 vim /etc/my.cnf 修改my.cnf文件,在[mysql]后添加一行語句: validate_password=OFF 關(guān)閉強(qiáng)密碼驗(yàn)證,保存退出

3.6.4 grep "password" /var/log/mysqld.log 查看mysql初始默認(rèn)隨機(jī)密碼(結(jié)果最后一行),復(fù)制

3.6.5 mysql -u root -p 登錄MySQL

3.6.6粘貼隨機(jī)密碼進(jìn)入mysql

3.6.7 ALTER USER 'root'@'localhost' IDENTIFIED BY "新密碼"; 修改密碼

3.6.8 命令執(zhí)行成功后:輸入exit 退出mysql

3.6.9 systemctl stop mysqld 關(guān)閉mysql

3.6.10 systemctl start mysqld 啟動(dòng)mysql

3.6.11 mysql -u root -p 登錄MySQL

3.6.12 輸入新密碼登錄

成功后即可以本地和數(shù)據(jù)庫連接,然后設(shè)置遠(yuǎn)程訪問數(shù)據(jù)庫.

3.6.1.1 登錄進(jìn)入數(shù)據(jù)庫

3.6.1.2執(zhí)行:“GRANT ALL PRIVILEGES ON . TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;” 創(chuàng)建一個(gè)允許遠(yuǎn)程訪問的用戶腻窒,用戶名是root,密碼是123456

3.6.1.3 輸入 flush privileges; 進(jìn)行更新權(quán)限

3.6.1.4 遠(yuǎn)程連接數(shù)據(jù)庫

3.2 mysql使用語法

1. 數(shù)據(jù)庫和表的操作

1.1 創(chuàng)建數(shù)據(jù)庫
1. create database 數(shù)據(jù)庫名;     -- 創(chuàng)建指定數(shù)據(jù)庫;如果該數(shù)據(jù)庫已經(jīng)存在會(huì)報(bào)錯(cuò)
2. create database if not exists 數(shù)據(jù)庫名;      -- 當(dāng)指定數(shù)據(jù)庫不存在的時(shí)候創(chuàng)建數(shù)據(jù)庫员淫;如果存在就不創(chuàng)建端盆,也不會(huì)報(bào)錯(cuò)
3. create database if not EXISTS 數(shù)據(jù)庫名 default charset utf8;  -- 創(chuàng)建數(shù)據(jù)庫的時(shí)候設(shè)置字符集編碼方式為utf8,讓數(shù)據(jù)庫支持中文數(shù)據(jù)的存儲(chǔ)

-- 注意: 可以在通過 character-set-server=utf8 來設(shè)置MySQL服務(wù)啟動(dòng)時(shí)默認(rèn)使用的字符集

-- 創(chuàng)建school數(shù)據(jù)庫示例:
CREATE DATABASE IF NOT EXISTS school DEFAULT charset utf8;
1.2 刪除數(shù)據(jù)庫
1. drop database 數(shù)據(jù)庫名;     -- 刪除指定數(shù)據(jù)庫怀骤;如果該數(shù)據(jù)庫不存在會(huì)報(bào)錯(cuò)
2. DROP DATABASE if EXISTS 數(shù)據(jù)庫名;    -- 當(dāng)指定數(shù)據(jù)庫存在的時(shí)候刪除數(shù)據(jù)庫;如果數(shù)據(jù)庫不存在不會(huì)報(bào)錯(cuò)

-- 刪除school數(shù)據(jù)庫示例:
DROP DATABASE IF EXISTS school;
1.3 使用/切換數(shù)據(jù)庫
1. use 數(shù)據(jù)庫名;         -- 切換到指定數(shù)據(jù)庫


-- 使用school數(shù)據(jù)庫示例:
USE school;
1.4 創(chuàng)建表
1. create table if not exists 表名(字段名1 類型1 約束1 comment 描述1, 字段2 類型2 約束2 comment 描述2,...);
-- 1)表名   - 程序員自己命名焕妙,但是一般以t或者tb作為前綴表示表名蒋伦; 而且要見名知義
-- 2)字段名  - 程序員自己命名,要求見名知義
-- 3)類型   - 類型必須是當(dāng)前數(shù)據(jù)庫支持的類型名焚鹊,mysql中常見的類型有: int(整數(shù)), float(小數(shù)),char/varchar/text(字符串)痕届,bit(布爾),date(日期)
-- 4)約束   - 創(chuàng)建約束:not null - 不為空, default  - 設(shè)置默認(rèn)值, unique - 值唯一, primary key - 主鍵約束 
-- 4.1)主鍵約束  - 主鍵的值可以確定列表中唯一一條記錄(通過一個(gè)主鍵值可以找到表中的唯一一條記錄),所以一般每張表都需要設(shè)置一個(gè)字段為主鍵,主鍵的值也必須是唯一的研叫;一般需要可以通過auto_increment約束讓整型主鍵自動(dòng)增加
-- 5)comment    -  添加字段說明

-- 創(chuàng)建學(xué)生表示例1:
CREATE TABLE IF NOT EXISTS t_student
(
stuid  int not null PRIMARY KEY auto_increment COMMENT '學(xué)號(hào)',
stu_name  varchar(20) not null COMMENT '姓名',
stuage  int COMMENT '年齡', 
stugender   bit default 1 COMMENT '性別',
stubirth   date COMMENT '生日'
);

-- 創(chuàng)建教師表示例2:
CREATE TABLE IF NOT EXISTS t_teacher
(
teaid int not null auto_increment COMMENT '編號(hào)',
teaname  varchar(20) not null COMMENT '姓名',
teaage int comment '年齡',
teatitle varchar(20) DEFAULT '助教' COMMENT '職稱',
PRIMARY KEY (teaid)    -- 主鍵設(shè)置可以在后面單獨(dú)設(shè)置
)
1.5 刪除表
1. DROP TABLE if EXISTS 表名;   -- 刪除指定表

-- 刪除教師表示例:
DROP TABLE if EXISTS t_teacher;
1.6 修改表
1.6.1 添加字段/列
1. alter TABLE 表名 add COLUMN 字段名 字段類型 約束 comment 描述;   -- 在指定表中添加指定字段

-- 給學(xué)生表添加地址字段示例:
alter TABLE t_student add COLUMN stuaddr varchar(200) DEFAULT '' COMMENT '家庭住址';
1.6.2 刪除字段/列
1. alter TABLE 表名 drop COLUMN 字段名;    -- 刪除指定表中的指定字段

-- 示例:
ALTER TABLE t_student DROP COLUMN stuage;

2. DML(表中數(shù)據(jù)的操作)

2.1 增(添加記錄)
1. insert into 表名 values(值1,值2,值3,...)  -- 按照表中字段的順序依次給每個(gè)字段賦值

-- 示例:
insert into t_student values(2,'李四',0,'2017-12-30','成都');


2. insert into 表名(字段1,字段2,字段3,...) values(值1,值2,值3,...);   -- 按指定順序給指定字段賦值

-- 示例:
insert into t_student(stuname, stugender, stubirth,stuaddr) values('夏明',1,'1992-3-12','大連');

-- 一次插入多條記錄  
insert into t_student(stuname, stubirth, stuaddr) values
('小花','1989-10-2','南京'),
('Tom',date(now()),'西安'),
('大黃','2000-1-20','沈陽');


-- 值的問題: sql中是數(shù)字對(duì)應(yīng)的值直接寫锤窑,字符串需要使用引號(hào)引起來,bit類型的值只有0或者1, 時(shí)間可以用內(nèi)容是滿足時(shí)間格式字符串也可以是通過時(shí)間函數(shù)獲取的值
-- 時(shí)間函數(shù): now() - 當(dāng)前時(shí)間  date(now()) - 當(dāng)前日期   year(now()) - 當(dāng)前年   month(now()) - 當(dāng)前月 ....
2.2 刪(刪除記錄)
1. delete from 表名;  -- 刪除指定表中所有記錄

-- 示例:
delete from t_student;



2. delete from 表名 where 條件語句;    -- 刪除滿足條件的記錄

-- 示例:
delete from t_student where stuid=9;     -- 刪除stuid等于9的記錄
delete from t_student where stuage=18 and stugender=0;    -- 刪除stuage等于18并且stugender等于0的記錄
delete from t_student where stuage in (16,17);    -- 刪除stuage是16和stuage是17的記錄
delete from t_student where stuname like 'stu%';   -- 刪除stuname的值是以stu開頭的記錄
delete from t_student where stuname like '%1';   -- 刪除stuname的值是以1結(jié)尾的記錄
delete from t_student where not age=18;      -- 刪除stuage不是18的記錄
delete from t_student where birth is NULL;   -- 刪除stubirth是NULL的記錄

-- 條件語句的寫法
-- 1)比較運(yùn)算符: =(等于), <>(不等于),>(大于), <(小于),>=(大于等于), <=(小于等于)
-- 2)邏輯運(yùn)算符: and(并且), or(或者), not(非)
-- 3)是否為空: is null(為空), is not null(不為空)
-- 4)范圍: between x and y(在x到y(tǒng)之間), not between x and y(不在x到y(tǒng)之間)
-- 5)字符串匹配: like 字符串(像, like后面的字符串可以使用%表示任意個(gè)任意字符, _表示任意一個(gè)字符)
-- 6)指定集合元素: in (值1,值2,...)(結(jié)果是集合中的元素)
2.3 改(修改數(shù)據(jù)/記錄)
1. update 表名 set 字段1=新值1, 字段2=新值2,...;      -- 將指定表中所有行的指定列/字段的值賦值為新值

-- 示例:
update t_student set stubirth='1992-3-12';     -- 將所有記錄中的stubirth字段都設(shè)置為1992-3-12




2. update 表名 set 字段1=新值1, 字段2=新值2,... where 條件語句;  -- 將表中滿足條件的行中指定字段的值賦值為新值 

-- 示例:
update t_student set stuage=20 where not stuname like 'stu%';  -- 將所有stuname不是stu開頭的記錄的stuage字段設(shè)置為20
2.4 查(獲取數(shù)據(jù))
2.4.1 直接查詢
1. select * from 表名;    -- 獲取指定表中所有行和所有的列(所有數(shù)據(jù))

-- 示例:
SELECT * FROM t_student;


-- 映射
2. select 字段名1,字段名2,... from 表名;   -- 獲取指定表中所有行指定的列

-- 示例:
SELECT stuname,stuid FROM t_student; 



3. select * from 表名 where 條件;    -- 獲取指定表中所有滿足條件的行所有列的數(shù)據(jù)

-- 示例:
SELECT * FROM t_student WHERE stuid>115; 
SELECT stuname,stuage FROM t_student WHERE stuid>115;
2.4.2 列重命名
1. select 字段1 as 新字段1, 字段2 as 新字段2,... from 表名; 
-- 注意: 這兒的as可以省略

-- 示例:
select stuname as '姓名', stuage as '年齡' from t_student;
2.4.3 對(duì)查詢結(jié)果重新賦值(一般針對(duì)布爾數(shù)據(jù))
1. select if(字段名,值1,值2) from 表名;    -- 查詢指定字段嚷炉,并且判斷字段對(duì)應(yīng)的值是0還是1渊啰,如果是1結(jié)果為值1,否則為值2
-- 注意: 這兒的if的用法是MySQL專有的
-- MySQL寫法: if(字段, 新值1, 新值2)
-- 通用寫法: case 字段 when 值 then 新值1 else 新值2 end

-- 示例:
select stuname, if(stugender, '男', '女') from t_student;   -- 查詢的時(shí)候如果stugender的結(jié)果不再是0或者1而是男或者女
select stuname, case stugender when 1 then '男' else '女' end from t_student; -- 查詢的時(shí)候如果stugender的結(jié)果不再是0或者1而是男或者女
2.4.4 對(duì)列進(jìn)行合并
1. select concat(字段1,字段2,...) from 表名;  

-- 示例:
select concat(stuname, stuage) from t_student;    -- 將多個(gè)字段的數(shù)據(jù)合并成一個(gè)數(shù)據(jù)返回
select concat(stuname, stuage) as 'nameage' from t_student;    -- 將多個(gè)字段的數(shù)據(jù)合并成一個(gè)數(shù)據(jù)返回并且為其數(shù)據(jù)重命名
select concat(stuname, ':', stuid) as 'name_id' from t_student;  

-- 注意: 數(shù)字和字符串?dāng)?shù)據(jù)可以合并申屹,bit類型的數(shù)據(jù)不可以合并
2.4.5 模糊查詢 - 查詢的時(shí)候時(shí)候通過like條件來指定查詢對(duì)象
-- 示例:
select * from t_student where stu_name like 'stu%' and gender=0;
2.4.6 排序(先按之前的任何語法進(jìn)行查詢?cè)谂判?
1. select * from 表名 order by 字段;      -- 對(duì)查詢結(jié)果按照指定字段的值進(jìn)行升序排序 
2. select * from 表名 order by 字段 asc;      -- 對(duì)查詢結(jié)果按照指定字段的值進(jìn)行升序排序 
3. select * from 表名 order by 字段 desc;      -- 對(duì)查詢結(jié)果按照指定字段的值進(jìn)行降序排序

-- 示例:
select * from t_student order by stuage;
select * from t_student order by stuage asc;
select * from t_student order by stuage desc;
select * from t_student order by age asc, gender asc;  -- 對(duì)查詢結(jié)果先按年齡進(jìn)行排序虽抄;年齡相同的再按性別進(jìn)行排序
2.4.7 去重
1. select distinct 字段 from 表名;   -- 獲取指定字段的值并且去重

-- 示例:
select distinct stuage from t_student;
2.4.8 限制和分頁
1. select * from 表名 limit 數(shù)量;  -- 值獲取指定數(shù)量的查詢結(jié)果

-- 示例:
select * from t_student limit 3;    -- 獲取查詢結(jié)果的前3條



2. select * from 表名 limit M offset N;   -- 跳過前N條數(shù)據(jù)獲取M條數(shù)據(jù)

-- 示例:
select * from t_student limit 3 offset 4;   -- 跳過前4條數(shù)據(jù)獲取3條數(shù)據(jù)



3. select * from 表名 limit M,N;   -- 跳過前M條數(shù)據(jù)獲取N條數(shù)據(jù)

-- 示例:
select * from t_student limit 3,4;    --  跳過前3條數(shù)據(jù)獲取4條數(shù)據(jù)

3. 外鍵與E.R圖

3.1 約束管理
3.1.1 添加約束

添加普通約束的方式有兩種,一種是創(chuàng)建表的時(shí)候直接給字段添加相應(yīng)的約束独柑,另一種是通過修改表的方式添加約束

1. 創(chuàng)建表的時(shí)候添加約束
建表的時(shí)候可以在字段類型后面加一個(gè)或者多個(gè)約束

2.通過添加約束索引的方式添加約束
alter table 表名 add constraint 索引名 約束(字段);
-- 說明: 索引名 - 自己隨便命名;  約束 - 當(dāng)前想要添加的約束(但是只支持唯一約束迈窟、主鍵約束和外鍵約束)

-- 示例:
alter table t_teacher add constraint uni_tel UNIQUE(teatel);                      
3.1.2 刪除約束
alter table 表名 drop index 約束索引;

-- 示例:
alter table t_teacher drop index uni_tel;
3.2 外鍵約束
1.什么是外鍵:表中的某個(gè)字段的值是根據(jù)其他表中主鍵的值來確定的。那么這個(gè)字段就是外鍵 
1.1 不同類型的外鍵添加方法:
    多對(duì)一的外鍵的添加: 將外鍵添加到多的一方對(duì)應(yīng)的表中 
    一對(duì)一的外鍵的添加: 將外鍵隨便添加到哪一方忌栅,同時(shí)添加值唯一約束
    多對(duì)多的外鍵的添加: 關(guān)系型數(shù)據(jù)庫中车酣,兩張表沒法實(shí)現(xiàn)多多的關(guān)系,需要一個(gè)中間表索绪。(中間表有兩個(gè)外鍵分別參照                      多多的兩個(gè)表的主鍵)
1.2 添加外鍵約束語法:
    alter table 表名1 add constraint 外鍵約束索引名 foreign key (字段1) references 表名2 (字段2);
    -- 將表1中的字段1設(shè)置為外鍵湖员,并且讓這個(gè)外鍵的值參照表2中的字段2
    
1.3 刪除外鍵約束
    alter table 表名 drop foreign key 外鍵索引名;
3.3 高級(jí)查詢
3.3.1 聚合:max()/min()/sum()/avg()/count()
SELECT score FROM tb_score;
SELECT max(score) as max_score FROM tb_score;   -- 獲取tb_score表中字段score的最大值
SELECT min(score) as min_score FROM tb_score;   -- 獲取tb_score表中字段score的最小值
SELECT sum(score) as sum_score FROM tb_score;   -- 獲取tb_score表中字段score的和
SELECT AVG(score) as avg_score FROM tb_score;   -- 獲取tb_score表中字段score的平均值
SELECT COUNT(score) as count_score FROM tb_score WHERE score>80;  -- 統(tǒng)計(jì)tb_score表中字段score大于80的個(gè)數(shù)
3.3.2 分組
SELECT 字段操作  FROM 表名 WHERE 條件 GROUP BY(字段2);
-- 將指定表中滿足條件的記錄按照字段2的進(jìn)行分組(值是一樣的在一個(gè)組里面), 然后再講每個(gè)分組作為整體按照指定字段進(jìn)行指定聚合操作
-- 注意:a.字段操作的位置除了分組字段不用聚合,其他字段都必須聚合   b.分組的時(shí)候where要放到分組前對(duì)需要分組的數(shù)據(jù)進(jìn)行篩選

select stuid, avg(score) from tb_score group by(stuid);

-- having: 分組的時(shí)候瑞驱,在分組后用having代替where來對(duì)分組后的數(shù)據(jù)進(jìn)行篩選
select stuid, max(score) from tb_score group by(stuid) having max(score)>90;
select stuid, avg(score) from tb_score group by(stuid) having avg(score)>80;
3.3.3 子查詢
-- 將一個(gè)查詢的結(jié)果作為另外一個(gè)查詢的條件或者查詢對(duì)象
-- 第一種子查詢: 將查詢結(jié)果作為另外一個(gè)查詢的條件

-- 獲取成績大于90分的學(xué)生姓名
select stuname from tb_student where stuid in 
(select stuid from tb_score where score>90);

-- 第二周子查詢:將一個(gè)查詢的結(jié)果作為查詢對(duì)象提供給另外一個(gè)查詢娘摔。但是第一個(gè)查詢結(jié)果需要重命名 
select score from (SELECT stuid,score from tb_score where score>80) as t2;
3.3.4 連接查詢 - 同時(shí)查詢多張表
1. 直接連接
select * from 表名1,表名2,表名3 連接條件 查詢條件;
-- 注意: 如果既有連接條件又有查詢條件,查詢條件必須放在連接條件的后面

-- 查詢所有學(xué)生的名字和學(xué)院名字
select stuname, collname from tb_student, tb_college where tb_student.colid=tb_college.collid;

2.內(nèi)連接
SELECT * FROM 表1 inner join 表2 on 表2的連接條件 inner join 表3 on 表3的連接條件 ...;
-- 注意: 中間表寫在最前面(存在關(guān)聯(lián)其他表外鍵的表)

3.外連接
-- 外連接分為左外連接唤反、右外連接和全連接凳寺, 但是在MySQL中支持左外連接和右外連接 
-- 左外連接:將左表中對(duì)應(yīng)字段的所有數(shù)據(jù)取出,然后再對(duì)應(yīng)的右表中字段的值彤侍,如果右表對(duì)應(yīng)的值不存在結(jié)果就為null 
-- 右外連接:將右表中對(duì)應(yīng)字段的所有數(shù)據(jù)取出肠缨,然后再對(duì)應(yīng)的左表中字段的值,如果左表對(duì)應(yīng)的值不存在結(jié)果就為null 
select * from 表1 left join 表2 on 連接條件;
select * from 表1 right join 表2 on 連接條件;

-- 獲取所有學(xué)生的成績
select stuname, score from tb_student left join tb_score on tb_student.stuid=tb_score.sid;

4. DCL(數(shù)據(jù)控制語言)

DCL主要提供grant和revoke來授權(quán)和召回權(quán)限

4.1 用戶管理
1. 添加用戶
create user 用戶名@登錄地址;    -- 創(chuàng)建數(shù)據(jù)用戶盏阶,登錄不需要密碼
-- 登錄地址 - 限制用戶能夠登錄MySQL的主機(jī)地址晒奕,可以賦值為: ip地址(指定地址)、localhost(數(shù)據(jù)庫本機(jī))名斟、%(任何位置)
create user 用戶名@登錄地址 identified by 密碼; -- 創(chuàng)建數(shù)據(jù)用戶脑慧,登錄需要輸入指定密碼密碼

-- 示例:
create user zhangsan@localhost;
create user lisi@localhost identified by '123456';

2. 刪除用戶
drop user 用戶名;
drop user zhangsan;
4.2 權(quán)限管理
1. 授權(quán)
grant 權(quán)限類型 on 數(shù)據(jù)庫.對(duì)象 from 用戶名;
-- 常見權(quán)限類型: delete(刪除權(quán)限), select(查詢權(quán)限),update(更新權(quán)限),insert(插入權(quán)限), all PRIVILEGES(所有權(quán)限)

-- 示例:
GRANT SELECT on school.tb_student TO 'zhangshan';
GRANT UPDATE on school.tb_student TO 'zhangshan';
GRANT all PRIVILEGES ON school.* TO 'zhangshan';   -- 添加所有權(quán)限


2.召回授權(quán)
revoke 權(quán)限類型 on 數(shù)據(jù)庫.對(duì)象 from 用戶名;

-- 示例:
REVOKE DELETE on school.* FROM 'zhangshan';
REVOKE all PRIVILEGES on school.* FROM 'zhangshan';
REVOKE all PRIVILEGES on school.* FROM 'zhangshan';
REVOKE SELECT on school.tb_student FROM 'zhangshan';
REVOKE UPDATE on school.tb_student FROM 'zhangshan';
4.3 事務(wù)

完成一個(gè)任務(wù)需要執(zhí)行多條sql,但是要求這多個(gè)操作中只要有一個(gè)操作失敗砰盐,這個(gè)任務(wù)就失敗闷袒,數(shù)據(jù)全部還原;所有的操作都成功楞卡,整個(gè)任務(wù)才成功的時(shí)候就使用事務(wù)

-- 開啟事務(wù)環(huán)境
begin;
需要執(zhí)行的多個(gè)操作對(duì)應(yīng)的sql語句

-- 提交事務(wù)(只有begin到commit之間的所有的sql都執(zhí)行成功霜运,才會(huì)執(zhí)行commit; 否則執(zhí)行rollback)
COMMIT;
-- 事務(wù)回滾(放棄beigin到commit之間執(zhí)行成功的所有sql語句的結(jié)果)
ROLLBACK;

5. 視圖

視圖是關(guān)系型數(shù)據(jù)庫中將一組查詢指令構(gòu)成的結(jié)果集組合成可查詢的數(shù)據(jù)表的對(duì)象。簡單的說蒋腮,視圖就是虛擬的表淘捡,但與數(shù)據(jù)表不同的是,數(shù)據(jù)表是一種實(shí)體結(jié)構(gòu)池摧,而視圖是一種虛擬結(jié)構(gòu)焦除,你也可以將視圖理解為保存在數(shù)據(jù)庫中被賦予名字的SQL語句。

使用視圖可以獲得以下好處:

  1. 可以將實(shí)體數(shù)據(jù)表隱藏起來作彤,讓外部程序無法得知實(shí)際的數(shù)據(jù)結(jié)構(gòu)膘魄,讓訪問者可以使用表的組成部分而不是整個(gè)表,降低數(shù)據(jù)庫被攻擊的風(fēng)險(xiǎn)竭讳。
  2. 在大多數(shù)的情況下視圖是只讀的(更新視圖的操作通常都有諸多的限制)创葡,外部程序無法直接透過視圖修改數(shù)據(jù)。
  3. 重用SQL語句绢慢,將高度復(fù)雜的查詢包裝在視圖表中灿渴,直接訪問該視圖即可取出需要的數(shù)據(jù);也可以將視圖視為數(shù)據(jù)表進(jìn)行連接查詢胰舆。
  4. 視圖可以返回與實(shí)體數(shù)據(jù)表不同格式的數(shù)據(jù)骚露,
1. 創(chuàng)建視圖
create view 視圖名 as sql查詢語句;

-- 示例:
create view vw_student
as SELECT * FROM tb_student;



2. 使用視圖  - 視圖在用的時(shí)候可以直接當(dāng)成表來使用

-- 示例:
select * FROM vw_student;

select stuname, collname from vw_student, tb_college where vw_student.colid=tb_college.collid;

6. 索引

索引相當(dāng)于書本的目錄,為表創(chuàng)建索引可以加速查詢(用空間換時(shí)間)缚窿。

索引雖然很好棘幸,但是不能濫用:

  • 索引會(huì)占用額外的空間

  • 索引會(huì)讓增刪改變得更慢

如果哪個(gè)列經(jīng)常被用于查詢的篩選條件那么就應(yīng)該在這個(gè)列上建立索引。

主鍵上有默認(rèn)索引(唯一索引)

1. 創(chuàng)建索引
-- 如果使用模糊查詢倦零,查詢條件不以%開頭误续,那么索引有效
-- 如果使用模糊查詢,查詢條件以%開頭扫茅,那么索引無效(盡量避免)
create index 索引名 on 表名 (字段);    -- 給指定表的指定字段添加索引
create unique index 索引名 on 表名 (字段);  -- 給指定表的指定字段添加唯一索引

-- 示例:
create index idx_stuname on tb_student(stuname);
create unique index idx_stuname on tb_student(stuname);


2. 刪除索引
alter table 表名 drop index 索引名;      -- 刪除指定索引女嘲,唯一索引也是這樣刪

-- 示例: 
alter table tb_student drop index idx_stuname;


注意: 可以通過explain來查看sql的執(zhí)行計(jì)劃

Redis

1.下載安裝Redis

1.1 wget http://download.redis.io/releases/redis-5.0.7.tar.gz 下載Redis安裝包.

1.2 gunzip redis-5.0.7.tar.gz 解壓安裝包

1.3 tar -xvf redis-5.0.7.tar 解歸檔壓縮包

1.4 cd redis-5.0.7 進(jìn)入Redis目錄下

1.5 make && make install 編譯,并安裝redis

1.6 啟動(dòng)Redis服務(wù): redis-server

1.7 進(jìn)入Redis客戶端: redis-cli

1.8 關(guān)閉服務(wù): 查看redis的進(jìn)程編號(hào):ps –ef | grep redis

? kill -9 redis的進(jìn)程編號(hào) 殺死redis進(jìn)程

1.9 命令 & ---> 將命令放到后臺(tái)運(yùn)行(如下載任務(wù))
? jobs ---> 查看后臺(tái)運(yùn)行的命令
? fg %編號(hào) ---> 將后臺(tái)命令放到前臺(tái)運(yùn)行
? Ctrl+z ---> 將前臺(tái)命令暫停并放到后臺(tái)
? bg %編號(hào) ---> 將暫停的命令在后臺(tái)運(yùn)行

1.10 殺死進(jìn)程

? ps aux 列出系統(tǒng)中正在運(yùn)行的進(jìn)程,找到想要?dú)⑺赖某绦虻木幪?hào)

? kill -9 '進(jìn)程編號(hào)' 殺死進(jìn)程

1.11 redis-server --requirepass 密碼 >> redis.log & 啟動(dòng)reids服務(wù)并設(shè)置密碼 放到后臺(tái)運(yùn)行

1.12 auth 密碼 驗(yàn)證身份進(jìn)行操作redis(在進(jìn)入redis客戶端后輸入)

2.Redis數(shù)據(jù)類型

Redis的核心數(shù)據(jù)類型:

  1. 字符串
    set key value ---> 添加鍵值對(duì)
    get key ---> 通過鍵查看值
    strlen key ---> 獲取字符串長度
    append key value2 ---> 給字符串追加內(nèi)容
    mset key1 value1 key2 value2 ---> 添加多組鍵值對(duì)
    mget key1 key2 ---> 查看多個(gè)鍵對(duì)應(yīng)的值
    incr key ---> 值加1
    incrby key value ---> 值加上value
    decr key ---> 值減1
    decrby key value ---> 值減去value
    getrange key start end ---> 獲取字符串指定范圍的子串
    setrange key offset value ---> 修改字符串指定位置的內(nèi)容
  2. 哈希(表) - hash
    hset key field value ---> 添加hash類型鍵值對(duì)
    hmset key field1 value1 field2 value2 ---> 添加多組hash類型鍵值對(duì)
    hget key field ---> 獲取hash類型字段對(duì)應(yīng)的值
    hmget key field1 field2 ---> 獲取hash類型多個(gè)字段對(duì)應(yīng)的值
    hgetall key ---> 獲取hash類型所有的字段和對(duì)應(yīng)的值
    hkeys key ---> 獲取hash類型所有的字段
    hvals key ---> 獲取hash類型所有字段的值
    hexists key field ---> 判斷hash類型某個(gè)字段是否存在
  3. 列表 - list
    lpush key value1 value2 value3 ---> 在左邊添加元素
    rpush key value1 value2 value3 ---> 在右邊添加元素
    lpop key ---> 從左邊移除一個(gè)元素
    rpop key ---> 從右邊移除一個(gè)元素
    lrange key start end ---> 查看列表指定范圍的元素
    llen key ---> 查看列表元素個(gè)數(shù)
    lindex key index ---> 查看列表指定位置元素
    lrem key count value ---> 刪除列表中指定元素
  4. 集合 - set
    sadd key value1 value2 value3 ---> 添加元素
    srem key value ---> 刪除元素
    spop ---> 獲取隨機(jī)元素
    scard key ---> 查看元素個(gè)數(shù)
    smembers key ---> 查看所有元素
    sismember key value ---> 查看集合中有沒有指定元素
    sinter key1 key2 ---> 交集
    sunion key1 key2 ---> 并集
    sdiff key1 key2 ---> 差集
  5. 有序集合 - zset
    zadd key score1 mem1 score2 mem2 ---> 添加元素
    zrem key mem ---> 刪除元素
    zrange key start end ---> 按score的升序查看元素
    zrevrange key start end ---> 按score的降序查看元素
    zscore key mem ---> 查看元素對(duì)應(yīng)的score
    zincrby key value mem ---> 修改元素的score值

免密操作:

1.打開終端,用戶主目錄下查看是否有一個(gè).ssh文件(ls .ssh)
2.輸入 ssh-keygen -t rsa -b 1024 (生成密鑰的強(qiáng)度) -c 郵箱地址 命令生成密鑰對(duì)(公鑰和私鑰)

3.生成的密鑰在新生成的.ssh文件夾中(.ssh文件在c盤的用戶目錄下诞帐,id_rsa.pub-公鑰 文件)欣尼,打開文件,將密鑰復(fù)制粘貼到需要的地方

創(chuàng)建新項(xiàng)目:

1.從版本控制克隆到本地
2.配置虛擬環(huán)境- interpretion(加入依賴庫)
3.生成依賴項(xiàng)清單(pip freeze >requirements.txt)(pip install -r requirements.txt)
4.生成版本控制忽略文件
5.push到git
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末停蕉,一起剝皮案震驚了整個(gè)濱河市愕鼓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慧起,老刑警劉巖菇晃,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蚓挤,居然都是意外死亡磺送,警方通過查閱死者的電腦和手機(jī)驻子,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來估灿,“玉大人崇呵,你說我怎么就攤上這事∠谠” “怎么了域慷?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長汗销。 經(jīng)常有香客問我犹褒,道長,這世上最難降的妖魔是什么弛针? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任叠骑,我火速辦了婚禮,結(jié)果婚禮上削茁,老公的妹妹穿的比我還像新娘座云。我一直安慰自己,他們只是感情好付材,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布朦拖。 她就那樣靜靜地躺著,像睡著了一般厌衔。 火紅的嫁衣襯著肌膚如雪璧帝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天富寿,我揣著相機(jī)與錄音睬隶,去河邊找鬼。 笑死页徐,一個(gè)胖子當(dāng)著我的面吹牛苏潜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播变勇,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恤左,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了搀绣?” 一聲冷哼從身側(cè)響起飞袋,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎链患,沒想到半個(gè)月后巧鸭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麻捻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年纲仍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呀袱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡郑叠,死狀恐怖夜赵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锻拘,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布击蹲,位于F島的核電站署拟,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏歌豺。R本人自食惡果不足惜推穷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望类咧。 院中可真熱鬧馒铃,春花似錦、人聲如沸痕惋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽值戳。三九已至议谷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間堕虹,已是汗流浹背卧晓。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赴捞,地道東北人逼裆。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像赦政,于是被迫代替她去往敵國和親胜宇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1 Redis介紹1.1 什么是NoSql為了解決高并發(fā)、高可擴(kuò)展然评、高可用仅财、大數(shù)據(jù)存儲(chǔ)問題而產(chǎn)生的數(shù)據(jù)庫解決方...
    克魯?shù)吕?/span>閱讀 5,291評(píng)論 0 36
  • redis是一個(gè)以key-value存儲(chǔ)的非關(guān)系型數(shù)據(jù)庫。有五種數(shù)據(jù)類型碗淌,string盏求、hashes抖锥、list、s...
    林ze宏閱讀 991評(píng)論 0 0
  • Redis是啥 Redis是一個(gè)開源的key-value存儲(chǔ)系統(tǒng)碎罚,由于擁有豐富的數(shù)據(jù)結(jié)構(gòu)磅废,又被其作者戲稱為數(shù)據(jù)結(jié)構(gòu)...
    一凡呀閱讀 1,173評(píng)論 0 5
  • NOSQL類型簡介鍵值對(duì):會(huì)使用到一個(gè)哈希表,表中有一個(gè)特定的鍵和一個(gè)指針指向特定的數(shù)據(jù)荆烈,如redis拯勉,volde...
    MicoCube閱讀 3,981評(píng)論 2 27
  • 父親節(jié)快樂!
    佰岳閱讀 110評(píng)論 0 1