mysql那些事

lonecloud發表於2016-12-28

---恢復內容開始---

登入

 1 >mysql -uroot -p1234 

mysql登入 -u+使用者 -p 密碼

顯示資料庫

 1 show databases; 

使用某個資料庫

 1 use xxx; 

顯示資料庫表

 1 show tables 

顯示錶結構

 1 show columns form xxx;//表名 

select選擇

使用distinct來輸出MYsql只返回不同的值

 1 select distinct email from user//必須放在這個欄位的前面 

部分不能使用這個關鍵字(這個關鍵字用於可以用於所有列)除非指定的兩個列都不同,否則所有的行都被檢索出來

limit限制結果


 1 select id from user limit 5,10 

第一個引數為下標從幾個開始,從下標為0開始

第二個引數為要檢索的行數

排序:(asc 正序 desc 逆序)

 1 select id from user order by id limit 0,10 

必須先進行排序後進行限制結果不然會報錯的

is null和=null的區別

按照ANSI SQL標準,下面的兩個查詢都不返回任何行:

查詢一: SELECT * FROM test WHERE data=NULL

查詢二: SELECT * FROM test WHERE data<>NULL

詳細:http://blog.csdn.net/freshlover/article/details/8973266

where中的not關鍵字很有用在複雜的語句中

 1 select * from user where id not in(12,13); 

Like的萬用字元的進行過濾

select * from user where name LIKE 'a%';

注意在這裡面的字元是區分大小寫的,%代表可以出任意次數。

 1 select * from user where name LIKE 'a_'; 

_代表一個字元匹配!

mysql 使用concat來對字元進行連線

 1 select concat(id,'(',name,')') from t_user; 

mysql 中如果使用時間作為查詢條件的話,最好使用Date()函式來修飾這個時間欄位

 1 select * from t_user where Date(someTime)='2016-01-01'; 

因為如果你的資料庫的時間是timeStamp型別的話帶有時分秒會導致其檢索失敗;

group By分組查詢

1 select count(id) as c,position as  p  from t_user group by position having c >10;

相關組查詢中having組查詢中的篩選條件,

select 的順序

  From 檢索的表

  where 查詢條件(行級過濾)

  group BY 分組說明

  having 組級過濾

  order by 輸出排序的順序

  Limit 要檢索的行數

利用where語句進行多表查詢

 1 select m.sendto,u.name from t_mail as m,t_user as u where m.senderid=u.id group by u.id; 

利用內聯

---恢復內容結束---

登入

 1 >mysql -uroot -p1234 

mysql登入 -u+使用者 -p 密碼

顯示資料庫

 1 show databases; 

使用某個資料庫

 1 use xxx; 

顯示資料庫表

 1 show tables 

顯示錶結構

 1 show columns form xxx;//表名 

select選擇

使用distinct來輸出MYsql只返回不同的值

 1 select distinct email from user//必須放在這個欄位的前面 

部分不能使用這個關鍵字(這個關鍵字用於可以用於所有列)除非指定的兩個列都不同,否則所有的行都被檢索出來

limit限制結果


 1 select id from user limit 5,10 

第一個引數為下標從幾個開始,從下標為0開始

第二個引數為要檢索的行數

排序:(asc 正序 desc 逆序)

 1 select id from user order by id limit 0,10 

必須先進行排序後進行限制結果不然會報錯的

is null和=null的區別

按照ANSI SQL標準,下面的兩個查詢都不返回任何行:

查詢一: SELECT * FROM test WHERE data=NULL

查詢二: SELECT * FROM test WHERE data<>NULL

詳細:http://blog.csdn.net/freshlover/article/details/8973266

where中的not關鍵字很有用在複雜的語句中

 1 select * from user where id not in(12,13); 

Like的萬用字元的進行過濾

select * from user where name LIKE 'a%';

注意在這裡面的字元是區分大小寫的,%代表可以出任意次數。

 1 select * from user where name LIKE 'a_'; 

_代表一個字元匹配!

mysql 使用concat來對字元進行連線

 1 select concat(id,'(',name,')') from t_user; 

mysql 中如果使用時間作為查詢條件的話,最好使用Date()函式來修飾這個時間欄位

 1 select * from t_user where Date(someTime)='2016-01-01'; 

因為如果你的資料庫的時間是timeStamp型別的話帶有時分秒會導致其檢索失敗;

group By分組查詢

1 select count(id) as c,position as  p  from t_user group by position having c >10;

相關組查詢中having組查詢中的篩選條件,

select 的順序

  From 檢索的表

  where 查詢條件(行級過濾)

  group BY 分組說明

  having 組級過濾

  order by 輸出排序的順序

  Limit 要檢索的行數

利用where語句進行多表查詢

 1 select m.sendto,u.name from t_mail as m,t_user as u where m.senderid=u.id group by u.id; 

利用內聯 使用inner join on進行內聯

1 select m.sendto,u.name from t_mail as m Inner join t_user as u on  m.senderid=u.id group by u.id;

外聯 查詢那些和他沒相關的資訊也就是另一張表為空

左外聯

1 select m.sendto,u.name from t_mail as m left outer join t_user as u on  m.senderid=u.id group by u.id;

右外聯

1 select m.sendto,u.name from t_mail as m right outer join t_user as u on  m.senderid=u.id group by u.id;

這兩種的外連線的區別的是left是以左邊的表為主列出他的所有的行,與右邊的表進行匹配

內聯和外聯的區別是

是不是將沒有關聯的欄位加入

插入資料

 1 insert into user values(1,'a');//需要插入該表的所有的欄位的資料 

不推薦 使用上面的用法

最好是使用指定列名

1 insert into user(id,name) values(1,'a');//指定列名可以保證資料表結構改變了也可以正常執行

多條資料插入(用,分隔)

1 insert into user(id,name) values(1,100),(2,300);

插入檢索出來的資料

 1 insert into user(id,name) select id ,name from user 

建立一個表

1 CREATE TABLE info(
2         id int not null primary key AUTO_INCREMENT,
3         content char(50)
4 )

刪除表

 1 drop table user; 

重新命名

 1 rename table info to info2; 

事務

start TRANSACTION//開啟事務
    insert into info2(id ,name) values(1,'2');
commit;//提交

 

相關文章