一. 數據庫查詢語言
1)查詢employees數據表中的所有數據記錄: select * from employees;
2)查詢employees表中的employee_id, first_name記錄:select employee_id,first_name from employees;
3)查詢test表中score列數據的所有平均值:select AVG(score) from test;
4)統計有多少條employee_id記錄,顯示最終統計個數:select count(employee_id) from employees;
5)如果有多條相同的email記錄,DISTINCT可以去除重復記錄:select distinct(e_mail) from employees;
6)查詢last_name為willian的所有記錄,並顯示出相應的first_name記錄:select first_name from employees where last_name="willian";
7)查詢表中所有記錄,按周hire_date列排序,DESC為降序,AES為升序:select * from employees order by hire_date DESC;
8)限制僅顯示數據記錄中的前兩行記錄:select * from employees limit 2;
二. 數據庫定義語言
1. 新建數據庫:create database hr;
2. 顯示所有數據庫:show databases;
3. 新建數據庫中的表:首先進入相應的數據庫 use hr; 然后create table + 表名(表項1,表項2...)
其中ENGINE=innodb DEFAULT CHARSET=UTF8; #設置默認存儲引擎和默認字體,也可單獨寫
4. show tables;查看數據表(只顯示表名,如果想查看詳細信息,describe + 表名,如5)
5. 查看數據表的數據結構 :describe employee;
6. alter database:修改數據庫屬性,屬性被保存在數據庫目錄的db.opt文件中。
例如:修改數據庫默認字符集和排序規則
alter database hr default character set=utf8;
alter database hr default collate=utf8_general_ci;
7. 修改數據表結構,如添加刪除的列,創建刪除的索引,修改數據類型等
例如:創建數據表test1后,通過alter語句修改數據表的相關信息
create table test1(id int, name char(20));
alter table test1 rename test2; #修改test1名字為test2
alter table test2 add date timestamp; #添加date項,類型為時間戳
alter table test2 add note char(50); #增加note項
alter table test2 add index (date); #給date項添加普通索引
alter table test2 modify id tinyint not null, change name first_name char(20); #修改id類型為tinyint,並設為非空,修改name值為first_name
alter table test2 add primary key(id); #給id添加主索引
alter table test2 drop column note; #刪除note行
8. 刪除名為hr的數據表:drop table hr;
9 對一個或多個數據表重命名
rename table test1 to temp, test3 to test1, temp to test3;
10. 刪除數據庫及當中的數據表
drop database hr;
11. 刪除索引
刪除索引可以使用ALTER TABLE或DROP INDEX語句來實現。DROP INDEX可以在ALTER TABLE內部作為一條語句處理,其格式如下:
drop index index_name on table_name ; #一般用這個就足夠了
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
其中,在前面的兩條語句中,都刪除了table_name中的索引index_name。而在最后一條語句中,只在刪除PRIMARY KEY索引中使用,因為一個表只可能有一個PRIMARY KEY索引,因此不需要指定索引名。
如果沒有創建PRIMARY KEY索引,但表具有一個或多個UNIQUE索引,則MySQL將刪除第一個UNIQUE索引。
如果從表中刪除某列,則索引會受影響。對於多列組合的索引,如果刪除其中的某列,則該列也會從索引中刪除。如果刪除組成索引的所有列,則整個索引將被刪除。
例如:
使用命令 mysql> drop index date on test2;
三. 數據庫操作語言
1. insert


結果如下
2. update
用來更新數據表中現有的數據值(僅修改滿足where條件的數據記錄)
update hr.employee set name="luck" where id=3; #修改lucky為luck
3. load data infile
快速從文本文件中讀取數據到數據表中
分隔符:文件默認使用Tab鍵位列分隔符,換行符為行分隔符,可以使用FIELDS TERMINATED BY 設置列分隔符,通過LINES STARTING BY設置行分隔符。
例如:提前創建數據文件/tmp/txt與txt2,通過LOAD語句加載數據到employee數據表
cat /tmp/txt
004 ellis ellis@gmail.com sale
mysql> load data infile '/tmp/txt' into table hr.employee;
cat /tmp/txt2
005,berry,berry@gmail.com,admin
mysql> load data infile '/tmp/txt2' into table hr.employee fields terminated by ',';
結果如下
4.delete
把滿足條件的數據記錄刪除並返回刪除的記錄數量,如下
mysql> use hr;
mysql> delete from employee where id=5;
mysql> delete from employee where name="ellis";
四. 添加刪除用戶,授權,修改用戶密碼
1. 創建用戶:
命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password';
例子: CREATE USER 'hong'@'localhost' IDENTIFIED BY '123456';
CREATE USER 'cat'@'localhost' IDENTIFIED BY '';
注意:
username - 你將創建的用戶名,
host - 指定該用戶在哪個主機上可以登陸,此處的"localhost",是指該用戶只能在本地登錄,不能在另外一台機器上遠程登錄;
如果想遠程登錄的話,將"localhost"改為"%",表示在任何一台電腦上都可以登錄;
也可以指定某台機器可以遠程登錄,此時用指定機器的ip;
password - 該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務器。
2. 授權:
命令:GRANT privileges ON databasename.tablename TO 'username'@'host'
注意:
privileges - 用戶的操作權限,如SELECT , INSERT , UPDATE 等(詳細列表見該文最后面).如果要授予所的權限則使用ALL.;
databasename - 數據庫名,
tablename-表名,如果要授予該用戶對所有數據庫和表的相應操作權限則可用*表示, 如*.*.
例子: GRANT SELECT, INSERT ON mq.* to 'hong'@'localhost';
3. 創建用戶同時授權
1.創建tomcat賬戶,該賬戶僅可以通過本機連接mysql服務器,對hr數據庫中的所有數據表擁有所有權限
mysql> grant all privileges on hr.* to 'tomcat'@'localhost' identified by '1234'; #注意中間沒逗號,這是一個語句
2. 創建tomcat賬戶,此賬戶只能從主機192.168.0.88連接到服務器,對hr數據庫中的所有數據表僅有查詢權限
mysql > grant select on hr.* to 'tomcat'@’192.168.0.88‘ identified by 'pass';
3. 創建admin賬戶,賦予該賬戶對所有數據庫的管理權限,不需密碼即可從本機連接mysql服務器
mysql>grant reload,process on *.* to 'admin'@'localhost';
4. 創建jacob賬戶,賦予jacob對hr數據庫中所有數據表的所有權限,該賬戶可從任何主機連接服務器
mysql> grant all on hr.* to 'jacob'@'%' identified by 'pass';
mysql> flush privileges;
PS:必須執行flush privileges;
否則登錄時提示:ERROR 1045 (28000): Access denied for user 'user'@'localhost' (using password: YES )
4. 設置與更改用戶密碼的3種方式
1.通過命令:SET PASSWORD設置密碼
格式:SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
例子: SET PASSWORD FOR 'admin'@'localhost' = PASSWORD("321");
2. 直接修改數據庫權限數據表mysql.user
mysql>update mysql.user set password=password('新密碼') where User="admin" and Host="localhost";
mysql>flush privileges;
注意:MySQL5.7 mysql.user表沒有password字段改 authentication_string;
3. 通過mysqladmin設置賬戶密碼
mysqladmin -u root -p password '123'
-p的作用是提示輸入舊密碼,若沒有舊密碼,可忽略。
4. 有時候設置的root密碼會忘記,怎么修改呢?
【mysql 5.6】
vim /etc/mysql/my.cnf(有的版本是 /etc/my.cnf
在[mysqld]的段中加上一句:
skip-grant-tables 保存並且退出vim
重新啟動mysqld
# /etc/init.d/mysql restart ( service mysql restart )
登錄並修改MySQL的root密碼
mysql> USE mysql ;
mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ;
mysql> flush privileges ;
mysql> quit
將MySQL的登錄設置修改回來
vim /etc/my.cnf
將剛才在[mysqld]的段中加上的skip-grant-tables刪除 或者注釋掉
重新啟動mysqld
# /etc/init.d/mysql restart ( service mysq
l restart )
[mysql5.7]
進入mysql之前不變,只改一句。
mysql> update mysql.user set
authentication_string=password('123qwe') where user='root' and Host = 'localhost';
補充內容:
mysql 5.6,5.7裝好之后會有一個臨時密碼,存放位置 grep "temporary password" /var/log/mysqld.log
mysql5.7密碼安全策略
5. 撤銷用戶權限
命令: REVOKE privilege ON databasename.tablename FROM 'username'@'host';
例子: REVOKE SELECT ON hr.* FROM 'admin'@'localhost';
revoke all on hr.* from tomcat@'%'; #撤銷tomcat對hr數據庫的所有權限
revoke select on *.* from jacob@'%'; #撤銷jacob對所有數據庫的查詢權限
注意:
假如你在給用戶'hong'@'localhost''授權的時候是這樣的(或類似的):GRANT SELECT ON test.user TO 'hong'@'localhost', 則在使用REVOKE SELECT ON *.* FROM 'hong'@'localhost';命令並不能撤銷該用戶對test數據庫中user表的SELECT 操作.
相反,如果授權使用的是GRANT SELECT ON *.* TO 'hong'@'localhost';則REVOKE SELECT ON test.user FROM 'hong'@'localhost';也不能撤銷該用戶對test數據庫中user表的Select 權限.
具體信息用命令SHOW GRANTS FOR 'hong'@'localhost'; 查看.
6.刪除用戶
命令: DROP USER 'username'@'host';
比如:mysql> drop user jerry@'172.16.0.253';
有時候可能需要先查看用戶有哪些,命令如下
mysql> use mysql;
mysql> select host,user from mysql.user;
7.查看用戶的授權
mysql> show grants for hong@localhost;
+---------------------------------------------+
| Grants for dog@localhost |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'hong'@'localhost' |
| GRANT INSERT ON `mq`.* TO 'hong'@'localhost' |
+---------------------------------------------+
2 rows in set (0.00 sec)
注意:GRANT USAGE: usage權限就是空權限,默認create user的權限,只能連庫,啥也不能干
五. MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:
1、數據庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴格區分大小寫的;
比如select * from mysql.user;命令中,User,Host均是列名,所以大小寫忽略。
六. 數據表的常用數據類型和常用屬性
常用數據類型
常用屬性
七. 用戶權限說明表

