前面我們講了mysql的基本內容,現在我們詳細的了解一下 MySQL 中的具體操作。
what's the SQL
SQL(Structured Query Language 即結構化查詢語言)
SQL 語言主要用於存儲數據、更新數據和管理關系數據系統,由 IBM 開發。
SQL語句分為三種:
- DDL 語句 數據庫定義語言:數據庫、表、視圖、索引、存儲過程,例如create、alter
- DML 語句 數據庫操縱語言:插入數據 insert、刪除數據 delete、更新數據 update、查詢 select
- DCL 語句 數據庫控制語言:例如控制用戶的訪問權限grant、revoke
系統數據庫
MySQL 剛創建完成的時候會生成四個系統數據庫:information_schema、performance_schema、mysql、test、
-
- information_schema:虛擬庫,不占用磁盤內存,存儲的是數據庫啟動后的參數
- performance_schema:用於收集數據庫服務器性能的參數,記錄處理查詢請求時發生的各種事件、鎖等現象
- mysql:授權庫,存儲系統用戶的權限信息
- test:MySQL數據庫系統自動創建的測試數據庫
創建用戶
首先數據庫需要有創建用戶才可以登陸,這里創建用戶共有三種形式:
# 創建新用戶 create user 'gggg'@'hostlocal' identified by '123'; #在本機上創建一個密碼為123的用戶,只可在本機進行操作 create user 'alex'@'%' identified by '123'; #創建一個密碼為123的alex用戶,%表示所有人都可在任何機器上登陸 create user 'eva'@'192.168.20.%' identified by '123'; #創建一個密碼為123的eva用戶,只有在該局域網下的機器可登陸 #此時的用戶若想登陸,必須輸入創建用戶的計算機的ip mysql -h192.168.20.97 -ueva -p123;
為了使新創建的用戶有權限對數據庫進行操作(增刪改查,insert delete alter select),我們需要對該用戶進行授權。如一般用戶只可查看數據庫里的庫中的內容或者只讓其查看某個表的內容,或者賦予某個用戶可以修改數據的權利,就得賦予其一定的權限。注意,權限是你創建時給予的,你可以為了防止數據被篡改或者防止數據泄露只賦予其很少的權限。
這里我們需要了解一個關於數據庫內容的知識點。數據庫管理系統,即軟件(如mysql,oracle等)管理數據庫(即文件夾),數據庫整理表(即文件夾中有文件),表又是存放記錄的(即文件中有文件內容),所以賦予權限時也需要進行分層。
- 級別1:若你賦予其對數據庫的某項操作權限,意味着該用戶就可以對數據庫中所有的庫,以及每個庫中所有的表,每個表中所有的記錄進行該項操作;
- 級別2:若你只賦予其對某個指定的庫的某項操作權限,那就意味着該用戶只可對該指定的庫,以及該庫中所有的表,該庫中的表中所有的記錄進行該項操作;
- 級別3:若你只賦予其對某個指定的庫中指定的表進行某項操作權限,那就意味着該用戶只可對該指定的庫中的指定的表,以及該表中的所有記錄進行該項操作;
- 級別4:若你只賦予其對某個指定的庫中的指定的表中的指定的某項記錄進行某項操作的權限,那就意味着該用戶只僅僅可對該記錄進行該項操作
#創建對不同級別擁有操作權限的用戶,下面用查看操作select舉例 #級別1:對所有庫擁有權限 grant select on *.* to 'gggg1'@'localhost' identified by '123'; #級別2:對指定庫db1擁有權限 grant select on db1.* to 'gggg2'@'localhost' identified' by '123'; #級別3:對指定庫下的指定表擁有權限db1.t1 grant select on db1.t1 to 'gggg3'@'localhost' identified by '123'; #級別4:僅對某字段擁有權限 grant select (id,name) on db1.ti to 'gggg4'@'localhost' identified by '123';#賦予查看id和name的權限 grant select (id,name),update (name) on db1.t1 to 'gggg5'@'localhost' identified by '123'; #賦予查看id和name的權限,並賦予修改name的權限 #刪除權限 revoke select on db1.* to 'gggg5'@'%'; #修改完權限后記得手動刷新 flush privileges;
上述的 select 可根據需要換成以下任何權限:
alter | 修改表和索引 |
create | 創建數據庫和表 |
delete | 刪除表中已有記錄 |
drop | 刪除數據庫和表 |
index | 創建或刪除索引 |
insert | 插入數據 |
reference | |
select | 查詢表記錄 |
update | 更新表記錄 |
file | 讀寫服務器上的文件 |
process | 查看、殺死線程 |
reload | 重新授權表或清空日志、主機緩存、表緩存 |
shutdown | 關機 |
all privileges | 所有權限 |
usage | 無權限 |
基本增刪改查操作
以上是創建擁有相應權限的用戶的操作。那么在擁有權限后,登陸該用戶就可以對數據庫進行操作了,對數據庫的操作又分為對庫(文件夾)的操作、對表(文件)的操作和對記錄(文件內容)的操作。操作即增刪改查。
#對庫進行操作(文件夾) #增: create database db1 charset utf8;#在data目錄下新增一個db1庫(db1文件夾) #查: show databases;#查看data目錄下所有的庫(所有的文件夾) show create database db1;#查看新創建的db1庫 #改: alter database db1 charset gbk;#將db1的字符編碼改為gbk #刪: drop database db1;#刪除data目錄下的db1庫
#對表進行操作(文件) #首先要切換到指定文件夾下:use db1; #增: create table t1(id int,name char(10));#新建一個表,表中的字段必須表上數據類型,char表示字符串 create table t1(id int,name char(10))engine=innodb,default charset gbk; #新建一個表,可以指定引擎,不指定的話默認的引擎就是innodb,default是指定其字符編碼,若不指定默認為該庫的字符編碼 #查: show tables;#查看所有表 show create table t1;#查看創建的表 desc t1;#查看表結構,比show好用 #改: alter table t1 add age int;#給t1表加一個字段age,仍需指定數據類型 alter table t1 modify name char(12);#修改name數據類型的字節數 #刪: drop table t1;
#對記錄進行操作(文件內容) #增: insert into db1.t1 values(1,'gggg1'),(2,'gggg2');#按位置傳參 insert into db1.t1 (name) values('gggg'),('alex');#指定只傳name,id默認為null #查: select * from t1;#查看t1中全部記錄 select name,id from t1;#查看表中指定字段 #改: update t1 set name='SB' where id=4;#將id為4的字段的name修改為SB update t1 set name='SB' where name='alex';#將name為alex的字段的name修改為SB
update t1 set name='';#將name的值都修改為空,即清空所有name的內容
#刪: delete from t1 where id=4;#刪除指定字段 #清空: delete from t1;將記錄全部刪掉,也可認為是清空 truncate t1;#真正意義上的清空,當數據量較大時,這個的速度比delete快,推薦使用這個清空方式
這里補充一個內容,當我們要向表中新增記錄時,每次都要輸入id和name,而id是順序增加的,每次自己手動加入會顯得疲勞,這里我們就可以用到自增id的方式
#自增id(就是增加一個約束,該約束可以使系統自己添加id) create table t1 (id int primary key auto_increment,name char(10)); #primary key的意思為主鍵,主鍵不為空且唯一 #在一個字段中只能喲一個主鍵,通常是id create table t1 (id int not full unique,name char(10)); #not full unique的意思就是不為空且獨一無二,所以該命令與上面作用一樣,但推薦使用上者 #設定自增id后,增加字段就無需指定id insert into t1(name) values ('gggg1'),('gggg2');#此時id會自動按序生成
最后說一下拷貝表結構的操作
#拷貝表結構 create table t2 select * from t1 where 1=2;#只拷貝表結構,不拷貝表內容 alter table t2 modify id int primary key auto_increment;#將表修改成自增id
表操作
在MySQL中我們用到最多的是對表的操作,表中數據的查詢操作尤其是重中之重。
具體表操作和數據操作地址:http://www.cnblogs.com/zhuminghui/p/8352563.html