Mysql常用命令汇总
文章目錄
- 基本命令
- 連接數(shù)據(jù)庫
- 查看數(shù)據(jù)庫
- 使用數(shù)據(jù)庫
- 查看表
- 查看表結(jié)構(gòu)
- 顯示表的細節(jié)
- 修改用戶密碼
- 解決MySQL 5.5,出現(xiàn)亂碼問題
- 聲明字符集
- DDL
- 創(chuàng)建表
- 查看表中的結(jié)構(gòu)
- 修改表
- 添加表中的列
- 刪除表中的列
- 修改表中的列中屬性的數(shù)據(jù)類型
- 修改表名
- 修改表的字符集為gbk
- 修改表中的列名
- 刪除表:
- 重命名
- 創(chuàng)建主鍵
- DML
- 普通查詢
- 單表全字段查詢
- 單表個別字段查詢
- 多表查詢
- 條件查詢
- 單表條件查詢
- 多表條件查詢
- 嵌套查詢
- 并查詢
- 交查詢
- 插入
- 全字段插入
- 多全字段插入
- 個別字段插入
- 更新
- 刪除
- 刪除單個數(shù)據(jù)
- 刪除表中全部數(shù)據(jù),數(shù)據(jù)與結(jié)構(gòu)丟失
- 刪除表,數(shù)據(jù)丟失,結(jié)構(gòu)保留
- DQL
- 查詢指定列的數(shù)據(jù)
- 條件查詢
- 模糊查詢
- 對數(shù)據(jù)排序
- 升序(asc,默認)
- 降序(desc)
- 聚合函數(shù)
- 日期類型
- where 用法
- group用法
- having用法
- order by用法
- limit查詢結(jié)果數(shù)限制
- 索引
- 什么是索引
- 索引的優(yōu)點
- 索引的缺點
- 索引的類型
- 普通索引
- 唯一索引
- 主鍵索引
- 聚集索引
- 非聚集索引
- 索引舉例
- 刪除表數(shù)據(jù)drop、truncate和delete的用法
DDL(data definition language):數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象;創(chuàng)建庫、表、列等。 DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定義或改變表(TABLE)的結(jié)構(gòu),數(shù)據(jù)類型,表之間的鏈接和約束等初始化工作上,他們大多在建立表時使用
DCL(Data Control Language):數(shù)據(jù)控制語言,用來定義訪問權(quán)限和安全級別。 是數(shù)據(jù)庫控制功能。是用來設置或更改數(shù)據(jù)庫用戶或角色權(quán)限的語句,包括(grant,deny,revoke等)語句。在默認狀態(tài)下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人員才有權(quán)力執(zhí)行DCL
DQL :數(shù)據(jù)查詢語言,用來查詢數(shù)據(jù)。
基本命令
連接數(shù)據(jù)庫
mysql -u root -p查看數(shù)據(jù)庫
show databases;使用數(shù)據(jù)庫
use data_analysis;查看表
show tables;查看表結(jié)構(gòu)
desc table顯示表的細節(jié)
show create table 表名;
修改用戶密碼
方法一:
5.7以前:
5.7以后:
update user set authention_string=password('1234') where user='root' and Host = 'localhost';然后刷新MySQL的系統(tǒng)權(quán)限相關(guān)表:flush privileges;
方法二:
修改密碼,使用bin文件中的語句,前提是先配好壞境變量:
解決MySQL 5.5,出現(xiàn)亂碼問題
SET character_set_client =gbk; //設置客服端的編碼
SET character_set_results =gbk; //設置服務器端結(jié)果返回的編碼
SET character_set_connection =gbk; //設置客服端與服務端連接時的編碼
聲明字符集
set names 模式名;(字符集不同會報錯) set names gbk;DDL
創(chuàng)建表
create tables 表名(內(nèi)容) create table class( stu int, name varchar(20), age int );查看表中的結(jié)構(gòu)
desc 表名;
修改表
添加表中的列
alter table 表名 add 列名 數(shù)據(jù)類型;
alter table skt add(score int not null);刪除表中的列
alter table 表名 drop 列名;(若只剩最后一個字段則無法刪除)
alter table skt drop column score;修改表中的列中屬性的數(shù)據(jù)類型
alter table 表名 modify 屬性名(id) 數(shù)據(jù)類型;
修改表名
rename table 原表名 to 新表名;
修改表的字符集為gbk
alter table 表名 character set 字符集名稱;
修改表中的列名
alter table 表名 change 原始列名 新列名 數(shù)據(jù)類型;
alter table skt change name score int not null;刪除表:
drop table 表名;
重命名
alter table 舊表名 rename to 新表名;
創(chuàng)建主鍵
alter table 表名 add constraint 主鍵名 primary key(列名);
DML
在sql命令格式使用的先后順序上,group by先于order by。
普通查詢
select命令的標準格式如下:
SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression_r ]
[ HAVING search_condition ]
[ ORDER BY order_expression_r [ ASC | DESC ] ]
單表全字段查詢
查詢表中的所有數(shù)據(jù)
select * from 表名;
單表個別字段查詢
select 字段一,字段二 from 表名;
select username from t1;多表查詢
select 表一字段,表二字段,表三字段,…… from 表一,表二,表三,……;
select skt.username,skt.score,ig.sno from skt,ig;條件查詢
單表條件查詢
select 字段1,字段2 from 表名 where 條件;
select * from skt where socre>90;多表條件查詢
select 表一字段,表二字段 from 表一,表二 where 條件;
select skt.username,skt.score,ig.sno from skt,ig where skt.id=ig.id;嵌套查詢
select 字段一,字段二…… from 表名 where 條件(查詢);
select name from ig where id=(select id from skt where id=90);并查詢
(select id from skt )union(select id from ig);交查詢
select id from skt where id in (select id from ig);插入
全字段插入
insert into 表名 (id,Sname,Ssex) values (1,'xxx','male');
insert into msg (id,title,name,content) values (1,‘初來乍到’,‘張三’,‘我剛來’)多全字段插入
insert into 表名 (列1,列2...列N) values (值1,值2...值N);(允許一次插入多行,在內(nèi)容處增加)
個別字段插入
insert inton 表名(字段名) values(v1),(v2);
insert into skt(id) values(004);更新
update 表名 set 更改的字段名=值 where 條件;
把一個表中所有學生成績都改變?yōu)?90 :update 表名 set score 列名=90;
修改指定學生的成績:update 表名 set score=60 where name='zws';
修改指定學生的成績和年齡:
刪除
刪除單個數(shù)據(jù)
delete from 表名 where 列名=值; //單個數(shù)據(jù)
delete from ig where id=12;刪除表中全部數(shù)據(jù),數(shù)據(jù)與結(jié)構(gòu)丟失
delete from 表名; //表中全部數(shù)據(jù) 結(jié)構(gòu)丟失刪除表,數(shù)據(jù)丟失,結(jié)構(gòu)保留
truncate table 表名; //表中全部數(shù)據(jù) 空表DQL
查詢指定列的數(shù)據(jù)
select 列名1,列名2,···from 表名;
條件查詢
select * from 表名 where 列名=(>,>=,<,<=,!=)值 (and,or....);in(set) 固定的范圍值;模糊查詢
select * from 表名 where 列名 like '__'(幾個下劃線,表示幾個字母或數(shù)字);
模糊查詢:用到的詞:’‘like’’,’’%’’,"__".
“l(fā)ike”->像,"%"->通配任意字符,“_”->單個字符。
實例:
(1)查詢名字(可類比)有5個字符組成,并且第五個字符是b:
(2)查詢名字(可類比) 開頭是 z :
select * from 表名 where 列名 like 'z%';(% 表示后面的);(3)查詢名字中包含 z 的信息:
select * from 表名 where 列名 like '%z%';(4)查詢名字中第二個字母為 z 的信息:
select * from 表名 where 列名 like '_z%';(5)查詢單獨一個屬性的信息:
select 列名 from 表名; select *,age+score from 表名; select *,ifnull(age,0) + ifnull(score,0) as 別名 from student;//為空的變?yōu)榱?/span>(6)過濾重復的值
select distinct 列名 from 表名; //去掉重復的信息對數(shù)據(jù)排序
升序(asc,默認)
select * from 表名 order by 列名 (或asc); //默認是升序;降序(desc)
select * from 表名 order by 列名 desc; //降序 select * from 表名 order by 列名 desc,列名 desc;聚合函數(shù)
count(): 統(tǒng)計指定不為NULL的記錄行數(shù) ,count(字段名)不包含NULL;
select conut(*) from 表名;max():計算指定列的最大值,max(colunm)返回字母序最大的,返回數(shù)值最大的
select max(name) from skt;avg() :計算指定列的平均值,如果指定的列不是數(shù)值型,那么計算為0,對字符串和時間無效。
select avg(score) from skt;min():計算指定列的最小值,min(colunm)返回字母序最小值,返回數(shù)值最小值
select min(name) from skt;sum() :計算指定列的數(shù)值和,對字符串和時間無效
select sum(score) from t1;日期類型
year類型:eg.'2018'; data類型:eg.'1992-08-12'; time類型:eg.'12:12:32'; datetime類型:eg.'1987-05-03 14:32:08'where 用法
where 用法: where id>2;where id!=2; where id in (值1,值2...值N);(查詢id在1到N中的數(shù)據(jù)) where id between A and B;(查詢在A到B中的數(shù)據(jù)) (where用來找位置)group用法
group通常與統(tǒng)計函數(shù)連用;
統(tǒng)計函數(shù):max(最大),min(最小),sum(求總和),avg(求平均),count(求總行數(shù))。
having用法
select 列名1,列名2 from 表名 where 位置 having 篩選條件; select name,id,price from goods where id=3 having price>200; (having用來篩選)order by用法
order by 列名;(升序排列) order by 列名 desc;(降序排列) order by的多字段排序:order by 列1,列2;(先按列1排再按列2排)limit查詢結(jié)果數(shù)限制
在語句最后,起限制條目的作用。 limit offset n; 指跳過前offset個,然后再取n個。 select * from ig limit 2;索引
什么是索引
索引,使用索引可快速訪問數(shù)據(jù)庫表中的特定信息。索引是對數(shù)據(jù)庫表中一列或多列的值進行排序的一種結(jié)構(gòu)。
在關(guān)系數(shù)據(jù)庫中,索引是一種與表有關(guān)的數(shù)據(jù)庫結(jié)構(gòu),它可以使對應于表的SQL語句執(zhí)行得更快。索引的作用相當于圖書的目錄,可以根據(jù)目錄中的頁碼快速找到所需的內(nèi)容。
當表中有大量記錄時,若要對表進行查詢,第一種搜索信息方式是全表搜索,是將所有記錄一一取出,和查詢條件進行一一對比,然后返回滿足條件的記錄,這樣做會消耗大量數(shù)據(jù)庫系統(tǒng)時間,并造成大量磁盤I/O操作;第二種就是在表中建立索引,然后在索引中找到符合查詢條件的索引值,最后通過保存在索引中的ROWID(相當于頁碼)快速找到表中對應的記錄。
索引是一個單獨的、物理的數(shù)據(jù)庫結(jié)構(gòu),它是某個表中一列或若干列值的集合和相應的指向表中物理標識值的數(shù)據(jù)頁的邏輯指針清單。
索引的優(yōu)點
1、大大的加快了數(shù)據(jù)的檢索速度;
2、創(chuàng)建唯一索引,保證數(shù)據(jù)庫表中每條數(shù)據(jù)的唯一性;
3、加快表與表之間的連接;
4、使用排序和分組檢索數(shù)據(jù)時,可以顯著的加快排序和分組的時間;
索引的缺點
1、索引需要占物理空間;
2、當對表中的數(shù)據(jù)進行增刪改是,索引也要動態(tài)維護,降低了數(shù)據(jù)庫的維護性;
3、在創(chuàng)建索引時,必須要確定要創(chuàng)建的索引列和索引類型;
索引的類型
普通索引
這是最基本的索引,而且沒有唯一性之類的限制
創(chuàng)建普通索引:create index 索引名 on 表名(列名 asc/desc);(升序/降序索引)
唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現(xiàn)有數(shù)據(jù)中存在重復的鍵值時,大多數(shù)數(shù)據(jù)庫不允許將新創(chuàng)建的唯一索引與表一起保存。
數(shù)據(jù)庫還可能防止添加將在表中創(chuàng)建重復鍵值的新數(shù)據(jù)。例如,如果在 employee 表中職員的姓 (lname) 上創(chuàng)建了唯一索引,則任何兩個員工都不能同姓。
創(chuàng)建唯一索引:create unique index 索引名 on 表名 (列名1,列名2,……);
主鍵索引
數(shù)據(jù)庫表經(jīng)常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。在數(shù)據(jù)庫關(guān)系圖中為表定義主鍵將自動創(chuàng)建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數(shù)據(jù)的快速訪問。建議建立唯一索引時,直接創(chuàng)建主鍵索引就好了。
聚集索引
該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引類似于電話簿,按姓氏排列數(shù)據(jù)。由于聚集索引規(guī)定數(shù)據(jù)在表中的物理存儲順序,因此一個表只能包含一個聚集索引。但該索引可以包含多個列(組合索引),就像電話簿按姓氏和名字進行組織一樣。
--創(chuàng)建 CREATE CLUSTERED INDEX [IndexName] ON [TableName]([ColumnName],[ColumnName],...) --刪除 DROP INDEX [TableName].[IndexName]聚集索引使用注意事項
(1) 定義聚集索引鍵時使用的列越少越好;
(2) 使用下列運算符返回一個范圍值的查詢:BETWEEN、>、>=、< 和 <=,可以按物理順序更快的返回一個范圍;
(3) 被連續(xù)訪問的列;
(4) 返回大型結(jié)果集的查詢;
(5) 經(jīng)常被使用表聯(lián)接或 GROUP BY 子句的查詢訪問的列;一般來說,這些是外鍵列。對 ORDER BY 或 GROUP BY 子句中指定的列進行索引,可以使 SQL Server 不必對數(shù)據(jù)進行排序,因為這些行已經(jīng)排序。這樣可以提高查詢性能;
(6) OLTP 類型的應用程序,這些程序要求進行非常快速的單行查找(一般通過主鍵)。應在主鍵上創(chuàng)建聚集索引;
聚集索引不適用于
(1) 頻繁更改的列 。這將導致整行移動(因為 SQL Server 必須按物理順序保留行中的數(shù)據(jù)值,修改了一行數(shù)據(jù),改行物流順序改變了,其他行的物流順序也要跟著改變)。這一點要特別注意,因為在大數(shù)據(jù)量事務處理系統(tǒng)中數(shù)據(jù)是易失的;
(2) 寬鍵。來自聚集索引的鍵值由所有非聚集索引作為查找鍵使用,因此存儲在每個非聚集索引的葉條目內(nèi);
非聚集索引
數(shù)據(jù)存儲在一個地方,索引存儲在另一個地方,索引帶有指針指向數(shù)據(jù)的存儲位置。非聚集索引中的項目按索引鍵值的順序存儲,而表中的信息按另一種順序存儲(這可以由聚集索引規(guī)定)。對于非聚集索引,可以為在表非聚集索引中查找數(shù)據(jù)時常用的每個列創(chuàng)建一個非聚集索引。有些書籍包含多個索引。例如,一本介紹園藝的書可能會包含一個植物通俗名稱索引,和一個植物學名索引,因為這是讀者查找信息的兩種最常用的方法。
--創(chuàng)建 CREATE NONCLUSTERED INDEX [IndexName] ON [TableName]([ColumnName],[ColumnName]...) --刪除 DROP INDEX [TableName].[IndexName]索引舉例
刪除索引:drop index 索引名 on 表名;
drop index stuIndex on student; where型的子查詢:指把內(nèi)層查詢的結(jié)果作為外層查詢的比較條件。 from型的子查詢:把內(nèi)層的查詢結(jié)果當成臨時表,供外層sql再次查詢 exists型的子查詢:把外層的查詢結(jié)果,拿到內(nèi)層,看內(nèi)層的查詢是否成立。用SQL語言CREATE INDEX語句定義表STUDENT的SNAME字段的降序索引;
Create unique index stusname on student(sname desc);用SQL語言CREATE INDEX語句定義表SC的GRADE字段的升序索引;
Create unique index scgrade on sc(grade);用SQL語言CREATE INDEX語句定義表SC的GRADE字段的升序索引;
Create unique index scgrade on sc(grade);int(19):
指定數(shù)字的顯示寬度為19,與實際存儲數(shù)值的范圍無關(guān)float(7,2):
7是顯示寬度指示器,指定顯示的浮點數(shù)為7位數(shù)字(與float實際存儲值的范圍無關(guān)), 2 代表小數(shù)點后只有兩位小數(shù)(第三位會四舍五入后插入數(shù)據(jù)庫)decimal(7,2):
7表示數(shù)值的精度,即實際保存到數(shù)據(jù)庫的有效數(shù)字的總個數(shù); 2代表小數(shù)點后的位數(shù)(同上)刪除表數(shù)據(jù)drop、truncate和delete的用法
drop
drop table tb --tb表示數(shù)據(jù)表的名字刪除內(nèi)容和定義,釋放空間。簡單來說就是把整個表去掉.以后要新增數(shù)據(jù)是不可能的,除非新增一個表。
例如:一個班就是一個表,學生就是表中的數(shù)據(jù),學生的職務就是定義
drop table class,就是把整個班移除.學生和職務都消失
truncate
truncate table tb刪除內(nèi)容、釋放空間但不刪除定義。與drop不同的是,他只是清空表數(shù)據(jù)而已,保留表的數(shù)據(jù)結(jié)構(gòu)。
同樣也是一個班,他只去除所有的學生.班還在,職務還在,如果有新增的學生可以進去,也可以分配上職務
注意:truncate 不能刪除行數(shù)據(jù),要刪就要把表清空
關(guān)于truncate的總結(jié):
truncate table 在功能上與不帶 WHERE 子句的 delete語句相同:二者均刪除表中的全部行。
但 truncate 比 delete速度快,且使用的系統(tǒng)和事務日志資源少。
delete 語句每次刪除一行,并在事務日志中為所刪除的每行記錄一項。所以可以對delete操作進行roll back
1、truncate 在各種表上無論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而 truncate 則不會被撤銷。
2、truncate 是一個DDL語言,向其他所有的DDL語言一樣,他將被隱式提交,不能對 truncate 使用ROLLBACK命令。
3、truncate 將重新設置高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經(jīng)過 truncate 操作后的表比Delete操作后的表要快得多。
4、truncate 不能觸發(fā)任何Delete觸發(fā)器。
5、當表被清空后表和表的索引講重新設置成初始大小,而delete則不能。
6、不能清空父表
delete
delete table tb 或 delete table tb where 條件
雖然也是刪除整個表的數(shù)據(jù),但是過程是痛苦的(系統(tǒng)一行一行地刪,效率較truncate低)
刪除內(nèi)容不刪除定義,不釋放空間。三兄弟之中最容易欺負的一個
總結(jié)
以上是生活随笔為你收集整理的Mysql常用命令汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何在屏幕实时显示自己键盘的输入字符?
- 下一篇: 摩尔庄园是哪个公司的 背后有a股上