秋招之際,對於應屆大學生而言,如果簡歷上能夠增加上關於數據庫的一些相關知識,無疑是錦上添花,而不論是網上的一些課程還是書籍看起來都過於繁瑣,這篇知識總結也是我自己學習數據可路程上所進行的總結和積累,希望幫助到更多的同伴,秋招加油!(可以收藏起來分幾天時間看)
守護行程:
在我們檢視mysql埠的時候會發現,會存在一個mysql_safe的存在,這也就是我們所說到的的守護行程,守護行程在判斷mysql伺服器是否執行正常,如果mysql使用過程當中,伺服器端掛掉了,守護行程就會重新拉起來mysql伺服器端,保證muysql的正常工作。
mysql伺服器端:
對於域通訊端的話,其本質上就是本地機器當中建立一個檔案,用戶端和伺服器端通過檔案來進行通訊,本質上就是進程間通訊,這個進程間通訊會走網路協定棧。(程式碼如下)
數據庫就像是一個資料夾一般,管理着諸多的檔案,也就是我們的數據表。
show databases;
show tables;
;
字元集:
校對規則:
create database helloworld charset=utf8 collate utf8_general_ci;
爲何要使用指定字元集呢?
這也是爲了避免亂碼的出現,亂碼的來源就是由於前後端字元集不匹配的原因造成的,因此在我們建立數據庫的時候儘可能地指定字元集,儘量數據的字元集設定成utf8!!
檢視已經建立好的數據庫的建立語句
show create database helloworld;
use helloworld;
drop database;
create table [表名稱](列的名稱 列的型別 comment ' 註釋', ...)
desc [表欄位]
alter table [表名稱] add [欄位的名稱][ 欄位的型別]aftre[欄位的名稱];
alter table [表的名稱]drop [欄位的名稱];
如果刪除某一個列,則該列的數據也隨之刪除alter table [表名稱] modify [欄位的名稱][修改後的欄位型別]
alter table [待命名的表名稱]rename to [重新命名後的名字];
alter table[ 表名稱] change [欄位名][修改後的名稱][欄位屬性];
drop table 表名稱;
insert into 表名稱 values (表欄位對應的值,....)
insert into 表名稱 (表中的列名稱)values(指定表欄位對應的值,....)
insert into 表名稱 values (表欄位對應的,...) ,(表欄位對應的值,....)
insert into 表名稱 (表中的列名稱)values(指定表欄位對應的值,...),(指定表欄位對應的值,...)
update 表名稱 set 欄位=‘ 內容’;
select * from [表名稱];
select 列名稱1,列名稱2 ,列名稱3 from 表名稱;
select 列名稱1,列名稱2,表達式 from 表名稱
select 列名稱1+列名稱2+列名稱3+...from 表名稱
select 列名稱1+列名稱2+列名稱3 別名...from 表名稱
mysqldump -p 埠 -u 使用者 -p 密碼 -B 數據庫的名稱 > 檔案
mysqldump -p 埠 -u 使用者 -p 密碼 -B 數據庫的名稱 表名稱1 表名稱2 > 檔案
float(4,2) 表示的範圍是-99.99~99.99
MySQL在儲存值是會自動進行四捨五入,如果是無符號的話,float(4,2)unsigned
則只能夠表示0~99.99,float精度大約爲7位select * from 表名稱 where 表欄位= ‘內容’
在這個表中查詢此內容的資訊。定義欄位的時候,需要有一個型別,這樣的一個型別,有時候並不能滿足我們對列數據的一個約束;例如表欄位是否可以爲NULL,有沒有預設值,表欄位的解釋能不能加上,對於數位型別的欄位可以不可以指定預設表示的位數,可不可以將這個欄位設定成唯一標識該行數據的呢?因此也就產生了表的約束!
對於欄位的約束:
createtable t(id int primary key, name varchar(20));
createtable t(id int, name varchar(20),primary key(id));
alter table t add primary key(id);
如何刪除主鍵:
使用alter關鍵字加上drop可以刪除 ,alter table t drop primary key;
mysql> create table tt21(
-> id int unsigned primary key auto_increment,
-> name varchar(10) not null default ''
-> );
獲取上次插入的自增長的值
mysql > select last_insert_id();
mysql> create table student (
-> id char(10) unique comment '學號,不能重複,但可以爲空',
-> name varchar(10)
-> );
建立主表
create table myclass (
id int primary key,
name varchar(30) not null comment'班級名'
);
建立從表
create table stu (
id int primary key,
name varchar(30) not null comment '學生名',
class_id int,
foreign key (class_id) references myclass(id)
);
replace into 表名稱 欄位名稱 values (欄位對應的值,欄位對應的值,...);
select * from
*代表當前表的所有列select 欄位名稱 欄位名稱 from 表名稱
select 欄位名稱,欄位名稱,表達式(欄位名稱) from 表名稱
select distinct 欄位名稱,欄位名稱 from 表名稱
任意一個結果成立:or => ’ || ’
多個結果一起成立:and => ‘&&’
in(option…) 如果是選擇之中任意一個,則成立
SELECT name, shuxue FROM exam_result WHERE shuxue IN (58, 59, 98, 99);
範圍匹配: between a0 and a1 則表示[a0,a1];
SELECT name, yuwen FROM exam_result WHERE yuwen BETWEEN 80 AND 90;
模糊匹配:like ‘%’表示任意多個字元;‘_’表示一個字元
SELECT name FROM exam_result WHERE name LIKE '孫%';
SELECT name FROM exam_result WHERE name LIKE '孫_';
SELECT name, shuxue FROM exam_result ORDER BY shuxue;
SELECT id, name, shuxue, yingyu, yuwen FROM exam_result ORDER BY id LIMIT 3 OFFSET 0;
update 表名稱 set 欄位名稱=更改後的值 where 約束條件
UPDATE exam_result SET shuxue = 80 WHERE name = '孫悟空';
DELETE FROM exam_result WHERE name = '孫悟空';
truncate table 表名稱
SELECT COUNT(*) FROM students;
SELECT SUM(shuxue) FROM exam_result;
SELECT AVG(yuwen + shuxue + yingyu) 平均總分 FROM exam_result;
SELECT MAX(yingyu) FROM exam_result;
SELECT MIN(shuxue) FROM exam_result WHERE shuxue > 70;
group by 子句
select deptno, avg(asl),max(sal) from emp group by deptno
select deptno , job,avg(sal),min(sal) from emp group by deptno ,job
先按照部門進行分,之後再按照崗位來進行劃分select deptno ,avg(sal), from emp group by debtno having agv(sal)<2000;
select current_date();
select current_time();
select current_timestamp();
date(datetime)
select date_sub('2017-10-1', interval 2 day);
select date_add('2017-10-28', interval 10 day);
select datediff('2017-10-10', '2016-9-1');
計算方式是date1-date2now()
select charset(ename) from EMP;
select concat(name, '的語文是',chinese,'分,數學是',math,'分') as '分數' from student;
instr(string ,substring)
ucase(str)
lcase(str)
left(str,len)
select length(name), name from student;
select replace(ename, 'S', '上海') ,ename from EMP;
strcmp(str1,str2);
select substring(ename, 2, 2), ename from EMP;
select abs(-100.2);
select ceiling(23.04);
select floor(23.7);
select rand();
select format(12.3456, 2);
select user();
select database();
select md5('admin')
select password('root');
select ename, sal,dname from EMP, DEPT where EMP.deptno=DEPT.deptno and DEPT.deptno = 10;
select ename, sal, grade from EMP, SALGRADE where EMP.sal between losal and hisal;
mysql> select ename from EMP where (deptno, job)=(select deptno, job from EMP where ename='SMITH') and ename <> 'SMITH';
select EMP.ename, EMP.sal, EMP.deptno, ms from EMP,(select max(sal) ms, deptno from EMP group by deptno) tmp where EMP.deptno=tmp.deptno and EMP.sal=tmp.ms;
from 表1 left join 表2 on 約束條件
完全顯示錶1from 表1 right join 表2 on 約束條件
完全顯示錶2show keys from 表名稱
alter table 表名稱 drop primary key;
或者alter table 表名稱 drp index 索引名稱
相當於多執行緒當中的執行緒互斥問題
start transaction;
savepoint 儲存點名稱
rollback to 儲存點名稱
commit
set session transaction islation level 事務的隔離級別
create view 檢視名稱 as select 語句
檢視數目是沒有限制的drop view 檢視名稱
MySQL的使用者管理相當於linux操作系統的多使用者管理 因爲不想給數據庫操作人員,所有數據庫的許可權,所以需要分使用者,可以設定使用者只能夠看到某一個具體的數據庫!
create user '使用者名稱'@‘允許從哪裏鏈接上來’ identidied by 密碼;
drop user '使用者名稱'@'允許從哪裏連線上來';
set password for '使用者名稱'@'允許從哪裏連線上來=password(’新密碼‘);
set password=password('新密碼');
grant 許可權列表 on 庫.物件名 to '使用者名稱'@'登陸位置' [identified by '密碼']
,
隔開*.*
代表本系 本係統中所有數據庫的所有物件庫.*
表示某個數據庫中的所有數據物件revoke 許可權列表 on 庫.物件名 from '使用者名稱'@'登陸位置';
對於這些基本的操作和相關概念,我們能夠做到瞭解甚至熟練的話,那麼對於我們秋招來說無疑是一次很大的提升,也可以讓我們的簡歷更加的豐富,一起加油吧!(給個讚唄)