共計 8092 個字符,預計需要花費 21 分鐘才能閱讀完成。
本篇內容介紹了“MySQL 數據庫合集命令有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1. 對數據庫常用命令
1. 連接數據庫
mysql - u 用戶名 - p 密碼
2. 顯示已有數據庫
show databases;
3. 創建數據庫
create database sqlname;
4. 選擇數據庫
use database sqlname;
5. 顯示數據庫中的表(先選擇數據庫)
show tables;
6. 顯示當前數據庫的版本信息以及連接用戶名
select version(),user();
7. 刪除數據庫(刪除時沒有提示直接刪除)
drop database sqlname;
2. 數據庫中對表的命令
1. 創建表
(1) 語法:
create table tablename(
字段 1 數據類型 字段屬性
…
字段 n
);
(2) 注意:
1. 創建表時為了防止與保留字沖突,用’括起來
2. 單行注釋:#…
多行注釋:/…/
3. 創建表時多字段中間用英文逗號隔開,最后一行不用逗號。
(3) 字段約束和屬性
1. 非空約束 not null(字段不允許為空)
2. 默認約束 default(設置默認值)
3. 唯一約束 unique key(uk)(設置字段的值是唯一的,可為空,但只能有一個空值)
4. 主鍵約束 primary key(pk)(作為表記錄的唯一標識)
5. 外鍵約束 foreign key(fk)(用于兩個表之間建立關系,需要指定引用主表的哪一字段。在數據庫的存儲引擎中 InnoDB 支持外鍵,MyISAM 不支持外鍵。
作為外鍵的字段要求是主表中的主鍵(單字段主鍵))
添加外鍵約束:
CONSTRAINT FK_外鍵名 FOREIGN KEY(字表中外鍵字段)REFERENCES 關聯表名 (關聯字段)。
grandid 作為字表的外鍵
1. 設置自增 auto_increment=n, 從 n 開始。
2. 設置自增 set @@ auto_increment_increment=m, 步長為 m。
3. 多字段設置主鍵:primary key(字段 1,字段 2…字段 n)
4. 表中的注釋 / 說明性文字:)comment=“說明文字”;
5. 設置字符集:)charset=“字符集”;
6. 查看表的結構:describe’表名’/desc 表名
7. 查看數據庫定義:show create database sqlname;
8. 查看數據表定義:show create table tablename;
9. 查看默認存儲引擎:show variables like’storage_engine%’;
11. 指定表的存儲引擎:)engine= 存儲引擎;
10. 刪除表:drop table‘tablename’;
11. 獲取當前日期:now();
12. 修改表:
(1) 修改表名:alter table 舊表名 rename 新表名;
(2)添加字段:alter table 表名 add 字段名 數據類型…;(添加新的字段)
(3)修改字段:alter table 表名 change 原字段名 新字段名 數據類型…;
(4)刪除字段:alter table 表名 drop 字段名;
(5)在創建完表以后添加主鍵約束:
alter table 表名 add constraint 主鍵名 primary key 表名 (主鍵字段);
(6) 創建完表以后添加外鍵約束(作為外鍵的字段要求是主表中的主鍵(單字段主鍵)):
alter table 表名 add constraint 外鍵名 foreign key(外鍵字段) references 關聯表名 (關聯字段);
插入數據
1. 插入單行數據:
insert into 表名 (字段名列表(逗號隔開)) values(值列表(逗號隔開));
2. 插入多行數據:
insert into 表名(字段名列表) values (值列表 1), … ,(值列表 n);
3. 將查詢結果插入到新表中:
create table 新表(select 字段 1, … ,from 原表);
查詢 student 表中的 id,name,sex,phone 數據插入到 newstudent 表中:CREATE TABLE newstudent(SELECT id,`name`,sex,phone FROM student);
3. 更新數據(修改數據):
update 表名 set 列名 = 更新值 where 更新條件;
修改 newstudent 表中 id=1001 的數據名字為 tom:UPDATE newstudent SET `name`= tom WHERE id=1001;
4. 刪除數據
(1)delete from 表名 where 刪除條件;
delete 刪除的是整條數據,不會只刪除單個列。
刪除 newstudent 表中名字為 tom 的數據:DELETE FROM newstudent WHERE `name`= tom
(2)truncate table 刪除數據:
truncate table 刪除的是表中所有的行,但表的結構,列,約束,索引等不會改變。不能用于有外鍵約束的表。刪除數據不能恢復。
truncate table 表名 where 刪除條件;
數據查詢
1. 使用 select 查詢
select 列名 / 表達式 / 函數 / 常量 from 表名 where 查詢條件 order by 排序的列名 asc/desc;
(1) 查詢所有的數據行和列:
select * from 表名;
(2)查詢部分行和列:
select 列名… from 表名 where 查詢條件;
(3)在查詢中使用列的別名:
select 列名 AS 新列名 form 表名 where 查詢條件;
計算,合并得到新的列名:
select 列名 1 +’.’+ 列名 2 AS 新列名 from 表名;
(4)查詢空值:
通過 is null 或者 is not null 判斷列值是否為空
查詢 student 表中 Email 為空的學生姓名:SELECT `name` FROM student WHERE Email IS NULL;
2. 分組查詢
# 查詢不同課程的平均分,最低分,最高分, 并查詢出平均分大于 80 分的課程
SELECT r.subjectno,sub.`SubjectName` 課程名稱,AVG(StudentResult) 平均分,
MAX(StudentResult) 最高分,MIN(StudentResult) 最低分
FROM result r INNER JOIN `subject` sub
ON r.`SubjectNo`=sub.`SubjectNo`
GROUP BY r.subjectno
#where AVG(StudentResult) =80 出現錯誤,#分組查詢 group by 在 where 語句后,#group by 約束條件使用 having 語句
HAVING AVG(StudentResult)
常用函數
1. 聚合函數:
(1)AVG (平均值):select avg(列名)from 表名
假設列名為成績 則查詢到的是表中所有成績的平均值。
(2)count 返回某字段的行數
(3)max 返回某字段的最大數
(4)min 返回某字段的最小值
(5)sum 返回某字段的和。
2. 字符串函數:
(1)concat() 連接字符串 s1,s2…sn 為一個完整的字符串。
(2)insert(s1,p1,n,news) 將字符串 s1 從 p1 位置開始,n 個字符長的字串替換為字符串 news。
(3)lower(s)將字符串 s 中的所有字符改為小寫。
(4)upper(s)將字符串 s 中的所有字符改為大寫。
(5)substring(s,num,len)返回字符串 s 的第 num 個位置開始長度為 len 的子字符串。
3. 時間日期函數:
(1)獲取當前日期:curdate();
(2)獲取當前時間:curtime();
(3)獲取當前日期和時間:now();
(4)返回日期 date 為一年中的第幾周:week(date);
(5)返回日期 date 的年份:year(date);
(6)返回時間 time 的小時值:hour(time);
(7)返回時間 time 的分鐘值:minute(time);
(8)返回日期參數(date1 和 date2 之間相隔的天數):datediff(date1,date2);
(9)計算日期參數 date 加上 n 天后的日期:adddate(date,n);
4. 數學函數
(1)返回大于或等于數值 x 的最小整數:ceil(x);
(2)返回小于或等于數值 x 的最大整數:floor(x);
(3)返回 0~1 之間的隨機數:rand();
order by 子句
order by 子句按照一定的順序排列查詢結果,asc 升序排列,desc 降序排列。
limit 子句
顯示指定位置指定行數的記錄。
select 字段名列表 form 表名 where 約束條件 group by 分組的字段名 order by 排序列名 limit 位置偏移量, 行數;
# 查詢學生信息里 gid= 1 按學號升序排列前四條記錄
# 查詢學生信息里 gid= 1 按學號升序排列前四條記錄(步長)SELECT id,`name` FROM `student1` WHERE gid=1 ORDER BY id LIMIT 4;(查詢表里全部信息中 gid= 1 的前四個學生)
查詢結果:
# 查詢學生信息里 gid= 1 按學號升序排列前四條記錄(位置偏移量,步長)SELECT id,`name` FROM `student1` WHERE gid=1 ORDER BY id LIMIT 4,4;(查詢表中全部信息 gid= 1 前四條以后的全部信息中的前四條學生信息)
查詢結果:
模糊查詢
in 子查詢 ******not in 子查詢
使用 in 關鍵字可以使父查詢匹配子查詢返回的多個單字段值。
解決使用比較運算符(=, 等),子查詢返回值不唯一錯誤信息。
like 模糊查詢
LIKE 語句語法格式:select * from 表名 where 字段名 like 對應值(子串)。
它主要是針對字符型字段的,它的作用是在一個字符型字段列中檢索包含對應子串的。
A:% 包含零個或多個字符的任意字符串:1、LIKE’Mc%’將搜索以字母 Mc 開頭的所有字符串(如 McBadden)。
2、LIKE’%inger’將搜索以字母 inger 結尾的所有字符串(如 Ringer、Stringer)。
3、LIKE’%en%’將搜索在任何位置包含字母 en 的所有字符串(如 Bennet、Green、McBadden)。
B:_(下劃線)任何單個字符:LIKE’_heryl’將搜索以字母 heryl 結尾的所有六個字母的名稱(如 Cheryl、Sheryl)。
C:[] 指定范圍 ([a-f]) 或集合 ([abcdef]) 中的任何單個字符:、
1,LIKE’[CK]ars[eo]n’將搜索下列字符串:Carsen、Karsen、Carson 和 Karson(如 Carson)。
2、LIKE’[M-Z]inger’將搜索以字符串 inger 結尾、以從 M 到 Z 的任何單個字母開頭的所有名稱(如 Ringer)
***D:[^] 不屬于指定范圍 ([a-f]) 或集合 ([abcdef]) 的任何單個字符:LIKE’M[^c]%’將搜索以字母 M 開頭,并且第二個字母不是 c 的所有名稱(如 MacFeather)。
E:它同于 DOS 命令中的通配符,代表多個字符:cc 代表 cc,cBc,cbc,cabdfec 等多個字符。
F:?同于 DOS 命令中的?通配符,代表單個字符 :b?b 代表 brb,bFb 等
G:# 大致同上,不同的是代只能代表單個數字。k#k 代表 k1k,k8k,k0k。
F:[!] 排除 它只代表單個字符
下面我們來舉例說明一下:
例 1,查詢 name 字段中包含有“明”字的。
select * from table1 where name like‘% 明 %’
例 2,查詢 name 字段中以“李”字開頭。
select * from table1 where name like 李’
例 3,查詢 name 字段中含有數字的。
select * from table1 where name like‘%[0-9]%’
例 4,查詢 name 字段中含有小寫字母的。
select * from table1 where name like‘%[a-z]%’
例 5,查詢 name 字段中不含有數字的。
select * from table1 where name like‘%[!0-9]%’
可以自定義轉移符 —-》escape’自定義轉移符’
distinct——》去除重復項
between*and 模糊查詢
操作符 BETWEEN … AND 會選取介于兩個值之間的數據范圍。這些值可以是數值、文本或者日期。
null,not null 查詢
-- 查詢手機號不為 null 的用戶數據
SELECT * from user where phone is not null;
-- 查詢手機號為 null 的用戶數據
SELECT * from user where phone is null;
exists 子查詢 not exists 子查詢
exists 子查詢用來確認后邊的查詢是否繼續進行
drop table if exists test— 判斷是否存在表 test,如果存在就刪除。
not exists 實現取反操作。對不存在對應查詢條件的記錄。
多表連接查詢
多表連接查詢是通過各個表之間共同列的關聯性來查詢數據。
1. 內連接查詢
內連接查詢根據表中共同的列進行匹配。取兩個的表的交集。兩個表存在主外鍵關系是通常使用內連接查詢。
內連接使用 inner join…on 關鍵字或者 where 子句來進行表之間的關聯。
inner 可省略 on 用來設置條件。
(1)在 where 子句中指定連接條件
(2)在 from 中使用 inner join…on 關鍵字
# 查詢學生姓名和成績
SELECT studentname,studentresult FROM student s,result r
WHERE s.`StudentNo`=r.`StudentNo`
# 在 from 中使用 inner join....on 關鍵字
SELECT s.`StudentName`,r.`StudentResult` ,r.`SubjectNo`FROM student s
INNER JOIN result r ON s.`StudentNo`=r.`StudentNo`
兩種方法查詢結果相同。
2. 外連接查詢
外連接查詢中參與連接的表有主從之分,已主表的每行數據匹配從表的數據列,將符合連接條件的數據直接返回到結果集中,對不符合連接條件的列,將被填上 null 值再返回到結果集中。
(1)左外連接查詢
left join…on 或者 left outer join…on 關鍵字進行表之間的關聯。
SELECT s.`StudentName`,r.`StudentResult` ,r.`SubjectNo`FROM student s
LEFT JOIN result r ON s.`StudentNo`=r.`StudentNo`
將沒有成績的學生成績查出。
(2)右外連接查詢
右外連接包含右表中所有的匹配行,右表中有的項在左表中沒有對應的項將以 null 值填充。
right join…on 或 right outer join…on 關鍵字進行表之間的關聯。
(3)自連接
把一個表作為兩個表使用。
# 創建一個表
CREATE TABLE book(id INT(10),
sort INT(10),
books VARCHAR(10) NOT NULL
#插入數據
INSERT INTO book VALUES (2,1, 古文書),
(3,1, 現代書),
(4,2,《三字經》),
(5,2,《唐詩三百首》),
(6,3,《我與地壇》),
(7,2,《游大林寺》),
(8,2,《王右軍年減十歲時》),
(9,3,《致橡樹》#查詢結果為:#書籍類型 書籍名
#古文書 三字經....
#現代書 我與地壇....
SELECT a.books 書籍類型, b.books 書籍名
FROM book a,book b
WHERE a.id=b.sort;
自連接查詢結果:
MySQL 的事務,視圖,索引,備份和恢復
1. 事務
事務是指將一系列數據操作捆綁成為一個整體進行統一管理。
把所有的命令作為一個整體一起向系統提交或者撤銷造組偶請求。
事務屬性:原子性,一致性,隔離性,持久性。
myISA 存儲引擎不支持事務。
關閉事務自動提交:set autocommit=0;
(1)開始事務:begin/start transaction;
(2)提交事務:commit;
(3)回滾 / 撤銷事務:rollback;
恢復自動提交:set autocommit=1;
設置結果集以??編碼格式顯示:set names??;
2. 視圖
視圖是一種查看數據庫中一個或多個表中數據的方法。視圖是一種虛擬表,作為來自一個或多個表的行或列的子集創建的。視圖充當查詢中的表篩選器的角色。
(1)創建視圖:create view 視圖名 as select 語句
(2)刪除視圖:drop view 視圖名;
(3)查看視圖數據:select。。。。。from 視圖名;
3. 索引
索引類似于書的目錄,使用索引可以將數據庫程序無須對整個表掃描就可以在其中找到所需數據。
(1)普通數據:允許重復和空值。
(2)唯一索引:不允許出現重復。可以有多個唯一索引。
(3)主鍵索引:非空,唯一。刪除時 drop primary key;
(4)復合索引:將多個列組合作為索引。?
(5)全文索引:可重復和空值,在 char,varchar,text 創建。
where match(列名)against(‘查找內容’);
(6)空間索引:對空間數據類型的列建立的索引。
創建索引:
create【索引類型】index 索引名 on 表名(創建索引的列);
或者創建表時之間在列后面加上索引類型。
或者修改表 alter table 表名 add index 索引名(索引列);
刪除索引:drop index 索引名;
查看索引:show index from 表名;
4. 數據庫備份和恢復
1. 使用 mysqldump 命令備份數據庫
mysqldump -u -p 數據庫名 備份數據庫位置及名字;
表數據導出到文本文件
select *from 表名 where 查詢條件 into outfile 備份數據庫位置及名字;
2. 使用 mysql 命令恢復數據庫(先創建新的數據庫)
mysql -u -p 新創建數據庫名 所要恢復數據庫位置及文件名;
source 命令恢復數據庫
source 數據庫備份文件;
新建用戶
# 創建本地用戶
CREATE USER `user`@`localhost` IDENTIFIED BY 123123
# 用戶可登陸任何遠程主機,使用通配符 %
CREATE USER `user2`@`123%` IDENTIFIED BY 123123
# 對用戶進行全部權限授權
GRANT ALL ON mysql.`user` TO `user2`@`123%`;
# 對已創建的用戶授權
GRANT SELECT,INSERT ON mysql.`user` TO `user2`@`123%`;
# 創建用戶時授權
GRANT SELECT,INSERT ON mysql.`user` TO `user_2`@`123%` IDENTIFIED BY 123123
# 刪除用戶 user2(使用刪除語句時必須擁有數據庫全局權限或 select 權限)
DROP USER `user2`@`123%`;
DROP USER `user_2`@`123%`;
DROP USER `user`@`localhost`;
#mysqladmin 修改超級用戶 user2 賬戶密碼(mysqladmin 命令在 cmd 中使用,只能修改超級用戶密碼)
mysqladmin -u root -p PASSWORD 123456
# 修改當前登錄用戶密碼
SET PASSWORD =PASSWORD(123456
# 修改其他用戶密碼
SET PASSWORD FOR `user2`@`123%`=PASSWORD(123456
“MySQL 數據庫合集命令有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注丸趣 TV 網站,丸趣 TV 小編將為大家輸出更多高質量的實用文章!