安裝mysql教程壤追,網(wǎng)上有很多鸣戴,這里就過多的介紹了档桃。
- 連接數(shù)據(jù)庫
打開命令行,輸入以下命令
mysql -u root -p123456
以上是mysql在本地的連接方式蝶防,如果mysql安裝在服務器呢甚侣,我們需要怎么連接呢。其實只需要在以上命令上面加上-h 主機名和-P
端口號即可间学。
注:端口號的P是大寫的殷费。
mysql -h 192.168.0.53 -P 3306 -u root -p123456
數(shù)據(jù)庫操作
- 創(chuàng)建數(shù)據(jù)庫
create database develop default charset utf8;
這里創(chuàng)建一個名為develop的數(shù)據(jù)庫 ,并指定默認編碼為utf8。 - 查看數(shù)據(jù)庫
show databases;
- 刪除數(shù)據(jù)庫
drop database develop;
- 進入數(shù)據(jù)庫
use develop;
查看數(shù)據(jù)庫詳細信息 可以使用status
命令
數(shù)據(jù)類型
sql中的數(shù)據(jù)類型分為三大類低葫,詳細的分類請查看MySQL 中的數(shù)據(jù)類型介紹
-
數(shù)值類型
-
日期和時間類型
-
字符串類型
數(shù)據(jù)表操作
- 查看所有數(shù)據(jù)表
show tables;
- 創(chuàng)建數(shù)據(jù)表
create table t1(
#id從1自動省長,并設置為主鍵
id int auto_increment primary key,
#設置name不可以為null,如果插入時沒有name則會報錯,默認是可以為null
name varchar(50) not null,
#設置username不可以為null,并且其值在數(shù)據(jù)表里是唯一的,不可重復
username varchar(255) uniqu not null,
#設置age是無符號的正整數(shù),并且默認值為0
age int unsigned default(0)
)
- 顯示表信息
desc t1;
查看表結構
show create table t1;
顯示創(chuàng)建表的sql語句 - 添加列
alter table t1 add phone varchar(50);
- 修改列
alter table t1 change phone age int;
把原先的phone列改名為age详羡,并修改數(shù)據(jù)類型為int - 刪除列
alter table t1 drop phone;
- 刪除表
drop table t1;
數(shù)據(jù)行操作
插入
往數(shù)據(jù)表里插入數(shù)據(jù)
insert into t1 (column1,column2...) values (value1,vaule2...);
-
查詢
查詢是數(shù)據(jù)庫里使用的最頻繁的操作,據(jù)統(tǒng)計數(shù)據(jù)庫的讀寫比例為10:1嘿悬,由此可見查詢是有多么重要实柠。
為了滿足各種復雜的需求,我們也需要寫出各種復雜的sql善涨,所以難度系數(shù)最高的也是查詢窒盐。- 簡單的查詢
select * from t1;
從數(shù)據(jù)表里獲取所有記錄,這里的*是一個通配符钢拧,即返回結果集里所有列 - 帶條件查詢where
select id,name from t1 where id = 1;
從t1表中查詢符合id=1行的id蟹漓,name - in操作符
in查詢某值是否在某條件里,相反的也有not in
select * from t1 where id in (select cid from t2 where name = 'test')
select 語句返回的結果集可以作為條件繼續(xù)查詢 - 多條件查詢 and源内,or
and 邏輯與 即兩邊的條件都符合才成立
or 邏輯或 即兩邊的條件只要滿足一個就成立
select * from meizi where name='lucy' or (height>160 and weight <= 120)
這里使用了一個算術優(yōu)先級牧牢,把括號內的內容做為一個整體條件 - 范圍匹配
select * from meizi where age between 18 and 30 ;
查找age在18~30之間的所有行,這里只能采用and操作符,不能使用or - null
select * from meizi address is null;
查找符合地址為null的數(shù)據(jù)
select * from meizi address is not null;
查找地址不為null的mz - 通配符
- "%" 匹配任意數(shù)目字符(包括零個字符)
- "_" 匹配任何單個字符
在sql中匹配模式中不能使用!=或者=來進行匹配塔鳍,而是使用like或not like比較操作符伯铣。
使用示例:
select * from t1 name like 'l%'
匹配所有name以l開頭的
select * from t1 name like '_ucy'
匹配所有name第一個字符為任意字符,并以ucy結尾
- 排序
排序使用order by對指定的列進行排序轮纫,使用 desc降序 asc升序 排序規(guī)則進行排序
select * from meizi order by age desc;
對age進行降序排序腔寡,最大的數(shù)值在最前面。如果不指定desc掌唾,則默認按asc升序進行排序
對多個列排序
select * from meizi order by age desc放前,name,height;
如果第一個列值相同糯彬,才會對二個列按指定的規(guī)則進行排序凭语,第三列同上
order by 可以對任何數(shù)據(jù)類型進行排序,varchar撩扒,text等類型 則按ascii碼表的值進行排序 - 聚合函數(shù)
mysql常用的聚合函數(shù)如下:- count(exrp) 返回指定列中非null值的個數(shù)
- avg(exrp) 返回指定列的平均值
- max(exrp) 返回指定列的最大值
- min(exrp) 返回指定列的最小值
- sum(exrp) 返回指定列的所有值的和
- 分組查詢
使用group by對指定列不同的值進行分組似扔,group by一般和聚合函數(shù)一起使用才有意義
使用group by有兩個要素- 出現(xiàn)在select后面的字段 要么是是聚合函數(shù)中的,要么就是group by 中的.
- 要篩選結果 可以先使用where 再用group by 或者先用group by 再用having
having和where都是對條件進行篩選,SQL語言中設定集合函數(shù)的查詢條件時使用having而不是where搓谆。通常情況下炒辉,having被放置在SQL命令的結尾處。
使用示例:
select age from t1 group by age;
select age,height from meizi where age >18 group by height having height > 165;
- 連接查詢
在sql中 分為三個連接- inner join 內連接(一般簡寫為join)泉手,獲取兩個表中字段匹配關系的記錄
- left join 左連接黔寇,獲取左表所有記錄,即使右表沒有對應匹配的記錄
- right join 右連接斩萌,與left join相反
這三種連接的使用方式都是相同的缝裤,只是連接后的取值方式略有差異
使用示例:
select * from t1 join t2 on t1.id = t2.pid
使用連接操符后如果沒有 on 的條件,會出現(xiàn)笛卡爾積 - 簡單的查詢
刪除
delete from t1;
這樣是刪除整個表里的數(shù)據(jù)颊郎,請謹慎使用倘是。
如果只是刪除指定的的數(shù)據(jù),使用where關鍵字后跟上根據(jù)查詢條件刪除袭艺。如:
delete from t1 where name = 'test';
刪除name等于test的所有行更新
更新數(shù)據(jù)表搀崭,使用update關鍵字,后面也需要跟上查詢條件進行更新猾编,否則是更新整個表
update t1 set name='czlyj' where id = 1;
更新所有符合id=1行
注:執(zhí)行更新和刪除操作時瘤睹,尤其要謹慎,一但操作失誤答倡,數(shù)據(jù)也無法恢復轰传,所以盡量使用唯一的條件去匹配,避免照成不必要的損失瘪撇。