1. 程式人生 > 其它 >mySql常用操作

mySql常用操作

一、SQL語句分類

1、DDL語句(資料庫定義語言): 資料庫、表、檢視、索引、儲存過程,例如:CREATE、DROP、ALTER 

2、DML語句(資料庫操縱語言): 插入資料INSERT、刪除資料DELETE、更新資料UPDATE、查詢資料SELECT 

3、DCL語句(資料庫控制語言): 控制使用者的訪問許可權GRANT、REVOKE 

二、操作庫

mysql自帶的庫:

information_schema: 虛擬庫,不佔用磁碟空間,儲存的是資料庫啟動後的一些引數,如使用者表資訊、列資訊、許可權資訊、字元資訊等

performance_schema: MySQL 5.5開始新增一個數據庫:主要用於收集資料庫伺服器效能引數,記錄處理查詢請求時發生的各種事件、鎖等現象

mysql: 授權庫,主要儲存系統使用者的許可權資訊

test: MySQL資料庫系統自動建立的測試資料庫

連線資料庫,檢視已有的資料庫,show databases;

建立庫

指定編碼:create database zss charset utf8; 

使用資料庫:use zss;

查詢庫

show create database zss;

show databases;  展示所有的資料庫

檢視庫位置:find / -name zss

檢視當前所在的庫:select database(); 

改庫

修改編碼: alter database zss charset gbk;

刪庫

drop database zss;

三、操作表及列

切換資料庫:use zss;

檢視當前所在資料庫(資料夾):select database();

增加表

create table 表名(

    欄位名1 型別[(寬度) 約束條件],     欄位名2 型別[(寬度) 約束條件],     欄位名3 型別[(寬度) 約束條件] ); create table test(id int, name varchar(255)); 增加後,多了一個test.frm檔案,frm是表結構   查詢表 show create table test \G;                  \G表示按行顯示錶的詳細結構 show tables; desc test; # 等價於describe test;

 插入資料:insert test(id,name) values(1,'tom'),(2,'jack'),(3,'tony');

  複製表 複製表結構+記錄:create table test2 select * from test;

只複製表結構:create table test3 select * from test where 1=2;

             或者:create table test4 like test;

改表

ALTER TABLE 表名

    # 修改表名       RENAME 新表名;      # 增加欄位       ADD 欄位名  資料型別 [完整性約束條件…];       ADD 欄位名  資料型別 [完整性約束條件…]  FIRST; # 新增到第一個欄位       ADD 欄位名  資料型別 [完整性約束條件…]  AFTER 欄位名;  # 新增到某個欄位之後     # 刪除字典       DROP 欄位名;     # 修改欄位       MODIFY  欄位名 資料型別 [完整性約束條件…];       CHANGE 舊欄位名 新欄位名 舊資料型別 [完整性約束條件…];       CHANGE 舊欄位名 新欄位名 新資料型別 [完整性約束條件…]; 說明:

MODIFY,可以改欄位屬性

CHANGE,可以改欄位名、欄位屬性 

例如:

alter table test modify name varchar(256);

desc test;

alter table test change name NAME varchar(257);

desc test;

刪除表

drop table test;

四、操作記錄資料

 增資料

全欄位插入:INSERT INTO 表名(欄位1,欄位2,欄位3…欄位n) VALUES(值1,值2,值3…值n);  

多條資料逗號分隔INSERT INTO 表名 VALUES(值1,值2,值3…值n),(值1,值2,值3…值n),(值1,值2,值3…值n);

指定欄位插入:INSERT INTO 表名(欄位1,欄位2,欄位3…) VALUES (值1,值2,值3…);

例如:

create table test(id int, name varchar(255));

insert test(id,name) values(1,'tom'),(2,'jack'),(3,'tony');

刪資料

delete from test where id=3;

delete,用於刪除資料,自增長欄位的值未重置

truncate,用於清空表,自增長欄位的值也被重置

改資料

UPDATE 表名 SET 欄位1=WHERE 約束條件;

update test set name='meimei' where id=2;

查資料

select * from test;

如果在其它庫查test,表前必須加庫作為字首。select * from zss.test; 

五、資料型別

 數字型別

參考:https://www.runoob.com/mysql/mysql-data-types.html

日期型別

 例如:create table student(

    id int,     name char(6),   # 最大儲存6個字元     born_year year,  # 年     birth_date date,  # 年月日     class_time time,  # 時分秒     reg_time datetime  # 年月日時分秒 );

插入資料

insert into student values(1,'jack',now(),now(),now(),now()); insert into student values(2,'tom',"2022","2022-5-1","00:00:00","2022-5-1 00:00:00");

now()是mysql提供的函式,當前時間

字元型別

 # 寬度指的是字元的個數

create table test(name char(5)); create table test(name varchar(5));

char:按指定長度存,存取速度快,但是當存的資料的長度小於欄位定義的長度時浪費空間

varchar:存資料更精簡,更加節省空間(是在存的資料的長度小於欄位定義的長度時),缺點,存取速度慢,要先存頭,再存資料;先取頭,再取資料;

現如今,儲存空間已經不是限制了,要追求存取速度,大部分用char,與查詢無關的用varchar

建表的時候,定長的資料往前放,變長的往後放,而且,一張表中,不要char和varchar混用

列舉及集合型別

enum 單選,只能在給定的範圍內選一個值,如性別

sex enum('male','female','other'),

set 多選,在給定的範圍內可以選擇一個或一個以上的值(愛好1,愛好2,愛好3...)

hobbies set('play','music','read','run')

drop table test; create table test(   id int,   name char(16),   sex enum('male','female','other'),   hobbies set('play','music','read','run') );

插入資料:

insert into test values(1,'jack','male','music,read');  # 集合多個值用逗號分隔 

六、儲存引擎

 分類:

InnoDB 儲存引擎

MyISAM 儲存引擎 NDB 儲存引擎 Memory 儲存引擎 Infobright 儲存引擎 NTSE 儲存引擎 BLACKHOLE  

七、約束

 作用:保證資料的完整性和一致性

分類:PRIMARY KEY (PK),標識該欄位為該表的主鍵,可以唯一的標識記錄

FOREIGN KEY (FK),標識該欄位為該表的外來鍵 NOT NULL,標識該欄位不能為空 UNIQUE KEY (UK),標識該欄位的值是唯一的 AUTO_INCREMENT, 標識該欄位的值自動增長(整數型別,而且為主鍵) DEFAULT, 為該欄位設定預設值

 primary key

#方法一:在某一個欄位後用primary key

create table test(   id int primary key,   name char(255) ); #方法二:not null+unique 建立表時未指定主鍵,會找不為空且唯一的欄位作為主鍵 create table test(   id int not null unique,   name char(255) );  #方法三:在所有欄位後單獨定義primary key create table test(   id int,   name varchar(255),   constraint pk_name primary key(id) );   foreign key 建立表之間的關係  create table student(     id int primary key,     name char(255),     age int );   # 關聯的表 create table class(     id int primary key,     name char(255),     stu_id int,     foreign key(stu_id) references student(id)     on delete cascade   # 刪除同步     on update cascade  # 修改同步 );   not null 與default create table test(     id int,     name char(255),     sex enum('male','female'not null default 'male' );    unique key 方式一、 create table test(     id int unique,     name char(255) unique ); 方式二、 create table test(     id int,     name char(255),     unique(id),     unique(name) );  聯合唯一 create table test(     id int,     name char(255),     unique(id,name) );   複合主鍵 create table test(   id int,   name char(255),   primary key(id, name) ); auto_increment 約束欄位為自動增長,增長欄位必須設定為primary key,unique key create table test(     id int primary key auto_increment,     name char(255) );

八、表和表之間的關係

一對一

一對多

多對多

select distinct 欄位1,欄位2,欄位3  # 要查詢的欄位或者分組欄位聚合函式

from 庫.表 # 從哪個表查,如果當前所在的庫不是這個表所在的庫,表的前面需要加上庫名 where  # 約束條件 group by  # 分組 having  # 過濾 order by  # 排序 limit  # 限制條數  

 如果是多表,加個join及連線條件就可以了,很簡單。

說明:where

where是分組之前過濾,後面是普通條件

1.比較運算子:><>= <= <> !=

2.邏輯運算子:在多個條件直接可以使用邏輯運算子 and or not 3.between 10 and 100 值在10100之間 4.in(80,90) 值是8090 5.like 'qzcsbj%',除了%還可以_,%表示任意多字元,_表示一個字元

 having

having是分組之後過濾,後面是聚合條件

聚合函式(以組為單位進行統計)
max,最大
min,最小
avg,平均
sum,和
count,數量

order by 

預設升序,asc

降序,desc

也可以先按某個欄位升序,再按某個欄位降序,例如:select * from test order by id asc, name desc;

limit

limit n,預設初始位置為0,從1開始取,取n條,如果不足n條記錄,那麼有多少條就取多少條

limit m,n,表示位置m,從m+1開始取,取n條記錄,如果不足n條記錄,那麼有多少條就取多少條

執行順序

5 select <br>6 distinct

1 from 庫.表 2 where  3 group by  4 having  7 order by 8 limit

九、多表查詢

 內連線:只取兩張表的共同部分,join on

左外連線:顯示左表全部記錄,在內連線的基礎上增加左邊有右邊沒有的結果,left join on

右外連線:顯示右表全部記錄,在內連線的基礎上增加右邊有左邊沒有的結果,right join on

全外連線:

顯示左右兩個表全部記錄,在內連線的基礎上增加左邊有右邊沒有的和右邊有左邊沒有的結果,

union,其與union all的區別是,union會去掉相同的紀錄,另外,mysql不支援full join on

十、內建函式

 數值函式

字串函式

日期時間函式

流程控制函式

系統資訊函式

十一、賬號許可權管理

建立新使用者:CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';

新使用者授權:GRANT ALL PRIVILEGES ON *.* TO 'test'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;

重新整理授權:flush privileges;