MySQL學習系列(一)

MySQL簡介


創(chuàng)始人芬蘭人,2009年以10億美金MySql賣給Sun公司

1年后耀鸦,Sun被Oracle收購

MySql不被Oracle重視稀拐,開發(fā)社區(qū)被收縮握截,開發(fā)進度緩慢

開源社區(qū)認為MySql存在閉源風險

MySql創(chuàng)始人飞崖,在MySql源碼基礎(chǔ)上,開了一個新的分支 MariaDB


1.mysql客戶端

1.連接本機服務(wù)器谨胞,登陸服務(wù)器

mysql -uroot -p
[Enter password]

2.查看數(shù)據(jù)庫

show databases;

3.進入數(shù)據(jù)庫

use 數(shù)據(jù)庫名;

4.查看數(shù)據(jù)庫表

show tables;

5.查看表結(jié)構(gòu)

desc 表名;

6.退出登錄\斷開連接

exit;
quit;
\q

2.建庫固歪、建表

建庫

-- 刪除db1庫
drop database if exists db1;
-- 重新創(chuàng)建db1庫
create database db1 charset utf8;
-- 查看、進入db1庫
show databases;
use db1;

建表

-- 刪除stu學生表
drop table if exists stu;
-- 創(chuàng)建stu表
create table stu(
   id int,
   name varchar(20),
   gender char(1),
   birthday date
);
-- 查看表結(jié)構(gòu)
desc stu;

3.數(shù)據(jù)類型

數(shù)字

數(shù)據(jù)類型 相關(guān)描述
unsigned 無符號胯努,只有正數(shù)
zerofill 配合顯示位數(shù)牢裳,不足補0
tinyint
smallint
int 查詢時不足位數(shù)按規(guī)定位數(shù)顯示
bigint
float 單精度
double 雙精度,運算不精確
descimal

字符串

數(shù)據(jù)類型 相關(guān)描述
char 1.定長字符串叶沛,存儲訪問效率高 2.字符串長度不足蒲讯,補空格 3.超出部分根據(jù)數(shù)據(jù)庫設(shè)置,可能出錯也可能截斷4.最長255個字符
varchar 1.變長字符串灰署,存儲訪問效率比char低 2.最長不超過65535個字節(jié) 3.一般超過255個字節(jié)判帮,使用test類型
test 長文本類型,最長65535字節(jié)

日期時間

日期類型 相關(guān)描述
date 格式(年月日)
time 格式(時分秒)
datatime 格式(年月日時分秒)
timestamp 1.時間戳 2.最大表示2038年 3.在插入數(shù)據(jù)溉箕、修改數(shù)據(jù)時晦墙,自動更新系統(tǒng)當前時間

4.sql入門

sql:Structured Query Language是一種結(jié)構(gòu)化的查詢語言

sql類型 描述 作用
DDL 數(shù)據(jù)定義語言 CREATE,DROP,ALTER
DML 數(shù)據(jù)操作語言 INSERT,UPDATE,DELETE
DQL 數(shù)據(jù)查詢語言 SELECT
DCL 數(shù)據(jù)控制語言 GRANT,REMOVE ...
TCL 事務(wù)控制語言 COMMIT,ROLLBACK...

中文編碼

image

-- 把客戶端編碼告訴服務(wù)器,這樣服務(wù)器可以做正確的編碼轉(zhuǎn)換(按自己PC編碼設(shè)置)
set names gbk;

Insert:插入數(shù)據(jù)

-- 插入完整表數(shù)據(jù)
insert into stu values(1,'張三','男','1996-11-23');
-- 插入部分表數(shù)據(jù)
insert into stu (id,name) values(2,'李四');
--插入多條表數(shù)據(jù)
insert into stu (id,name) values(3,'王五'),(4,'趙六'),(5,'錢七');

-- 查詢表數(shù)據(jù)
select * from stu;

Update:更新,修改數(shù)據(jù)

-- 把id為4,趙六的性別和生日修改成'nv','1998-8-8'
update stu set gender ='女',birthday ='1998-8-8';

Delete:刪除數(shù)據(jù)

-- 刪除id>4的數(shù)據(jù)
delete from stu where id>8;

Select:查詢數(shù)據(jù)

-- 查詢所有字段
select * from stu;
-- 查詢指定字段
select name,gender from stu;

4.sql進階

-- 準備測試數(shù)據(jù)
-- hr_mysql.sql(sql腳本數(shù)據(jù),文末可獲取相關(guān)資源)
-- 執(zhí)行這個文本中的sql代碼
source 拖曳腳本到dos窗口(腳本路徑)

-- 查看表
show tables;
-- 員工表結(jié)構(gòu)
desc emps;
-- 員工表數(shù)據(jù)
select * from emps;

select * fname,sal,dept_id from emps

where子句

過濾條件 相關(guān)描述
= 等值過濾
<> 不等過濾
> >= < <=
between 小 and 大 >= 小 并且 <= 大
in(7,2,9,4) 在指定的一組值中取值
is null\is not null 是null\不是null
like 字符串模糊匹配(%,_ ,%,_,\)
not not between and,not in(...),is not null,not like
and 并且
or 或者
-- 員工id是122
select id,fname,sal,dept_id from emps where id=122;
-- 部門編號dept_id是30
select id,fname,sal,dept_id from emps where dept_id=30;
-- 工作崗位代碼job_id是'IT_PROG'
select id,fname,sal,dept_id,job_id from emps where job_id='IT_PROG';

-- 部門編號dept_id 不是 50
select id,fname,sal,dept_id from emps where dept_id<>50;

-- 工資sal>5000
select id,fname,sal,dept_id from emps where sal>5000;

-- 工資范圍[5000,8000]
select id,fname,sal,dept_id from emps where sal>=5000 and sal<=8000;
--
select id,fname,sal,dept_id from emps where sal between 5000 and 8000;

--id 是(120,122,100,150)
select id,fname,sal,dept_id from emps where id in (120,122,100,150);
--
select id,fname,sal,dept_id from emps where id=120 or id=122 or id=100 or id=150;

-- 沒有部門的員工,dept_id 是 null
select id,fname,sal,dept_id from emps where dept_id is null;
-- 有提成的員工,com_pct 不是 null
select id,fname,sal,dept_id from emps where com_pct is not null;

-- fname中包含en
select id,fname,sal,dept_id from emps where fname like '%en%';
-- fname第3,4個字符是en
select id,fname,sal,dept_id from emps where fname like '__en%';

distinct:去重

  • select distinct a from ... (去除a字段重復值)
  • select distinct a,b from ...(去除a,b字段組合的重復值)
-- 查詢所有部門id
select distinct dept_id from emps where dept_id is not null;

order by 子句

排序(asc 升序[默認],desc 降序)

-- 查詢50部門員工,按工資降序
select id,fname,sal,dept_id from emps where dept_id=50 order by sal desc;

--所有員工按部門升序肴茄,相同部門按工資降序
select id,fname,sal,dept_id from emps order by dept_id, sal desc;

5.查詢執(zhí)行順序

select 字段
from
where
order by

  1. where 過濾
  2. 選取字段
  3. order by 排序

6.單引號

字符串內(nèi)容中的單引號,用兩個單引號去轉(zhuǎn)義
'I'm ABC'
'I''m ABC'

use db1;
insert into stu(id,name) values(6422,'I''m Xxx');

select * from stu;
  • sql注入攻擊
    通過正在sql語句中,注入單引號,改變sql語句結(jié)構(gòu)
select * from user where username='張三' and password = '1' or '1'='1';

select * from user  where username='chenzs'#' and password='';

防止sql和注入攻擊(用戶填寫的內(nèi)容中,所有單引號都變成兩個單引號)

7.函數(shù)

字符串函數(shù)

函數(shù) 相關(guān)描述
char_length(str) 獲取str字符數(shù)
length(str) 獲取str字節(jié)數(shù)
left(str,length) 獲取左側(cè)字符
substring(str,start,length) 截取字符串str
instr(str,substr) 查詢子串位置
concat(s1,s2,s3...) 字符串連接
lpad(str,8,'*') 左側(cè)填充*
-- fname和lname首字母相同
select id,fname,lname,sal,dept_id from emps where left(fname,1)=left(lname,1);
--
select id,fname,lname,sal,dept_id from emps where substring(fname,1,1)=substring(lname,1,1);

-- fname和lname連接起來,并對其中間空格
select concat(lpad(fname,20,' '),' ',lname);

數(shù)字函數(shù)

函數(shù) 相關(guān)描述
ceil(數(shù)字) 向上取整到個位
floor(數(shù)字) 向下取整到個位
round(數(shù)字,2) 四舍五入到小數(shù)點2位
truncate(數(shù)字,2) 舍棄到小數(shù)點2位
rand() 隨機數(shù)[0,1)
-- 工資上漲11晌畅,31%,向上取整到10位
select id,fname,sal,ceil(sal*1.1131/10)*10 from emps;

-- 所有員工隨機排序
select id,fname,sal,dept_id from emps order by rand();

日期函數(shù)

函數(shù) 相關(guān)描述
now() 當前日期時間
curdate() 當前日期
curtime() 當前時間
extract(字段 from 日期) 抽取指定字段的值
date_add(日期, interval 字段 值) 在指定字段上加一個值
datediff(日期1,日期2) 兩個日期之間相差的天數(shù)
-- 查詢系統(tǒng)當前時間
select now();

-- 1997年入職員工
select id,fname,hdate from emps where extract(year from hdate)=1997;

-- 員工已入職多少年,并按入職時長升序排序
select id,fname,hdate,dateiff(now(),hdate)/365 y from emps order by y;

null值函數(shù)

ifnull(a,b)

a不是null返回a,a是null返回b

-- 所有員工年收入降序排序(年薪*提成,部分部門無提成項)
select id,fname,sal,sal*12*(1+ifnull(com_pct,0)) t from emps order by t desc;

多行函數(shù),聚合函數(shù)

函數(shù) 相關(guān)描述
sum()
avg() 平均
max() 最大
min() 最小
count() 行數(shù)
  • 多行函數(shù)不能和其他普通字段一起查詢
  • 多個多行函數(shù)可以一起查詢
  • ==多行函數(shù)會忽略null值==
  • count(*) 記行數(shù)
  • count(distinct a) 去除重復再計數(shù)
-- 最低工資值
select min(sal) from emps;

8.group by

  • 按指定字段中相同的值進行分組
  • 分組后分別求多行函數(shù)
  • 分組字段,可以查詢
  • group by a (按a字段相同值分組)
  • group by a,b(按a,b組合的相同值分組)
-- 每個部門的平均工資
select dept_id,avg(sal) from emps where dept_id is not null group by dept_id;

-- 每個工作崗位job_id的人數(shù)
select job_id,count(*) from emps group by job_id;

相關(guān)資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寡痰,一起剝皮案震驚了整個濱河市抗楔,隨后出現(xiàn)的幾起案子棋凳,更是在濱河造成了極大的恐慌,老刑警劉巖连躏,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贫橙,死亡現(xiàn)場離奇詭異,居然都是意外死亡反粥,警方通過查閱死者的電腦和手機卢肃,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來才顿,“玉大人莫湘,你說我怎么就攤上這事≈F” “怎么了幅垮?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尾组。 經(jīng)常有香客問我忙芒,道長,這世上最難降的妖魔是什么讳侨? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任呵萨,我火速辦了婚禮,結(jié)果婚禮上跨跨,老公的妹妹穿的比我還像新娘潮峦。我一直安慰自己,他們只是感情好勇婴,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布忱嘹。 她就那樣靜靜地躺著,像睡著了一般耕渴。 火紅的嫁衣襯著肌膚如雪拘悦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天橱脸,我揣著相機與錄音础米,去河邊找鬼。 笑死慰技,一個胖子當著我的面吹牛椭盏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吻商,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼掏颊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起乌叶,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤盆偿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后准浴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體事扭,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年乐横,在試婚紗的時候發(fā)現(xiàn)自己被綠了求橄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡葡公,死狀恐怖罐农,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情催什,我是刑警寧澤涵亏,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站蒲凶,受9級特大地震影響气筋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旋圆,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一宠默、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧臂聋,春花似錦光稼、人聲如沸或南。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽采够。三九已至肄方,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蹬癌,已是汗流浹背权她。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留逝薪,地道東北人隅要。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像董济,于是被迫代替她去往敵國和親步清。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348