多測師課堂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 等
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