MySQL 基礎常用命令
注意:MySQL在centos中安裝的是5.7版本的,編輯MySQL時會有個報錯,需要執行:
1
|
set @@ global .sql_mode= 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ; |
1. SQL語句
每個命令執行結束加分號結束
- 查詢所有數據庫:show databases;
- 切換數據庫:use 庫命名;
- 創建數據庫:create database [IF NOT EXISTS] 庫名;
- 刪除數據庫:drop database [IF EXISTS] 庫名;
- 查詢數據庫創建:show 建庫語句;
- 指定數據庫采用的字符集:CHARACTER SET
- 修改數據庫的編碼集:alter database 數據庫名 CHARACTER SET 編碼集;
注意:不要修改mysql服務器的編碼集,表的編碼集默認和庫一致
2. 建表
格式:
- create table [if not exists] 表名(
- 字段1 數據類型 字段屬性,
- 字段2 數據類型 字段屬性,...
- 字段N 數據類型 字段屬性
- )engine=引擎 default charset=編碼集;
- 查看當前數據庫:select database();
- 查看建表語句:show create table 表名;
- 查看表結構:desc 表名;
- 刪除:drop table [if exists] 表名;
3.字段屬性
- not null:沒給值數據為默認值(varchar默認值為空
- AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數值會自動加1
- PRIMARY KEY關鍵字用于定義列為主鍵,您可以使用多列來定義主鍵,列間以逗號分隔
- ENGINE 設置存儲引擎,CHARSET 設置編碼
- default null:沒給值數據就是null
- default 值:設置字段的默認值
注意:主鍵不重復的列
這里我們建立一個student表:
1
2
3
4
5
6
|
create table if not EXISTS student ( id int auto_increment, ` name ` VARCHAR (32), age int , sex char (1), clazz VARCHAR (32)) charset utf8; |
1
2
3
4
5
6
7
8
|
insert into student values (1001, 'zs' ,18, '男' , '一班' ); insert into student values (1002, 'ls' ,19, '女' , '二班' ); insert into student(` name `,age,sex,clazz) values ( 'ww' ,69, '男' , '一班' ); insert into student(` name `,age,sex,clazz) values ( 'we' ,21, '女' , '二班' ); insert into student(` name `,age,sex,clazz) values ( 'ld ' ,23, '男' , '一班' ); insert into student(` name `,age,sex,clazz) values ( 'lq' ,45, '女' , '二班' ); insert into student(` name `,age,sex,clazz) values ( 'lwq' ,23, '男' , '一班' ); insert into student(` name `,age,sex,clazz) values ( 'ld' ,12, '女' , '二班' ); |
4.修改表:alter table
修改表名:alter(rename) table 舊表名 to 新表名;
rename table student1 TO `student`;
添加字段:alter table 表名 add 字段 字段數據類型 屬性;
1
2
3
4
5
6
|
alter table student add job varchar (32) default '沒有工作' ; insert into student (job) VALUES ( 'a' ); insert into student (job) VALUES ( 'b' ); insert into student (job) VALUES ( 'c' ); insert into student (job) VALUES ( 'a' ); insert into student (job) VALUES ( 'b' ); |
修改字段:alter table 表名 change 舊字段 新字段 數據類型 屬性;
1
2
|
alter table student change clazz clazz varchar (255); alter table student change age score double ; |
修改字段:alter table 表名 modify 字段 數據類型 屬性;
1
|
alter table student MODIFY varchar (356); #這里不能比之前的空間小 |
注意:
- change:修改所有(字段名,數據類型,屬性)
- modify:修改一部分(數據類型,屬性)
- 修改數據類型時,varchar->int元數據會變為0
5. 增刪改查:字符串全部使用''包起來
5.1 增
格式:
1
2
3
4
5
6
7
8
9
|
insert into 表名(字段) values (值),(值)...(值); insert into student values (1001, 'zs' ,18, '男' , '一班' ); insert into student values (1002, 'ls' ,19, '女' , '二班' ); insert into student(` name `,age,sex,clazz) values ( 'ww' ,69, '男' , '一班' ); insert into student(` name `,age,sex,clazz) values ( 'we' ,21, '女' , '二班' ); insert into student(` name `,age,sex,clazz) values ( 'ld ' ,23, '男' , '一班' ); insert into student(` name `,age,sex,clazz) values ( 'lq' ,45, '女' , '二班' ); insert into student(` name `,age,sex,clazz) values ( 'lwq' ,23, '男' , '一班' ); 10 insert into student(` name `,age,sex,clazz) values ( 'ld' ,12, '女' , '二班' ); |
5.2 刪
1
2
|
-- 刪除delete from 表名 where 子句; delete from student where job= 'c' ; |
5.3 改
1
2
|
-- 改update 表名 set 字段1=值1,字段2=值2...字段N=值N where 子句; update student set job= 'b' where name = 'ls' ; |
5.4 查
1
2
3
|
-- 查select 字段 from 表名 where 子句; select * from student ; #查詢全部 SELECT id as di, name ,job,score from student where score>18; #特定查詢,并且展示特定的表 as :表示改字段名稱(原來的表不發生變化) |
注意:表示所有字段
6. 子句
- > < <= >= = <> 大于、小于、大于(小于)等于、不等于
- between ...and... 顯示在某一區間的值(含頭含尾)
- in(set) 顯示在in列表中的值,例:in(100,200)只能匹配100或200
- like '張_' 模糊查詢 使用% 和 _(%表示匹配所有 _匹配一個)
- Is null 判斷是否為空
- and 多個條件同時成立
- or 多個條件任一成立
- not 不成立,例:where not(expection>10000);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
-- > < <= >= = != 大于、小于、大于(小于)等于、不等于 SELECT * from student WHERE id>1006; SELECT * from student WHERE id!=1006; --between ...and... 顯示在某一區間的值(含頭含尾) select id, name ,job from student where id BETWEEN 1002 and 1005; select * from student where job BETWEEN 'a' and 'b' ; -- in(set) 顯示在in列表中的值,例:in(100,200)只能匹配100或200 select * from student where job in ( 'a' , 'b' ); -- like '張_' 模糊查詢 使用% 和 _(%表示匹配所有 _匹配一個) SELECT * from student where name like 'l%' ; SELECT * from student where name like 'l_' ; select * from student where name is not null ; |
7.limit分頁
格式:
語句 limit 開始下標,長度;
1
2
3
4
|
-- limit分頁 語句 limit 開始下標,長度;注意:沒有where select * from student LIMIT 1,2; select * from student LIMIT 0,2; select * from student LIMIT 2; |
注意:
如果數據量不夠,顯示全部
8.去重
格式:
DISTINCT 字段1,字段2...字段N
1
2
3
|
-- 去重 DISTINCT 字段1,字段2...字段N select DISTINCT name from student; select count ( DISTINCT name ) from student; |
注意:
字段不能在DISTINCT之前,只能在DISTINCT后面
DISTINCT之后有多個字段,按照所有字段進行去重
9.聚合函數
- count(字段):求多少行數據
- sum(字段):求和
- avg(字段):平均數
- max(字段):最大值
- min(字段):最小值
注意:
- varchar能比較大小,不能獲取avg(沒有任何意義)
- 如果值為Null不參與計算
- sum和avg字段的數據不是數值,結果都是0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-- count(字段):求多少行數據 select count (*) from student; select count ( name ) from student; -- sum(字段):求和 select sum (score) from student; select sum (job) FROM student; select name +score as sum FROM student; #score的值 SELECT name *score as cheng FROM student; #0 -- avg(字段):平均數 SELECT avg (score) FROM student; -- max(字段):最大值 SELECT max (score) FROM student; SELECT max (job) FROM student; #c -- min(字段):最小值 SELECT min (score) FROM student; |
10.拼接
格式1
concat(str1,str2...)
格式2:
concat_WS(separator,str1,str2,...)
1
2
3
4
|
-- 格式一:concat(str1,str2...) select CONCAT(id, '-' , name ) as pj FROM student; -- 格式二:concat_WS(str1,str2...) SELECT CONCAT_WS( '~' ,id, name ,score,job) FROM student; #中間以~隔開 |
11.日期函數
獲取當前日期:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
current_timestamp ; --所有 current_timestamp (); --所有 CURRENT_DATE (); -- 年月日 CURRENT_DATE ; -- 年月日 CURRENT_TIME (); -- 時分秒 CURRENT_TIME ; -- 時分秒 -- 獲取當前日期: -- current_timestamp;--所有 SELECT CURRENT_TIMESTAMP from student; -- current_timestamp();--所有 SELECT CURRENT_TIMESTAMP () from student; -- CURRENT_DATE();-- 年月日 select CURRENT_DATE () from student; -- CURRENT_DATE;-- 年月日 select CURRENT_DATE from student; -- CURRENT_TIME();-- 時分秒 SELECT CURRENT_TIME () FROM student; -- CURRENT_TIME;-- 時分秒 SELECT CURRENT_TIME FROM student; |
時間轉str
格式:
date_format(date,format)
date:時間
format:格式
str轉日期
格式:
str_to_date(str,formaat)
1
2
3
4
5
6
7
8
9
10
11
|
SELECT * FROM date ; -- 時間轉str -- 格式: -- date_format(date,format) -- date:時間 -- format:格式 select DATE_FORMAT( '2021-09-01' , '%Y~%m~%d' ); -- str轉日期 -- 格式: -- str_to_date(str,formaat) SELECT STR_TO_DATE( '2021-09-01' , '%Y-%m-%d' ); |
日期相減
格式:
datediff(expr1,expr2);
注意:只能相減年月日,時分秒參與運算結果為null
1
2
3
|
datediff(expr1,expr2); -- 注意:只能相減年月日,時分秒參與運算結果為null SELECT DATEDIFF( '2021-09-09' , '2021-09-01' ); |
函數向日期添加指定的時間間隔
格式:
DATE_ADD(date,INTERVAL expr unit);
date:時間
INTERVAL:關鍵字
expr:間隔的數值
unit:年月日時分秒(..,...,day,..,..,..)
1
2
|
SELECT DATE_ADD( '2021-09-09' ,INTERVAL +10 YEAR ); SELECT DATE_ADD( '2021-09-09' ,INTERVAL +10 DAY ); |
12. 數組計算
round(x,d):四舍五入
x:值
d:保留幾位小數點
ceil(x):向上取整
floor(x):向下取整
rand():隨機數(0-1之間)
1
2
3
4
5
6
7
8
9
10
11
12
|
-- 數組計算 -- round(x,d):四舍五入 -- x:值 -- d:保留幾位小數點 SELECT ROUND(1.3,2); #2表示保留幾位小數 -- ceil(x):向上取整 SELECT ceil(1.2); -- floor(x):向下取整 SELECT floor(1.2); -- rand():隨機數(0-1之間) SELECT rand(); |
13.排序
格式:
order by 字段1 asc|desc,字段2 asc|desc...字段n asc|desc;
1
2
|
SELECT * from student ORDER BY score,job; SELECT * from student ORDER BY score desc , job desc ; |
注意:
- 默認升序asc,降序desc
- 如果有多個字段,按照先后順序依次排序
14. group by 分組
格式:
group by 字段1,字段2...字段n;
注意:
- 多個字段,按照所有字段進行分組(一起分組)
- 有多少組顯示多少條數據(默認情況下,沒有經過條件篩選)
- 組顯示的數據為每組中默認第一條數據
- by 通常和聚合函數一起使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
select max (score) as c from student where score=c; select max (score) as c from student having score=c; 兩個都不能運行 SELECT count (*),job,` name `,id as c from student GROUP BY sex where c>2; #錯誤 SELECT count (*) as c,job,` name `,id from student GROUP BY sex HAVING c>2; -- select id,name,sex from student where job='a'; # 可以運行 --select id,name,sex from student having job='a'; #不能運行(顯示了之后就沒有job) -- 執行過程是 from-where-select-having -- select count(*) c from student where c>1; -- 不行 -- select count(*) c from student having c>1;-- 行 select count (*) c,sex from student group by sex where sex= '男' ; select count (*) c,sex from student group by sex having sex= '男' ; --where having 一起使用 SELECT count (*) as c, name ,id FROM student where sex= '男' HAVING c>3; where 是對表中 from 到的數據進行篩選; having 是對表中selec顯示數據進行曬選; |
到此這篇關于MySQL 基礎常用命令總結的文章就介紹到這了,更多相關MySQL常用命令內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://www.cnblogs.com/lmandcc/p/15228773.html