一,Mysql存儲引擎mysql
二,數據導入,導出
三,管理表記錄。
增
查(單表查詢 嵌套查詢 多表查詢 鏈接查詢)
改
刪
增查改刪 時使用的匹配條件(條件的表示方式)正則表達式
一,Mysql存儲引擎.sql
1.1什麼是存儲引擎?(存儲引擎介紹)shell
數據庫服務軟件自帶的功能程序,數據庫
不一樣的存儲引擎有不一樣的數據存儲方式和功能!vim
是表的處理器.bash
1.2如何查看數據庫服務和當前表使用的存儲引擎?
mysql>show engines;
mysql>show create table a1;
******************************************************
1.3如何設置和修改數據庫服務和表使用的存儲引擎?
修改數據庫服務默認使用的存儲引擎:
建立表使用的存儲引擎
->create table 庫.表(
->字段列表
->)engine=存儲引擎名;
修改表使用的存儲引擎:
alter table 表 engine=存儲引擎名;
修改庫存儲引擎:(影響所有數據的存儲)
vim /etc/my.cnf i
在[mysqld]下面
default-storage-engine=存儲引擎名;
systemctl stop mysqld
systemctl start mysqld
*********************************************************
1.4經常使用存儲引擎的特色?
myisam特色:
支持表級鎖
查詢操做多的表適合使用myisam存儲引擎
這樣的節省硬件資源。
不支持事務
數據是存儲在內存上的,當服務重起數據會被釋放。服務器
innodb特色:
支持行級鎖
編輯操做多的表適合使用innodb存儲引擎
這樣支持併發訪問量大。
支持事務和事務回滾,外鍵。
數據存儲方式: a32.frm a31.idb
表結構 數據+索引併發
事務:對數據訪問,從開始到結束的過程
事務回滾:對數據的訪問過程當中任何一步
沒有被正確執行都會恢復以前的全部操做。函數
mysql數據庫服務使用事務日誌文件記錄對全部innodb存儲引擎的表執行過的sql操做。
cd /var/lib/mysql/
ibdata1----sql命令執行後產生後的數據信息
ib_logfile0-----
|sql命令
ib_logfile1-----
鎖的類型?
讀鎖(select)又被稱爲共享鎖
寫鎖(insert update delete)又被稱爲排它鎖 或互斥鎖
數據存儲方式: a31.frm a31.MYD a31.NTI
表結構 數據 索引
*************************************************************
1.5生成環境中建表時如何決定表使用的存儲引擎?
編輯操做多的表適合使用innodb存儲引擎.這樣併發訪問量大。
查詢操做多的表適合使用myisam存儲引擎.這樣節省硬件資源。
**************************************************************
day01~day02知識點
搭建數據庫服務器
Mysql數據類型
Mysql鍵值
Mysql存儲引擎
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二,
數據導入:把系統文件內容存儲到數據庫服務器的表裏。
語法格式:
mysql->load data infile "/var/lib/mysql-files/文件名" into table
mysql->庫.表 fields terminated by "符號" lines terminated by "\n";
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
把系統用戶信息存儲到數據庫的表裏:
/etc/passwd userdb.user
root:x:0:0:root:/root:/bin/bash 要按照系統文件格式對應建表。
create table user(
-> name char(50),
-> password char(1),
-> uid int(2), 新建一個庫userdb
-> gid int(2), 把表放到userdb庫下。
-> comment char(100),
-> homedir char(30),
-> shell char(25),
-> index(name)
-> );
在mysql裏面:1,system ls /var/lib/mysql-files/
2,system cp /etc/passwd /var/lib/mysql-files/
3, load data infile "/var/lib/mysql-files/passwd" into table userdb.user
fields terminated by ":" lines terminated by "\n";
注意點:表的格式要和系統文件兼容,文件要由r權限,存儲引擎要兼容。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1,修改導入文件時,查找文件路徑:
2,vim /etc/my.cnf
3,secure_file_priv="/mydata"
4,chown mysql /mydata/
5,systemctl restart mysqld
6,mysql> show variables like "%secure%";
lter table userdb.user add id int(2) primary key auto_increment first;
增長這個便於管理。
數據導出:把數據庫服務器的表裏的記錄存儲到系統文件中。
sql查詢命令 into outfile "/目錄/文件名";
1,select * from user into outfile "/mydata/a.txt";
2,system cat "/mydata/a.txt";
導出時指定分割符號:
select name,uid from user into outfile "/mydata/a3.txt" fields terminated by "#"
導出時指定分隔符與分隔行的符號:
select name,uid from user into outfile "/mydata/a4.txt" fields terminated by "#"
lines terminated by ";;;";
================================================================================
三,管理表記錄
insert 增(向表中插入新記錄)
一次插入1條記錄給全部字段賦值
一次插入多條記錄給全部字段賦值
一次插入1條記錄給指定字段賦值
一次插入多條記錄給指定字段賦值
insert into 庫.表 values(字段值列表);
insert into 庫.表 values(字段值列表),(字段值列表)...;
insert into 庫.表(字段名列表) values(字段值列表);
insert into 庫.表(字段名列表) values(字段值列表),(字段值列表)...;
****************************************************
update改(修改記錄字段的值)
修改全部記錄指定字段的值
修改指定記錄指定字段的值
update 庫.表 set 字段名=值,字段名=值;
update 庫.表 set 字段名=值,字段名=值 where 條件;
****************************************************
delete刪
增查改刪 時使用的匹配條件(條件的表示方式)
刪除指定記錄 delete from 庫.表 where 條件;
刪除全部記錄 delete from 庫.表;
delete from user where id>=12;
****************************************************
select查(單表查詢 嵌套查詢 多表查詢 鏈接查詢)
select 字段名列表 from 庫.表 where 條件;
查看全部表記錄:select * from user;
查看指定行的全部列:select * from 庫.表 where 條件;
查看指定行的指定列:select 字段名列表 from 庫.表 where 條件;
****************************************************
查 改 刪 時使用的匹配條件(條件的表示方式)
數值比較 字段名 符號 數字
> >= < <= = !=
+++++++++++++++++++++++++++++++++++++++++++++++++++
字符比較 字段名 符號 「字符串」
= !=
++++++++++++++++++++++++++++++++++++++++++++++++++++
範圍內匹配
字段名 between 數字1 and 數字2 在..之間..
select name,uid from user where uid between 10 and 20;
字段名 in (值列表);
select name,uid from user where uid in (11,12,300);
字段名 not in (值列表);
select name,uid from user where uid not in (11,12,300);
++++++++++++++++++++++++++++++++++++++++++++++++++++++
四則運算+ - * / %
加法運算:
select name,uid+gid he from userdb.user;
加法運算+條件:
select name,uid+gid he from userdb.user where name="job";
運算平均值:
select name,uid,gid,uid+gid he ,(uid+gid)/2 pjz from userdb.user;
注:符號能夠時四則運算。
1,alter table user add age int(1) not null default 18 after name;
2,select name,year(now())-age syear syear from user;
用函數year(now())減去age年齡的出出生年份。
update user set age=age+1 where name="tony";
update user set age=age+1;
也能夠用update配合四則運算去改變字段值。
select name,uid,gid from user where uid=gid;
作條件的時候值時能夠用字段去表示的。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
模糊匹配 where 字段名 like ‘表達式’;
%表示零個或多個字符
_表示匹配但個字符
select name from user where name like '_%_';
select name from user where name like '_____';
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
正則匹配
^ $ . [] *
where 字段名 regexp '正則表達式';
select name,uid,gid from user where name regexp '^y.*a$';
找一類數據的時候適合用正則。
正則表達能夠匹配一些複雜的值,靈活判斷運用。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
匹配空 is null
匹配非空 is not null
邏輯匹配(多個判斷條件) or and !
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
查詢分組
sql查詢 group by 字段名 ;
select distinct shell from db3.user where uid between 10 and 20;
select shell from db3.user where uid between 10 and 20 group by shell;
select shell from db3.user group by shell;
select gid from db3.user where name like "a%" group by gid;
select 字段名 as '性別',count(*) as '人數' from 庫.表 group by 字段名;
查詢排序 order by
asc |desc
sql查詢 order by 字段名 升序|降序 ,
select name,uid,gid from db3.user where uid between 10 and 80 ;
mysql> select name,uid,gid from db3.user where uid between 10 and 80 order by uid desc;
限制查詢顯示的行數
顯示查詢結果的前二行:
select * from user where uid<10 limit 2;
限制顯示行數的範圍:
0,1,2=3從第三行開始。
從第三行開始顯示,一共顯示三行。
select * from user where uid<10 limit 2,3;
查詢時不顯示字段的重複值 distinct 字段名
select distinct shell from userdb.user where uid<10;
查詢時能夠作數據統計(彙集函數)
avg(字段名):集和的平均值
sum(字段名):對集和中的各參數求和
min(字段名):集和中的最小值
max(字段名):集和中的最大值
count(字段名):記錄個數
select count(name) from user where shell="/bin/bash";
select count(name) from user;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
複製表(做用1 快速建表,做用2 備份表)
sql命令格式2 create table 庫.表 sql查詢命令;
create table userdb.u2 select * from user;
注意點:u2表中鍵值和索引是沒有的,須要本身添加。
複製表結構,不須要表記錄。
where 條件不成立=只複製表結構.
create table userdb.u2 select * from user where 1=2;
或者:
create table userdb.u2 select * from user where false;
建立的表是根據查詢的結果賦值的。
***********************************************************
where嵌套查詢
select 字段名列表 from 庫.表 where 條件(select 字段名列表from 庫.表 where 條件);
顯示錶中行號最大的記錄內容
select * from teadb.tea2 where id=(select max(id) from teadb.tea2);
*************************************************************
select(多表查詢)
select * from teat1 ; select * from teat2;
select 字段名列表 from 表名列表;迪卡爾集(表記錄行數相乘的積)
例:
select * from teat1,teat3;
select teat1.name,teat3.name from teat1,teat3;
select 字段名列表 from 表名列表 where 條件;
select teat1.name,teat1.uid,teat2.name,teat2.uid
from teat1,teat2
where teat1.name=teat2.name and teat1.uid=teat2.uid;
爲何要多表查詢,由於一個用戶的信息不會存放在一個表裏,
把數據分開存放在多個表裏,且還須要一個惟一編號去標識。
************************************************************
select(鏈接查詢)(左鏈接和右鏈接)。
左鏈接
seletct 字段名列表
from 表1 left join 表2
on 條件;
右鏈接
seletct 字段名列表
from 表1 right join 表2
on 條件;
create table db4.t3 select name,uid,homedir from db3.user limit 4;
create table db4.t4 select name,uid,homedir from db3.user limit 6;
select * from t3 left join t4 on t3.uid = t4.uid;
select * from t3 right join t4 on t3.uid = t4.uid;
select t3.name,t4.name from t3 right join t4 on t3.uid = t4.uid;