1. 程式人生 > >mysql基礎語句

mysql基礎語句

列名 alter prim having utf8 str uniq list color

個人總結的mysql基礎語句(包括視圖、函數、子句等)

很多初學者可能跟我一樣在剛接觸SQL語句的時候想勤加練習卻總是忘記語句格式,為了解決這個讓人非常惱火的事情所以我決定,盡可能將所有的 ddl dml dql dcl 語句包括MySQL函數詳細的列出來,以供後來的新手們學習。

話不多說 讓我們進入到 MySQL的世界

--進入mysql
mysql -u root -p

--停止mysql
net stop mysql

--開啟mysql
net start mysql

--ddl 數據定義語言 create alter drop
--dml數據操作語言 update delete insert
--dql數據查詢語言 select
--dcl數據控制語言 savepoint commit rollback grant revoke

--創建數據庫
create database shop character set utf8 collate utf8_general_ci;

--刪除數據庫
drop database shop;

--查看當前數據庫鏈接進程情況
show processlist;

--修改數據庫 *只能修改字符集或者校驗規則*
alter database shop character set gbk collate gbk_general_ci;

--備份數據庫
--在默認指令下
mysqldump -u root -p shop>c:/mysql.sql

--恢復數據庫 *單庫*


①create database shop1;
②use shop1;
--在mysql指令下
③source c:/mysql.sql;
④show tables; -- *查看數據是否完整*

--備份指定數據庫的某張表
mysqldump -u root -p shop(數據庫名) goods(表名)>c:/mysql_goods.bak

--恢復表 *跟單庫恢復一樣*
source c:/mysql_goods.bak;

--一次備份多個庫
mysqldump -u root -p -B shop(數據庫一) shop1(數據庫二) > c:/mysql.bak

--恢復多個庫備份


source c:/mysql.bak;

--創建表
create table goods(
id int not null unsigned auto_increment default 0 primary key
name varchar(32) not null,
class_id int(6) zerofill
)character set utf8 engine=myisam;

--enum(枚舉) set(集合)
create table people(
id int not null unsigned auto_increment default 0 ,
name varchar(32) not null,
sex enum(‘男‘,‘女‘) not null,
hobby set(‘打球‘,‘玩遊戲‘,‘跑步‘,‘開車‘) not null
)character set utf8 engine = innodb;

--添加數據
insert into people values(1,"張三","男","玩遊戲,開車,跑步");

--set enum數據查找
select * from shop where sex="男";
select * from shop where find_in_set(‘泡妞‘,hobby);

--存放 圖片 視頻 音頻等文件
create table shop2(
img varchar(64) not null "/imgs/01.jpg"
)charset=utf8 engine=innodb;

--插入
insert into shop2 values(‘imgs/abc.jpg‘);

--創建一張學生信息表
create table stu_info(
id int unsigned not null auto_increment default 0,
name varchar(32) not null,
sex enum(‘男‘,‘女‘,‘不知道‘) not null,
brithday date not null,
entry_day date not null,
job varchar(32) not null,
salary decimal(10,2) not null,
resume text not null
)charset=utf8 engine=innodb;

--********************************** mysql 用戶管理 ***************************************
create user "用戶名"@"主機名" identified by "密碼" 創建mysql用戶
drop user "用戶名"@"主機名"; 刪除用戶
set password = password("密碼"); 給自己修改密碼
set password for "用戶名"@"主機名" = password("密碼"); 給別人修改密碼

grant 權限列表 on 庫.表名 to "用戶名"@"主機名" ; 給權限
revoke 權限列表 on 庫.表名 from "用戶名"@"主機名" 回收權限
show grant for "用戶名"@"主機名"; 查看有什麽權限

--************************************ 視圖***************************************
create view 視圖名 as select 語句 創建視圖
drop view 視圖名 刪除視圖
alter view 視圖名 as select 語句 修改視圖
--********************************** 表 ***************************************
--修改表
--修改表之增加列 *後可跟 after 排在那個列之後*
alter table stu_info(表名) add hobby(新加列名) set(‘遊泳‘,‘戲水‘,‘跳舞‘) not null after sex ;
--修改表之刪除列
alter table stu_info(表名) drop hobby(列名);
--修改表之修改列
alter table stu_info(表名) change hobby(舊列名) hob(新列名) set(‘賭博‘,‘抽煙‘) not null;
--修改表之增加主鍵
alter table stu_info(表名) add primary key (增加主鍵的列);
--修改表之刪除主鍵
alter table stu_info drop primary key;
--修改表之刪除外鍵
alter table stu_info drop foreign key(外鍵名);
--修改表之增加索引
alter table stu_info add (index/unique) (索引名/列名);
--修改表之刪除索引
alter table stu_info drop index (索引名);
--修改表之清空表數據
truncate table stu_info;
--修改表之更改表名
rename table stu_info to stu;
--修改表之更改字符集
alter table stu_info charset = gbk;

--查看表結構
desc stu_info;
show create table stu_info;


--********************************** 數據 ***************************************
--添加數據
insert into stu_info values(1,"張三","男","吃飯,打架",‘2016-03-04‘,‘2014-03-04‘,‘能吃能打能睡覺‘);
--修改數據
update stu_info(表名) set name="李四"(修改的字段/值) where(通過條件找到更改的數據) id =1 ;
--刪除數據
delete from stu_info(表名) where(通過條件找到刪除的數據列) id = 1;
--查詢數據
select distinct(去重復) * from stu_info;

--查詢數據可以帶運算
select (salary = salary*3) from goods;
--查詢數據可以起別名
select (salary = salary*3) as sal from goods;
--查詢數據可以有函數
select avg(salary) as avg_sal from goods;


--********************************** where子句 ***************************************
--條件過濾
select * from stu_info where id =1;
--可以使用and or not
select * from goods where sal > 1500 and id <4;
select * from goods where sal>500 or sal <2000;
select * from goods where not (sal > 100);
--可以使用 between ... and ... 顯示某一區間的值
select sal from goods where sal between 500 and 2000;

--********************************** order by子句 ***************************************
--排序 *desc 降序 asc 升序*
select * from stu order by yuwen;

--********************************** group by子句 ***************************************
--分組統計 *對於分組統計後的數據用having 過濾 *
select * from stu group by yuwen;

select deptno,avg(sal) as avg_sal from emp group by deptno having avg_sal<2000;

--********************************** like子句 ***************************************
--%表示任意0到多個字符
select * from stu where name like "王%";
-- _ 表示任意單個字符
select * from stu where name like "_三%";

--********************************** mysql函數 ***************************************

--********************************** 聚合函數 ***************************************
--count() *記錄滿足條件的記錄數 count(*)統計所有 count(列名) 不會統計null值*
select count(*) from stu;
select count(*) from stu where yuwen>50;

--sum() *記錄總和 sum(列名) ()內不能用* null+任何值都為null *
select sum(yuwen) from stu;

--avg() *記錄平均值 ()內不能為* *
select avg(yuwen) from stu;

--max(最大值)/min(最小值)
select max(yuwen) from stu;
select min(yuwen) from stu;

--********************************** 日期函數 ***************************************

--current_date() *查詢當前日期 顯示年月日*
select current_date();
--current_time() *查詢當前時間 顯示時分秒*
select current_time();
--current_timestamp() *查詢當前時間戳 顯示當前年月日時分秒*
select current_timestamp();
--now() *獲取當前時間 顯示年月日時分秒*

--date *返回datetime的年月日部分*
date(datetime)
--date_add(date,interval val typ) *在date時間上加上val,typ是val的類型 可以是 年 月 日 時 分 秒*
date_add(now(),interval 10 day);
--date_sub(date,interval val typ) *在date時間上減去val, typ是val的類型 可以是 年 月 日 時 分 秒*
date_sub(now(),interval 10 day);
--datediff(date1,date2) *date1和date2的差 返回值類型為 天*
datediff(now(), date_sub(now(),interval 10 day))

--timediff(date1,date2) *date1和date2的時間差 返回值是 多少時多少分多少秒*
timediff(now(),date_sub(now(),interval 10 minute));
--year/month/day/date(datetime) *返回 年/月/日/年-月-日*
year(now()); month(now()); day(now()); date(now());

--unix_timestamp() *返回一個 1970-1-1 0:0:0 到現在時間的一個時間戳 秒*
select unix_timestamp();
--from_unixtime(val,格式) *將val轉換成一個你想要的時間格式 val是秒數,格式由程序員自己定 %Y-%m-%d %h-%i-%s *
select from_unixtime(unix_timestamp(),‘%Y-%m-%d‘);

--********************************** 字符串函數 ***************************************
--charset(str) *返回字符集*
select charset(‘abc‘);
--concat(str str str) *鏈接字符串*
select concat(name,"語文分數是",yuwen) from stu_info;
--ucase(str)/lcase(str) *轉換成大寫/小寫*
ucase("abc"); lcase("ABC");
--length(str) *計算str的長度 單位 字符*
length(‘abc‘)
--replace(str,str1,str2) *把str裏面的str1換成str2*
replace("abc",b,d);
--substring(str,val,val2) *在str裏 從val開始截取val2個字符 val,val2為整數*
substring("abcdefg",2,4);

--********************************** 數學函數 ***************************************
--abs(int) *求int的絕對值*
abs(-90);
--ceiling(num) *向上求num的整數*
ceiling(34.1456); 35
--floor(num) *向下求num的整數*
floor(34.1456); 34
--format(num,val) *保留小數位數 val是小數後保留幾位*
format(78.329,2); 78.33
--mod(num1,num2) *求num1和num2的余數*
mod(10,3) 余 1
--rand() *返回一個隨機數 範圍是 0到1.0*
select floor(rand()*100);

--********************************** 流程控制函數 ***************************************
--if(ex1,ex2,ex3) *如果ex1為真那麽返回ex2否則返回ex3*
if(0==0,1,2);
--ifnull(ex1.ex2) *如果ex1不為null返回ex1 否則返回ex2*
ifnull(null,0);
--case when ex1 then ed1 else ed2 end *ex1為條件,ed為表達式*
select case
when sal<100 then sal*10
else sal
end

--********************************** 其他函數 ***************************************
--user() *查看當前用戶*
select user();
--database() *查看當前使用的是那個數據庫*
select database();
--md5() *加密方式*
md5("abc");
--password *加密方式*
password("abc");
--mysql_num_fields() *取得結果集中字段的數量*
--mysql_field_name() *取得結果中指定字段的字段名*

--********************************** limit 分頁查詢 ***************************************
--先設定好 每頁顯示的條數 $pagesize=10;
--在計算好從第幾條開始顯示 (你要取出第幾頁的數據 -1) * 每頁顯示的條數 $pagenow 代表你要取出第幾頁的數據
($pagenow-1)*$pagesize,$pagesize
select * from emp limit 8,4;

--********************************** 查詢加強--多表多條件查詢 ***************************************
--
select avg(sal),deptno
from emp
group by deptno;

--事物
--開啟事物
start transaction
-- 自動提交關閉
set autocommit=false;
--設置保存點
savepoint 名稱
--退回
rollback to 名稱

轉載請註明出處 原文博客:https://www.cnblogs.com/we-jack/p/8341120.html

mysql基礎語句