1. 程式人生 > 資料庫 >多測師課堂008_mysql之介紹和單表(001)高階講師肖sir

多測師課堂008_mysql之介紹和單表(001)高階講師肖sir

資料庫:
什麼是資料庫?
是存放資料的電子倉庫。以某種方式儲存百萬條,上億條資料,供多個使用者訪問共享。

每個資料庫有一個或多個api用於建立,訪問,管理,和複製所儲存的資料;
系統中很多動態的資料都儲存在資料庫中,需要通過訪問資料庫才能顯示


資料庫型別分:
關係型資料庫
1.安全2.保持資料的一致性3.實現對錶與表進行復雜的資料查詢常用的關係型資料庫:
1.db2 IBM公司
2.oracle 甲骨文公司3.mysql oracle隸屬非關係型資料庫非關係型資料庫特點1.效率高 2.容易擴充套件 3.使用更加靈活1.hbase(列模型)2.redis(鍵值對模型)3.mongodb(文件類模型)


mysql

mysql是指mysql資料庫管理系統
屬於 關係型資料庫
瑞典公司mysql開發的,oracle收購,
mysql 是一種關聯資料庫將資料儲存在不同的表中,而不是講所有的資料放在一個大倉庫中,增加了速度和靈活性

MySQL資料在目前web應用領域使用最廣泛,也是B/S 架構常用的資料庫

mysql資料庫的特點:
1.體積小,安裝簡單,維護成本低
2.開源,免費
3.使用C++編寫4.支援多系統
5、與其他工具組合可以搭建免費的網站系統
常見:LAMP=linux+apache+mysql+php 多有米
LNMP=linu+x+nginx+mysql+php 論壇
6、myql支援多種程式語言,提供了api包括:c,c++,Python,java,php,td 等

7、支援多種儲存引擎

mysql版本 5.0以後才支援儲存引擎

現在學的是5.7版本

應用架構:
單點資料庫,適用於小規模應用
複製,適用於中小規模應用
叢集,適合大規模應用


資料庫中術語:
資料庫
資料表


冗餘
主鍵
外來鍵
索引
檢視
儲存
臨時表
單表
多表

 

linux中mysql

rpm -qa|grep mysql 查詢linux中的資料庫
yum remove mysql * 刪除linux中資料庫
yum erase +資料庫包 刪除linux中資料
rpm -e --nodeps 查詢出的資料庫 刪除linux中資料

 

yum install mysql 安裝mysql客戶端
yum install mysql-server 安裝mysql服務端


service mysqld start 資料庫開啟服務
service mysqld stop 資料庫關閉服務
service mysqld restart 資料庫重啟服務
service mysqld status 資料庫檢視狀態

service iptables stop 防火牆的關閉

mysqladmin -uroot password 密碼 設定祕密(linux介面)

create database 資料庫名 #建立資料庫


mysql -u root -p 進入mysql操作介面

show databases ;顯示所有的資料庫

use 資料庫名

ctrl+z ctrl+c \q exit quit 退出


grant all privileges on *.* to root@'%' identified by '123456'; 設定許可權

flush privileges ,重新整理許可權


mysql儲存引擎

1 MyISAM儲存引擎(預設的儲存引擎)
Mysql5.0之前預設的儲存引擎,有較高的插入,查詢速度,但不支援事務,支援資料壓縮,表級鎖定,支援索引。
2 InnoDB儲存引擎 事務型資料庫首選引擎,(外來鍵)Mysql5.5之後預設的儲存引擎,支援行級鎖定,支援索引

show tables ;檢視指定庫裡的表

navicat連線

注意事項:
1、防火牆
2、mysql伺服器是否開啟
3、許可權設定成功,並重新整理
4、ip地址是否輸入有誤,
5、密碼不正確

常報錯:1045,2003,1064,1130,2002

 

一個漢字佔多少 長度和編碼有關

utf-8:一個漢字=3個位元組
gbk: 一個漢字=2個位元組


常用 int :整數 2^-3----2^31 節:4
bigint 超大的整數 位元組:8

float 浮點型資料 位元組:4


char 固定長度的字串 最大字元255

varchar 具有最大限制的可變長度 最大65535字元

date yyyy-mm-dd 格式的日期 位元組:3


time hh:mm:ss 格式的時間 位元組:3


datetime 日期+時間 位元組:8

year 年 位元組1

create table +表名
( 欄位1名稱,資料型別, 約束 ,備註, 欄位2名稱,資料型別,約束,備註, 欄位3名稱,資料型別,約束,備註, )


約束:
定義實際上就是表中的限制條件
作用:表在設計的時候加入約束的目的是為了保證表中的記錄完整和有效
約束的種類:
1、非空約束:(not null)非空 用於保證欄位的值不能為空;
2、唯一約束:(unique) 保證欄位值最具有唯一性(不能重複),並且為空
3、主鍵約束:(primary key)主鍵,用於保證欄位值具有唯一性,並且非空
4、外來鍵約束:(foreign key)
5、預設: default
6、自增長:auto_increment
(1)與主鍵 約束一起使用 ,針對id
(2)每插入一條資料,指定的欄位值+1

新增約束的的時機:
1、建表
2、修改表
主鍵約束和唯一約束的區別:
主鍵 不允許為空,最多一個, 允許組合
唯一 允許為空 ,可以由多個, 允許組合

外來鍵:
1、要求有主表和從表
2、建立外來鍵是在從表設定外來鍵,
3、主表和從表的字元型別要一致
4、主表的關聯列是以key
5、插入 資料:先插入主表,在插入從表
6、刪除資料,先刪除從表,在刪除主表


建表:
desc 表名;查看錶結構

select * from 表名 查看錶中所有的資料 * 表示所有

建立表格式:
create table 表名 (欄位名1 字元型別1(字元寬度1) 約束 ,欄位名2 字元型別2(字元寬度2));

#create table gz16 (id int(10)primary key,name VARCHAR(20));

default charset=utf8
刪除表:格式:drop table 表名
#drop table gz16;

表新增欄位:alter table 表名 add 欄位名(字元型別(字元寬度))

表修改欄位: alter table 表名 change 舊欄位名 新欄位名(字元累型別(字元寬度))
刪除欄位: alter table 表名 dorp 欄位名
修改表名:alter table 表名 rename 新表名

方法一:
insert into 表名 (欄位1, 欄位2 ,欄位3) values (1,'xiao' ,"nan","86" )
方法二:
insert into 表名 values (2,"wang ","nv","76"),(3,"wang ","nv","76"),(4,"wang ","nv","76")


alter table ruixia default charset=utf8 ; #修改預設的編碼格式


對錶的資料進行查詢,修改,刪除,新增

#從一個表中查詢所有的資料
select * from baoan003 ;
#查詢表中指定欄位的資料

select id,name ,age from baoan003 ;

#給表字段取別名 AS
select id "編號",name as "姓名" ,age as"年齡" from baoan003 ;

#指定條件查詢內容 用where+條件

select * from baoan003 where age=23 ;

where 條件使用注意:
where +條件 條件中有(=,>,<,>=,<=,!= ,<>)

如:select * from baoan003 where age!=23 ;

and 且 條件1和條件2 同時滿足
如:select * from baoan003 where age!=23 or math=98;

or 或 條件1和條件2 至少滿足一個,滿足其中一個就可以顯示;

between and 在什麼範圍之間 (注意:between的值包含了本身)

select * from baoan003 where math between 81 AND 98;

in

is null 為空
如:select * from baoan003 where class is null;

is not null 非空
如:select * from baoan003 where class is not null;

# 對錶中的資料進行排序 order by ,asc 升序 ,desc 降序
降序:
select * from baoan003 order by id desc;
升序
select * from baoan003 order by chinese asc;

注意點:升序asc可以省略不寫
#二次排序

select * from baoan003 order by math ASC, chinese desc ;

#模糊匹配查詢 LIKE

% :匹配0個字元或者多個字元
_:表示一個字元


select * from baoan003 where english like "7%";#表示7開頭的分數
select * from baoan003 where english like "%7";#表示7結尾的分數
select * from baoan003 where english like "%7%";#表示含有7的分數
select * from baoan003 where english like "7__";表示具體的位數的資料


限制 limit m,n 後面接兩個值
#m 表示下標 ,n 表示步長(可以理解為取多少個數)

select * from baoan003 limit 2,4 ;


#group by 分組 having
select sum(age),sex from baoan003 group by sex ;
select max(age),sex from baoan003 group by sex ;

groupby 一般不會單獨使用,通常都是和聚合函式組合使用 ,

group by 後 查詢出來的結果,在需要根據條件查詢用having

select max(age) s,sex from baoan003 group by sex having s>23 ;

select max(age) ,sex from baoan003 group by sex having max(age) >23 ;

having +條件 和where +條件 用法一樣,但是場景不一樣,一般group
by 的後面 接having


注意:分組 使用函式 ,在select 和from 接的欄位 ,只能是函式, 和指定分組的欄位 才能匹配;

 

sql函式

max 最大值

min 最小值

avg 平均值

count 統計總數

sum 求和

distinct 去重

select sum(age) from baoan003 ;
select min(age) from baoan003 ;
select max(age) from baoan003 ;
select count(age) from baoan003 ;
select avg(age) from baoan003 ;
select distinct(age) from baoan003 ;

#SELECT 查
#insert into 增
#update ..... set 改
# delete 刪

#update ..... set 改
update 表名. set 修改的欄位=欄位新值 where 條件
update xiaodao set name="國龍" where id=2 ;
update xiaodao set name="國龍" where id=4 or id=1;

# delete 刪
delete from 表名 清空表資料
#truncate 快速刪除表內大量資料
truncate baoan003

#drop

drop>truncate>delete
注意:1、drop 是刪除表和表資料

2、truncate 刪除無法恢復

3、delete 刪除可恢復

#如:
1、delete from xiaodao ;
2、delete from xiaodao where id=1;
3

 

delete from 表名 where 條件
如:delete from xiaodao ; 刪除表內所有資料
如:delete from xiaodao where id =6; 指定條件刪除


表可以取別名:
select * from baoan003 as s ; as可以省略 s可以自定義,代表表的別名

備份表結構
create table 新表名 like 備份的原表 ;
create table nn like mm ;
備份資料:

INSERT into 新表有表結構 select * from 備份的原表;
INSERT into nn select * from mm;


備份表結構和表資料:
reate table 新表名 as(select * from 備份的原表);
如:create table ss as(select * from baoan003);

 

注意:備份表中的某些表字段的資料:
步驟先備份表,在備份資料

INSERT into 新表 (欄位名1,欄位名2) select 欄位名1 ,段名2 from 備份原表;

INSERT into jj (id,name) select id ,name from mm;


linux中備份:
> 備份資料庫
mysqldump -u root -p baoan > baoan00

< 還原資料庫

先建一個庫名,

mysql -u root -p 新庫 < 指令碼.sql