MySQL操作語句快速入門

一、連接數據庫

mysql -h127.0.0.1 -P3306 -uroot -p
本機簡寫 mysql -u root -p

注:

  • 如果沒有寫-h127.0.0.1默認是本地連接
  • -P3306 連接的端口號爲3306,如果沒有寫默認爲3306
  • -uroot 用戶是root
  • 最後一個-p是輸入密碼。

二、操作數據庫

(1) 創建數據庫

CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,
create_specification] ...]
create_specification:
 [DEFAULT] CHARACTER SET charset_name
 [DEFAULT] COLLATE collation_name
  • 大寫的標識關鍵字
  • [ ]是可選項
  • CHARACTER SET:指定數據庫採用的字符集
  • COLLATE :指定數據庫字符集的校驗規則。
創建一個名稱爲mydb1的數據庫。(系統使用默認字符集:utf8,默認校驗規:utf8_general_ci)
CREATE DATABASE mydb1;
創建一個使用gbk字符集的mydb2數據庫。
CREATE DATABASE mydb2 CHARACTER SET gbk;
創建一個使用utf8字符集,校驗規則爲utf8_bin的mydb3數據庫。
CREATE DATABASE mydb3 CHARACTER SET utf8 COLLATE utf8_bin;

(2) 查看數據庫

顯示數據庫語句:
SHOW DATABASES
顯示數據庫創建語句:
SHOW CREATE DATABASE db_name

例:

查看當前數據庫服務器中的所有數據庫 
SHOW DATABASES;
查看前面創建的mydb3數據庫的定義信息
SHOW CREATE DATABASE mydb3;

(3) 修改數據庫

ALTER DATABASE db_name
[alter_spacification [,alter_spacification]...]
alter_spacification:
[DEFAULT] CHARACTER charset_name
[DEFAULT] COLLATE collation_name

對數據庫的修改主要是修改數據庫的字符集和校驗規則。
mydb2字符集修改爲utf8

ALTER DATABASE mydb2 CHARACTER SET utf8;

(4) 刪除數據庫

DROP DATABASE [IF EXISTS] db_name         
刪除前面創建的mydb1數據庫 DROP DATABASE mydb1;

(5) 選擇數據庫

進入數據庫:USE db_name;
進入數據庫mydb2:USE mydb2;
查看當前所選的數據庫: SELECT DATABASE();

三、操作表

(1) 創建表

CREATE TABLE table_name
    (
        field1  datatype,
        field2  datatype,
        field3  datatype,
    )[character set 字符集] [collate 校對規則]
    field:指定列名 datatype:指定列類型
創建一個員工表employee 
create table employee(
    id int primary key auto_increment,
    name varchar(20) unique,
    gender bit not null,
    birthday date,
    entry_date date,
    job varchar(40),
    salary double,
    resume text
);

(2) 查看錶

查看錶結構:desc tabName;
查看當前數據庫中所有表:show tables;
查看當前數據庫表建表語句 show create table tabName;
查看錶的相關信息:SHOW TABLE STATUS;
顯示employee表的信息
show table status like 'employee' \G;

(3) 修改表

ALTER TABLE tableName  ADD/MODIFY/DROP/CHARACTER SET/CHANGE  (column datatype [DEFAULT expr][, column datatype]...);
修改表的名稱:rename table 表名 to 新表名;

在上面員工表的基本上增加一個image列。
alter table employee add image blob;
修改job列,使其長度爲60alter table employee modify job varchar(60);
刪除gender列。
alter table employee drop gender;
表名改爲user1。
rename table employee to user1;
修改表的字符集爲gbk
alter table user1 character set gbk;
列名name修改爲username
alter table user1 CHANGE name username varchar(20);

(4) 刪除表

DROP TABLE tab_name;
刪除user1表 drop table user1;

四、操作表記錄CRUD

(1) INSERT

INSERT INTO table [(column [, column...])] VALUES (value [, value...]);
插入的數據應與字段的數據類型相同。
數據的大小應在列的規定範圍內,例如:不能將一個長度爲80的字符串加入到長度爲40的列中。
在values中列出的數據位置必須與被加入的列的排列位置相對應。
字符和日期型數據應包含在單引號中。
插入空值:不指定或insert into table value(null)
如果要插入所有字段可以省寫列列表,直接按表中字段順序寫值列表
使用insert語句向表中插入了四個員工的信息
insert into employee (id,name,gender,birthday,entry_date,job,salary,resume)values (null,'張飛',1,'1999-09-09','1999-10-01','打手',998.0,'老大的三弟,真的很能打');
insert into employee values (null,'關羽',1,'1998-08-08','1998-10-01','財神爺',9999999.00,'老大的二弟,公司掙錢都指着他了');
insert into employee values (null,'劉備',0,'1990-01-01','1991-01-01','ceo',100000.0,'公司的老大'),(null,'趙雲',1,'2000-01-01','2001-01-01','保鏢',1000.0,'老大貼身人');

(2) UPDATE

UPDATE  tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]  
UPDATE語法可以用新值更新原有錶行中的各列。
SET子句指示要修改哪些列和要給予哪些值。
WHERE子句指定應更新哪些行。如沒有WHERE子句,則更新所有的行
將所有員工薪水修改爲5000元。
update employee set salary = 5000;
將姓名爲’張飛’的員工薪水修改爲3000元。
update employee set salary = 3000 where name='張飛';
將姓名爲’關羽’的員工薪水修改爲4000,job改爲ccc。
update employee set salary=4000,job='ccc' where name='關羽';
將劉備的薪水在原有基礎上增加1000元。  
update employee set salary=salary+1000 where name='劉備';

(3) DELETE

  • 如果不使用where子句,將刪除表中所有數據。
  • Delete語句不能刪除某一列的值(可使用update)
  • 使用delete語句僅刪除記錄,不刪除表本身。如要刪除表,使用drop table語句。
  • 同insert和update一樣,從一個表中刪除記錄將引起其它表的參照完整性問題,在修改數據庫數據時,頭腦中應該始終不要忘記這個潛在的問題。
  • 外鍵約束
    刪除表中數據也可使用TRUNCATE TABLE 語句,它和delete有所不同,參看mysql文檔。
delete from tbl_name [WHERE where_definition]    
刪除表中名稱爲’張飛’的記錄。
delete from employee where name='張飛';
刪除表中所有記錄。
delete from employee;
使用truncate刪除表中記錄。
truncate table employee;

(4) SELECT

1、基本查詢

SELECT [DISTINCT] *|{column1, column2. column3..} FROM  table;
查詢表中所有學生的信息。
select * from exam;
查詢表中所有學生的姓名和對應的英語成績。
select name,english from exam;
過濾表中重複數據
select distinct english from exam;
在所有學生分數上加10分特長分顯示。
select name , math+10,english+10,chinese+10 from exam;
統計每個學生的總分。
select name ,english+math+chinese from exam;
使用別名表示學生總分。
select name as 姓名 ,english+math+chinese as 總成績 from exam;
select name 姓名 ,english+math+chinese 總成績 from exam;
select name english from exam;

在這裏插入圖片描述![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200525155654784.png

2、使用where子句進行過濾查詢


查詢英語最大值的信息 
select * from exam where english=(select max(english) from exam );
查詢姓名爲張飛的學生成績
select * from exam where name='張飛';
查詢英語成績大於90分的同學
select * from exam where english > 90;
查詢總分大於230分的所有同學
select name 姓名,math+english+chinese 總分 from exam where math+english+chinese>230;
查詢英語分數在 80100之間的同學。
select * from exam where english between 80 and 100;
select * from exam WHERE english >= 80 AND english <= 100;
查詢數學分數爲75,76,77的同學。
select * from exam where math in(75,76,77);
查詢所有姓張的學生成績。
select * from exam where name like '張%';/*%表示0個到多個*/
select * from exam where name like '張__';/*_表示1個*/
查詢數學分>70,語文分>80的同學。
select * from exam where math>70 and chinese>80;

在這裏插入圖片描述

3、使用order by關鍵字對查詢結果進行排序操作

SELECT column1, column2. column3.. FROM table where... order by column asc|desc;
asc 升序 -- 默認就是升序  desc 降序
對語文成績排序後輸出。
select name,chinese from exam order by chinese desc;
對總分排序按從高到低的順序輸出
select name 姓名,chinese+math+english 總成績 from exam order by 總成績 desc;
對姓張的學生成績排序輸出
select name 姓名,chinese+math+english 總成績 from exam where name like '張%' order by 總成績 desc;

4、聚合函數

(1)Count – 用來統計符合條件的行的個數
統計一個班級共有多少學生?
select count(*) from exam;
統計數學成績大於90的學生有多少個?
select count(*) from exam where math>70;
統計總分大於230的人數有多少?
select count(*)from exam where math+english+chinese > 230;
(2)SUM – 用來將符合條件的記錄的指定列進行求和操作
統計一個班級數學總成績?
select sum(math) from exam;
統計一個班級語文、英語、數學各科的總成績
select sum(math),sum(english),sum(chinese) from exam;
統計一個班級語文、英語、數學的成績總和
select sum(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;

在執行計算時,只要有null參與計算,整個計算的結構都是null
此時可以用ifnull函數進行處理

統計一個班級語文成績平均分
select sum(chinese)/count(*) 語文平均分 from exam;
(3)AVG – 用來計算符合條件的記錄的指定列的值的平均值
求一個班級數學平均分?
select avg(math) from exam;
求一個班級總分平均分?
select avg(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
(4)MAX/MIN – 用來獲取符合條件的所有記錄指定列的最大值和最小值
~求班級最高分和最低分
select max(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;
select min(ifnull(chinese,0)+ifnull(english,0)+ifnull(math,0)) from exam;

5、分組查詢


按商品分的 count是相同商品的個數
select count(product),product from orders group by product;
對訂單表中商品歸類後,顯示每一類商品的總價
select product,sum(price) from orders group by product;
詢購買了幾類商品,並且每類總價大於100的商品
select product 商品名,sum(price)商品總價 from orders group by product having sum(price)>100;

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
where子句和having子句的區別:
where子句在分組之前進行過濾 having子句在分組之後進行過濾
having子句中可以使用聚合函數,where子句中不能使用
很多情況下使用where子句的地方可以使用having子句進行替代

查詢單價小於100而總價大於150的商品的名稱
select product from orders where price<100 group by product having sum(price)>150;          

sql語句書寫順序: 
select from where groupby having orderby
sql語句執行順序:
from where select group by having order by 

6、replace語句

官方語法:
REPLACE ( string_expression , string_pattern , string_replacement )
參數含義:
string_expression 要搜索的字符串表達式。string_expression 可以是字符或二進制數據類型。
string_pattern 是要查找的子字符串。string_pattern 可以是字符或二進制數據類型。string_pattern 不能是空字符串 (’’)。
string_replacement 替換字符串。string_replacement 可以是字符或二進制數據類型。
返回類型:
如果其中的一個輸入參數數據類型爲 nvarchar,則返回 nvarchar;否則 REPLACE 返回 varchar。
如果任何一個參數爲 NULL,則返回 NULL。
最直接、最直白的意思:REPLACE(String,from_str,to_str) 即:將String中所有出現的from_str替換爲to_str。

select REPLACE('abcdefghabc','abc','xxx')--輸入的字符串爲:abcdefghabc
結果爲:xxxdefghxxx

select city_name,REPLACE(city_name,'市','') as city from tmp_city
將city_name列中的所有的“市”字去掉了

五、備份恢復數據庫

備份:

在cmd窗口下 mysqldump -u root -p密碼 -B 數據庫名 > 數據庫備份存儲的⽂件路徑
如:將mydb3庫備份到文件:
mysqldump -u root -p -B mydb3> d:/333.sql
這時javacode.sql文件包含整個數據庫,表,導入的數據。

還原:

第一種方法:在cmd窗口下 mysql -u root -p <d:/333.sql
第二種方法:在mysql命令下, source d:/333.sql

如果備份⼀個數據庫時,沒有帶上-B參數, 在恢復數據庫時,
第一種方法:需要先創建空數據庫(可用其他名字),然後使⽤數據庫,再使⽤source來還原;

create database mydb4;
use mydb4;
source d:/333.sql;

第二種方法:需要先創建空數據庫,退出後在cmd窗口下 mysql -u root -p 數據庫名<d:/333.sql來還原。

參考文章,感謝作者的傾情奉獻https://blog.csdn.net/wujingjing_crystal/article/details/52305738

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章