目錄
- MySQL 基礎(chǔ)常用命令
- 1. SQL語句
- 2. 建表
- 3.字段屬性
- 4.修改表:alter table
- 5. 增刪改查:字符串全部使用''包起來
- 6. 子句
- 7.limit分頁
- 8.去重
- 9.聚合函數(shù)
- 10.拼接
- 11.日期函數(shù)
- 12. 數(shù)組計算
- 13.排序
- 14. group by 分組
MySQL 基礎(chǔ)常用命令
注意:MySQL在centos中安裝的是5.7版本的,編輯MySQL時會有個報錯,需要執(zhí)行:
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語句
每個命令執(zhí)行結(jié)束加分號結(jié)束
- 查詢所有數(shù)據(jù)庫:show databases;
- 切換數(shù)據(jù)庫:use 庫命名;
- 創(chuàng)建數(shù)據(jù)庫:create database [IF NOT EXISTS] 庫名;
- 刪除數(shù)據(jù)庫:drop database [IF EXISTS] 庫名;
- 查詢數(shù)據(jù)庫創(chuàng)建:show 建庫語句;
- 指定數(shù)據(jù)庫采用的字符集:CHARACTER SET
- 修改數(shù)據(jù)庫的編碼集:alter database 數(shù)據(jù)庫名 CHARACTER SET 編碼集;
注意:不要修改mysql服務(wù)器的編碼集,表的編碼集默認(rèn)和庫一致
2. 建表
格式:
- create table [if not exists] 表名(
- 字段1 數(shù)據(jù)類型 字段屬性,
- 字段2 數(shù)據(jù)類型 字段屬性,...
- 字段N 數(shù)據(jù)類型 字段屬性
- )engine=引擎 default charset=編碼集;
- 查看當(dāng)前數(shù)據(jù)庫:select database();
- 查看建表語句:show create table 表名;
- 查看表結(jié)構(gòu):desc 表名;
- 刪除:drop table [if exists] 表名;
3.字段屬性
- not null:沒給值數(shù)據(jù)為默認(rèn)值(varchar默認(rèn)值為空
- AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會自動加1
- PRIMARY KEY關(guān)鍵字用于定義列為主鍵,您可以使用多列來定義主鍵,列間以逗號分隔
- ENGINE 設(shè)置存儲引擎,CHARSET 設(shè)置編碼
- default null:沒給值數(shù)據(jù)就是null
- default 值:設(shè)置字段的默認(rèn)值
注意:主鍵不重復(fù)的列
這里我們建立一個student表:
create table if not EXISTS student (
id int auto_increment,
`name` VARCHAR(32),
age int,
sex char(1),
clazz VARCHAR(32)) charset utf8;
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 字段 字段數(shù)據(jù)類型 屬性;
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 舊字段 新字段 數(shù)據(jù)類型 屬性;
alter table student change clazz clazz varchar(255);
alter table student change age score double;
修改字段:alter table 表名 modify 字段 數(shù)據(jù)類型 屬性;
alter table student MODIFY varchar(356); #這里不能比之前的空間小
注意:
- change:修改所有(字段名,數(shù)據(jù)類型,屬性)
- modify:修改一部分(數(shù)據(jù)類型,屬性)
- 修改數(shù)據(jù)類型時,varchar->int元數(shù)據(jù)會變?yōu)?
5. 增刪改查:字符串全部使用''包起來
5.1 增
格式:
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 刪
-- 刪除delete from 表名 where 子句;
delete from student where job='c';
5.3 改
-- 改update 表名 set 字段1=值1,字段2=值2...字段N=值N where 子句;
update student set job='b'where name ='ls';
5.4 查
-- 查select 字段 from 表名 where 子句;
select * from student ; #查詢?nèi)?
SELECT id as di,name,job,score from student where score>18; #特定查詢,并且展示特定的表 as:表示改字段名稱(原來的表不發(fā)生變化)
注意:表示所有字段
6. 子句
- > = >= = > 大于、小于、大于(小于)等于、不等于
- between ...and... 顯示在某一區(qū)間的值(含頭含尾)
- in(set) 顯示在in列表中的值,例:in(100,200)只能匹配100或200
- like '張_' 模糊查詢 使用% 和 _(%表示匹配所有 _匹配一個)
- Is null 判斷是否為空
- and 多個條件同時成立
- or 多個條件任一成立
- not 不成立,例:where not(expection>10000);
-- > = >= = != 大于、小于、大于(小于)等于、不等于
SELECT * from student WHERE id>1006;
SELECT * from student WHERE id!=1006;
--between ...and... 顯示在某一區(qū)間的值(含頭含尾)
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 開始下標(biāo),長度;
-- limit分頁 語句 limit 開始下標(biāo),長度;注意:沒有where
select * from student LIMIT 1,2;
select * from student LIMIT 0,2;
select * from student LIMIT 2;
注意:
如果數(shù)據(jù)量不夠,顯示全部
8.去重
格式:
DISTINCT 字段1,字段2...字段N
-- 去重 DISTINCT 字段1,字段2...字段N
select DISTINCT name from student;
select count(DISTINCT name) from student;
注意:
字段不能在DISTINCT之前,只能在DISTINCT后面
DISTINCT之后有多個字段,按照所有字段進(jìn)行去重
9.聚合函數(shù)
- count(字段):求多少行數(shù)據(jù)
- sum(字段):求和
- avg(字段):平均數(shù)
- max(字段):最大值
- min(字段):最小值
注意:
- varchar能比較大小,不能獲取avg(沒有任何意義)
- 如果值為Null不參與計算
- sum和avg字段的數(shù)據(jù)不是數(shù)值,結(jié)果都是0
-- count(字段):求多少行數(shù)據(jù)
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(字段):平均數(shù)
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,...)
-- 格式一: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.日期函數(shù)
獲取當(dāng)前日期:
current_timest--所有
current_timestamp();--所有
CURRENT_DATE();-- 年月日
CURRENT_DATE;-- 年月日
CURRENT_TIME();-- 時分秒
CURRENT_TIME;-- 時分秒
-- 獲取當(dāng)前日期:
-- current_timest--所有
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;
時間轉(zhuǎn)str
格式:
date_format(date,format)
date:時間
format:格式
str轉(zhuǎn)日期
格式:
str_to_date(str,formaat)
SELECT * FROM date;
-- 時間轉(zhuǎn)str
-- 格式:
-- date_format(date,format)
-- date:時間
-- format:格式
select DATE_FORMAT('2021-09-01','%Y~%m~%d');
-- str轉(zhuǎn)日期
-- 格式:
-- str_to_date(str,formaat)
SELECT STR_TO_DATE('2021-09-01','%Y-%m-%d');
日期相減
格式:
datediff(expr1,expr2);
注意:只能相減年月日,時分秒?yún)⑴c運(yùn)算結(jié)果為null
datediff(expr1,expr2);
-- 注意:只能相減年月日,時分秒?yún)⑴c運(yùn)算結(jié)果為null
SELECT DATEDIFF('2021-09-09','2021-09-01');
函數(shù)向日期添加指定的時間間隔
格式:
DATE_ADD(date,INTERVAL expr unit);
date:時間
INTERVAL:關(guān)鍵字
expr:間隔的數(shù)值
unit:年月日時分秒(..,...,day,..,..,..)
SELECT DATE_ADD('2021-09-09',INTERVAL +10 YEAR);
SELECT DATE_ADD('2021-09-09',INTERVAL +10 DAY);
12. 數(shù)組計算
round(x,d):四舍五入
x:值
d:保留幾位小數(shù)點
ceil(x):向上取整
floor(x):向下取整
rand():隨機(jī)數(shù)(0-1之間)
-- 數(shù)組計算
-- round(x,d):四舍五入
-- x:值
-- d:保留幾位小數(shù)點
SELECT ROUND(1.3,2); #2表示保留幾位小數(shù)
-- ceil(x):向上取整
SELECT ceil(1.2);
-- floor(x):向下取整
SELECT floor(1.2);
-- rand():隨機(jī)數(shù)(0-1之間)
SELECT rand();
13.排序
格式:
order by 字段1 asc|desc,字段2 asc|desc...字段n asc|desc;
SELECT * from student ORDER BY score,job;
SELECT * from student ORDER BY score desc, job desc;
注意:
- 默認(rèn)升序asc,降序desc
- 如果有多個字段,按照先后順序依次排序
14. group by 分組
格式:
group by 字段1,字段2...字段n;
注意:
- 多個字段,按照所有字段進(jìn)行分組(一起分組)
- 有多少組顯示多少條數(shù)據(jù)(默認(rèn)情況下,沒有經(jīng)過條件篩選)
- 組顯示的數(shù)據(jù)為每組中默認(rèn)第一條數(shù)據(jù)
- by 通常和聚合函數(shù)一起使用
select max(score) as c from student where score=c;
select max(score) as c from student having score=c;
兩個都不能運(yùn)行
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'; # 可以運(yùn)行
--select id,name,sex from student having job='a'; #不能運(yùn)行(顯示了之后就沒有job)
-- 執(zhí)行過程是 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到的數(shù)據(jù)進(jìn)行篩選;
having是對表中selec顯示數(shù)據(jù)進(jìn)行曬選;
到此這篇關(guān)于MySQL 基礎(chǔ)常用命令總結(jié)的文章就介紹到這了,更多相關(guān)MySQL常用命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- MySQL命令無法輸入中文問題的解決方式
- MySQL命令行操作時的編碼問題詳解
- MySQL source命令的使用簡介
- mysql常用sql與命令之從入門到刪庫跑路
- mysql利用mysqlbinlog命令恢復(fù)誤刪除數(shù)據(jù)的實現(xiàn)
- MySQL存儲過程的查詢命令介紹
- MySQL數(shù)據(jù)庫自動補(bǔ)全命令的三種方法
- mysql密碼中有特殊字符&在命令行下登錄的操作
- Mysql桌面工具之SQLyog資源及激活使用方法告別黑白命令行
- mysql的登陸和退出命令格式
- MySQL如何使用授權(quán)命令grant