MySQL數據庫使用(一)

1.數據庫概念

  • 數據庫(Database)是按照數據結構來組織、存儲和管理數據的倉庫;
  • 每一個數據庫都有一個或多個不一樣的API用於建立,訪問,管理,搜索和複製所保存的數據;

2.經常使用的數據庫分類

  • 關係型數據庫有OracleMySQLPostgreSQLSQL ServerDB2等;
  • 非關係型數據庫有NoSqlMongoDBCloudantRedisElasticsearchHBase 等;

1.png

3.關係型數據庫的優缺點

優勢:html

  • 容易理解,二維表結構是很是貼近邏輯世界一個概念,關係模型相對網狀、層次等其餘模型來講更容易理解 易於維護,都是使用表結構,格式一致;
  • 使用方便,通用的SQL語言使得操做關係型數據庫很是方便;

缺點:mysql

  • 讀寫性能比較差,尤爲是海量數據的高效率讀寫;
  • 固定的表結構,靈活度不高;
  • 每一步都要進行加鎖的操做,增長數據庫負擔;
  • 不擅長對簡單查詢須要快速返回結果的處理;

4.非關係型數據庫的優缺點

優勢:sql

  • 格式靈活,存儲數據的格式能夠是key,value形式、文檔形式、圖片形式等等,文檔形式、圖片形式等等,使用靈活,應用場景普遍,而關係型數據庫則只支持基礎類型;
  • 無需通過sql層的解析,讀寫性能很高;
  • 基於鍵值對,數據沒有耦合性,容易擴展;

缺點:數據庫

  • 不提供sql支持,學習和使用成本較高;
  • 無事務處理;
  • 數據結構相對複雜,複雜查詢方面稍欠;

5.MySQL數據庫的概念

  • MySQL是一種關係型數據庫管理軟件;
  • 也是Web世界中使用最普遍的數據庫服務器;
  • MySQL內部有多種數據庫引擎,最經常使用的引擎是支持數據庫事務的InnoDB;

MySQL在過去因爲性能高、成本低、可靠性好,已經成爲最流行的開源數據庫,所以被普遍地應用在Internet上的中小型網站中。隨着MySQL的不斷成熟,它也逐漸用於更多大規模網站和應用,好比維基百科、Google和Facebook等網站。很是流行的開源軟件組合LAMP中的「M」指的就是MySQL。服務器

6.MySQL數據類型

  • 整數:tinyintsmallintmediumintintbigint
  • 浮點數:floatdoublerealdecimal
  • 日期和時間:datetimedatetimetimestampyear
  • 字符串:charvarchar
  • 文本類型:tinytexttextmediumtextlongtext
  • 二進制:tinyblobblobmediumbloblongblob
  • 對數據類型的修飾符:unsignednot nulldefault

7.SQL語句分類

  • DDL:數據庫定義語言,負責數據庫定義,包括CREATEALTERDROP
# 建立庫
create database Student;

# 若是沒有Student這個庫則建立它,character set指定字符集爲utf8, 排序規則爲utf8_bin
create datebase if not exists Student character set utf8 collate utf8_bin

# 刪除庫
drop database Student;

# 修改庫
alter database Student character set = utf8mb4
alter database Student collate = utf8mb4_general_ci

# 建立表
create table students (id int not null primary key auto_increment, name varchar(250) not null, class varchar(250) not null) engine=InnoDB default charset=utf8;

# 查看錶結構
desc students;

# 修改表
alter table students add gender enum('f','m');
alter table students drop gender;
alter table students change name username varchar(100) after id;
alter table students modify username varchar(100) first;

# 刪除表
drop table students;
  • DML:數據庫操做語言, 負責數據集對象操做,包括INSERTDELETEUPDATESELECT
# 給students表增長數據
insert into students (class,username) values ('一年級', 'Luky'), ('二年級', 'Tom'), ('三年級', 'Mark');

# 修改students表中id = 1 的字段class的值爲「初一」
update students set class = '初一' where id = 1;

# 刪除class爲一年級的字段
delete from students where class = '一年級';
  • DCL:數據庫控制語言, 負責權限訪問控,包括GRANTREVOKE
# 先建立用戶,再受權
create user Mark@'172.16.19.%' identified by '123456';
grant all on *.* to Mark@'172.16.19.%';
flush privileges;

# 建立用戶的同時給用戶受權
grant all on *.* to Mark@'172.16.19.%' identified by '123456';
flush privileges;

# 給用戶授予某些權限
show grants for Mark@'172.16.19.%';

# 撤銷受權
revoke select ON *.* from Mark@'172.16.19.%';
flush privileges;

# 查看用戶的權限
show grants for Mark@'172.16.19.%';

# 刪除用戶
delete from mysql.user where user = "Mark";
flush privileges;

# 刪除用戶
drop user 'Mark'@'192.168.%.%';

# 修改密碼
(1)set password for 'Mark'@'192.168.%.%' = password('123456');
(2)使用update命令,直接修改 mysql.user 用戶表,修改以後flush priveleges;
  • TCL:事務控制語言,負責ACID事務處理,包括commit(提交)rollback(回滾)
# SQL刪除記錄語句
sql = "DELETE FROM Student WHERE AGE > %s" % (30)
try:
    cursor.execute(sql)
    # 向數據庫提交
    db.commit()
except:
    # 發生錯誤時回滾
    db.rollback()
  • SQL語句不區分大小寫,句尾使用分號表示一條語句結束, \G 結尾表示以以豎行顯示

8.SELECT 語句

SELECT語句處理流程.png

  • 查詢表上的全部的數據;
select * from Student
  • 查詢部分數據;
select id,name from Student;
  • as給字段取別名,能夠給一個字段取,也能夠給多個字段取;
select id as num,name from Student;

select id as num,name as username from Student;
  • where子句用於指明過濾條件,可使用的算數運算符有:+, -, * ,/ ,= ,!= ,<=, >= ,鏈接詞有:and , or
select * from Student where id >= 1;
select * from Student where id <= 5 and id >1;
select * from Student where id <3 or id >10;
select * from Student where id between 1 and 5;    # between 較小的數 and 較大的數
  • like語句用於模糊匹配,%表示任意長度的字符,_表示任意單個字符
select * from Student where class like 'Ma%';

select * from Student where class like 'Ma_k';
  • 可使用null對值進行判斷
select * from Student where id is not null;
select * from Student where id is null;
  • group by 子句能夠根據指定的查詢條件將查詢結構進行分組,用於作聚合運算,可使用的聚合函數:avg()max() min()count()sum()
select age,gender from students group by gender; 
select avg(age),gender from students group by gender; 
select min(age), gender from students group by gender;
select max(age), gender from students group by gender;
select count(id), gender from students group by gender;
  • 使用order by語句排序,默認是asc,表示升序排列,desc是降序;
select * from Student order by id desc;
  • having子句用於將分組以後的結果再次過濾;
select avg(age) as 'average_age', gender from students group by gender having average_age > 50;
  • limit 子句用於對查詢的結果進行輸出行數的限制 ;
# 選前5行
select id,name from students order by id desc limit 5; 

# 前4個不選,從第5行開始選2行
select id,name from students order by id limit 4, 2;
  • 子句的書寫順序:where -> group by -> having -> order by -> limit
select *,avg(score) as '各班平均成績' from students where id > 1 group by class having avg(score) > 55 order by score desc limit 3 ;

參考:https://www.9xkd.com/user/plan-view.html?id=4200717020數據結構

相關文章
相關標籤/搜索