Linux系統(tǒng)環(huán)境
[root@mysql ~]# cat /etc/redhat-release #==》系統(tǒng)版本
CentOS release 6.7 (Final)
[root@mysql ~]# uname –r #==》內(nèi)核版本
2.6.32-573.el6.x86_64
[root@mysql ~]# uname -m #==》系統(tǒng)架構(gòu)
x86_64
[root@mysql ~]# echo $LANG #==》系統(tǒng)字符集
en_US.UTF-8
[root@mysql ~]# mysql –V #==》MySQL版本
mysql Ver 14.14 Distrib 5.5.32, for Linux (x86_64) using readline 5.1
MySQL配置文件
提示:/application/mysql是MySQL程序目錄
#==》MySQL啟動腳本音婶,一般復(fù)制到/etc/init.d/mysqld
/application/mysql/support-files/mysql.server
#==》MySQL主配置文件大刊,一 般復(fù)制到/etc/my.cnf
/application/mysql/support-files/my-small.cnf /etc/my.cnf
#==》MySQL所有二進制命令存放目錄,可復(fù)制到/usr/local/sbin目錄下或者添加環(huán)境變量
/application/mysql/bin/
#==》MySQL錯誤日志
/application/mysql/data/ MySQL01.err
#==》MySQL默認端口 3306
[root@mysql ~]# netstat -tlunp | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4780/mysqld
#==》MySQL套接字文件sock
/application/mysql-5.5.32/tmp/mysql.sock
什么是SQL
SQL英文全稱Structured Query Language器躏,中文意思是結(jié)構(gòu)化查詢語言,它是一種數(shù)據(jù)查詢和程序設(shè)計語言豌鸡,對關(guān)系數(shù)據(jù)庫中的數(shù)據(jù)進行定義和操作的語言方法潜必,是大多數(shù)關(guān)系數(shù)據(jù)庫管理系統(tǒng)所支持。
SQL結(jié)構(gòu)化查詢語言分類
1魂仍、數(shù)據(jù)查詢語言(DQL)
DQL全稱Data Query Language拐辽,其語句,也稱為“數(shù)據(jù)檢索語句”擦酌,用以從表中獲得數(shù)據(jù)俱诸,確定數(shù)據(jù)怎樣在應(yīng)用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞仑氛,其他DQL常用的保留字有WHERE乙埃,ORDER BY闸英,GROUP BY和HAVING.這些DQL保留字常與其他類型的SQL語句一起使用。具體語句例如:
mysql> select user,host,password from mysql.user;
2介袜、數(shù)據(jù)操作語言(DML)
DML全稱Data Manipulation Language甫何,其語句包括動詞INSERT,UPDATE和DELETE.它們分別用于添加遇伞,修改和刪除表中的行(數(shù)據(jù))辙喂。也稱為動作查詢語言。具體語句例如:
mysql> delete from mysql.user where user='oldboy' and host='localhost';
3鸠珠、事務(wù)處理語言(TPL)
它的語句能確保被DML語句影響的表的所有行及時得以更新巍耗。TPL語句包括BEGIN TRANSACTION,COMMIT和ROLLBACK.
4渐排、數(shù)據(jù)控制語言(DCL)
DCL全稱(Data Control Language)炬太,它的語句通過GRANT或REVOKE獲得許可,確定單個用戶和用戶組對數(shù)據(jù)庫對象的訪問驯耻。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問亲族。
mysql> grant all privileges on test.* to 'xiaoming'@'localhost' identified by '123456';
5、數(shù)據(jù)定義語言(DDL)
DDL全稱(Data Definition Language)可缚,其語句包括動詞CREATE和DROP霎迫。在數(shù)據(jù)庫中創(chuàng)建新表或刪除表(CREAT TABLE或DROP TABLE);為表加入索引等帘靡。DDL包括許多與人數(shù)據(jù)庫目錄中獲得數(shù)據(jù)有關(guān)的保留字知给,它也是動作查詢的一部分。
6描姚、指針控制語言(CCL)
CCL全稱(CURSOR Control Language)涩赢,它的語句,像DECLARE CURSOR轰胁,F(xiàn)ETCH INTO和UPDATE WHERE CURRENT用于對一個或多個表單獨行的操作谒主。
7、SQL語句最常見的分類一般就是3類:
#==》運維常用
(1)赃阀、DDL一數(shù)據(jù)定義語言(CREATE霎肯,ALTER,DROP)
#==》開發(fā)常用
(2)观游、DML一數(shù)據(jù)操作語言(SELECT懂缕,INSERT,DELETE王凑,UPDATE)
#==》運維常用
(3)、DCL一數(shù)據(jù)控制語言(GRANT工碾,REVOKE弱睦,COMMIT况木,ROLLBACK)
一旬迹、MySQL創(chuàng)建數(shù)據(jù)庫
命令語法 : create database 數(shù)據(jù)庫名稱 #==》數(shù)據(jù)庫名不能數(shù)字開頭
mysql> create database db01;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db01 |
| mysql |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
mysql> help create #==》查看create命令幫助奔垦,非常有用
二张症、MySQL創(chuàng)建數(shù)據(jù)庫并指定字符集
標注:MySQL支持多種字符集, 在編譯安裝MySQL可以指定所支持字符集阔逼,同時可以設(shè)置MySQL默認字符集嗜浮,如果沒有指定默認字符集危融,MySQL默認字符集是lating1拉丁字符
1雷袋、查看庫對應(yīng)的字符集
mysql> show create database db01\G
*************************** 1. row ***************************
Database: db01
Create Database: CREATE DATABASE `db01` /*!40100 DEFAULT CHARACTER SET latin1 */
1 row in set (0.00 sec)
2楷怒、創(chuàng)建db02數(shù)據(jù)庫并指定gbk字符集
mysql> create database db02 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 1 row affected (0.00 sec)
mysql> show create database db02\G
*************************** 1. row ***************************
Database: db02
Create Database: CREATE DATABASE `db02` /*!40100 DEFAULT CHARACTER SET gbk */
1 row in set (0.00 sec)
3抱完、創(chuàng)建db03數(shù)據(jù)庫并指定utf8字符集
mysql> create database db03 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.01 sec)
mysql> show create database db03\G
*************************** 1. row ***************************
Database: db03
Create Database: CREATE DATABASE `db03` /*!40100 DEFAULT CHARACTER SET utf8 */
1 row in set (0.00 sec)
4巧娱、MySQL編譯安裝支持字符集類型并指定默認utf8字符集
-DDEFAULT_CHARSET=utf8 \ #==》指定默認utf8字符集
-DDEFAULT_COLLATION=utf8_general_ci \ #==》指定默認utf8字符集
-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \ #==》安裝支持的字符集
三撮胧、MySQL顯示數(shù)據(jù)庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db01 |
| db02 |
| db03 |
| mysql |
| performance_schema |
+--------------------+
6 rows in set (0.00 sec)
mysql> help show #==》查看show命令幫助趴樱,非常有用
mysql> show databases like '%db%'; #==》%為通配符叁征,匹配所有內(nèi)容
+-----------------+
| Database (%db%) |
+-----------------+
| db01 |
| db02 |
| db03 |
+-----------------+
3 rows in set (0.00 sec)
mysql> use db01; #==》進入db01數(shù)據(jù)庫
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| db01 |
+------------+
1 row in set (0.00 sec)
四捺疼、MySQL刪除數(shù)據(jù)庫
mysql> show databases like 'db%';
+----------------+
| Database (db%) |
+----------------+
| db01 |
| db02 |
| db03 |
+----------------+
3 rows in set (0.00 sec)
mysql> drop database db03;
Query OK, 0 rows affected (0.00 sec)
mysql> show databases like 'db%';
+----------------+
| Database (db%) |
+----------------+
| db01 |
| db02 |
+----------------+
2 rows in set (0.01 sec)
mysql> help drop database #==》學(xué)習(xí)潛意識就要查看幫助
五、MySQL連接數(shù)據(jù)庫
語法格式:use 數(shù)據(jù)庫名
mysql> use db01 #==》進入db01數(shù)據(jù)庫
Database changed
mysql> select database();
+------------+
| database() |
+------------+
| db01 |
+------------+
1 row in set (0.00 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.5.32 |
+-----------+
1 row in set (0.00 sec)
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2019-07-26 14:31:44 |
+---------------------+
1 row in set (0.00 sec)
mysql> show tables;
Empty set (0.00 sec)
mysql> show tables like 'user'; #==》連接到mysql數(shù)據(jù)庫查詢指定表
+------------------------+
| Tables_in_mysql (user) |
+------------------------+
| user |
+------------------------+
1 row in set (0.00 sec)
mysql> show tables from mysql like 'user'; #==》沒有連接到mysql數(shù)據(jù)庫查詢指定表
+------------------------+
| Tables_in_mysql (user) |
+------------------------+
| user |
+------------------------+
1 row in set (0.00 sec)
六、刪除MySQL數(shù)據(jù)庫多余賬號
標注:如果drop刪除不了(一般是特殊字符或大寫)惕蹄,可以使用delete from語句進行刪除
mysql> create user 'test01'@'localhost' identified by '123456'; #==》創(chuàng)建測試用戶
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'test02'@'localhost' identified by '123456'; #==》創(chuàng)建測試用戶
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+--------+-----------+-------------------------------------------+
| user | host | password |
+--------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
| test02 | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| test01 | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+--------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql> drop user 'test01'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> delete from mysql.user where user='test02' and host='localhost';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> flush privileges; #==》一定要刷新,否則不生效
Query OK, 0 rows affected (0.00 sec)
mysql> help drop #==》多查幫助泪蔫,養(yǎng)成習(xí)慣
七撩荣、創(chuàng)建MySQL用戶并賦予用戶權(quán)限
語法格式:
授權(quán)命令 對應(yīng)權(quán)限 目錄:庫和表 用戶名和客戶端主機 用戶密碼
grant all privileges on db01.* to username@localhost identified by ‘password’
1、一條命令創(chuàng)建用戶并授權(quán)權(quán)限
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> grant all privileges on db01.* to 'xiaoming'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+----------+-----------+-------------------------------------------+
| user | host | password |
+----------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
| xiaoming | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql> show grants for 'xiaoming'@'localhost';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for xiaoming@localhost |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoming'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `db01`.* TO 'xiaoming'@'localhost' |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> flush privileges; #==》一定要刷新,否則不生效
Query OK, 0 rows affected (0.00 sec)
2卿吐、先創(chuàng)建用戶在授權(quán)權(quán)限
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> create user 'zhangshang'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on db01.* to 'zhangshang'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------------+-----------+-------------------------------------------+
| user | host | password |
+------------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | |
| zhangshang | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------------+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql> show grants for 'zhangshang'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for zhangshang@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'zhangshang'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `db01`.* TO 'zhangshang'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> flush privileges; #==》刷新權(quán)限
Query OK, 0 rows affected (0.00 sec)
mysql> help grant all #==》多查看幫忙,養(yǎng)成習(xí)慣
3磺樱、授權(quán)指定IP遠程連接數(shù)據(jù)庫
(1)竹捉、單獨IP匹配
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)
mysql> grant all privileges on db3.* to 'xiaozhang'@'10.0.0.200' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+-----------+------------+
| user | host |
+-----------+------------+
| xiaozhang | 10.0.0.200 |
| root | 127.0.0.1 |
| root | localhost |
+-----------+------------+
3 rows in set (0.00 sec)
(2)块差、百分號匹配
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)
mysql> grant all on db01.* to 'xiaoming'@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.01 sec)
mysql> select user,host from mysql.user;
+----------+-----------+
| user | host |
+----------+-----------+
| xiaoming | 10.0.0.% |
| root | 127.0.0.1 |
| root | localhost |
+----------+-----------+
3 rows in set (0.00 sec)
(3)、網(wǎng)段匹配
mysql> select user,host from mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
2 rows in set (0.00 sec)
mysql> grant all on db02.* to 'xiaohong'@'10.0.0.0/255.255.255.0' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+----------+------------------------+
| user | host |
+----------+------------------------+
| xiaohong | 10.0.0.0/255.255.255.0 |
| root | 127.0.0.1 |
| root | localhost |
+----------+------------------------+
3 rows in set (0.00 sec)
4鹉动、查看用戶可以授權(quán)類別
mysql> show grants for 'xiaozhang'@'10.0.0.200';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for xiaozhang@10.0.0.200 |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaozhang'@'10.0.0.200' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `db3`.* TO 'xiaozhang'@'10.0.0.200' |
| GRANT ALL PRIVILEGES ON `db1`.* TO 'xiaozhang'@'10.0.0.200' |
+-------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
mysql> revoke insert on db01.* from 'xiaozhang'@'10.0.0.200'; #==》指定撤回插入權(quán)限
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'xiaozhang'@'10.0.0.200';
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for xiaozhang@10.0.0.200 |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaozhang'@'10.0.0.200' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `db3`.* TO 'xiaozhang'@'10.0.0.200' |
| GRANT SELECT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `db01`.* TO 'xiaozhang'@'10.0.0.200' |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (0.00 sec)
#==》查看用戶指定對應(yīng)的表權(quán)限
mysql> select * from mysql.user where user='xiaozhang'\G
mysql> help grant #==》多查看幫忙蜀铲,養(yǎng)成習(xí)慣
5记劝、企業(yè)生產(chǎn)環(huán)境如何授權(quán)用戶權(quán)限
常規(guī)情況下只授權(quán) select/insert/update/delete 4個權(quán)限即可
八、MySQL回收指定權(quán)限或所有權(quán)限回收
mysql> show grants for 'xiaoming'@'localhost';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for xiaoming@localhost |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoming'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT ALL PRIVILEGES ON `db01`.* TO 'xiaoming'@'localhost' |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> revoke INSERT,SELECT,DELETE,UPDATE on db01.* from 'xiaoming'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'xiaoming'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for xiaoming@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoming'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
| GRANT CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `db01`.* TO 'xiaoming'@'localhost' |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'xiaoming'@'localhost';
Query OK, 0 rows affected (0.00 sec)
九、MySQL設(shè)置及修改用戶密碼
1耕驰、刪除root管理用戶朦肘,創(chuàng)建system管理員替換root管理用戶(root與system等價)
mysql> select user,host from mysql.user;
+----------+-----------+
| user | host |
+----------+-----------+
| root | 127.0.0.1 |
| root | localhost |
| xiaoming | localhost |
+----------+-----------+
3 rows in set (0.00 sec)
mysql> drop user 'root'@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec)
mysql> drop user 'root'@'localhost';
Query OK, 0 rows affected (0.02 sec)
mysql> drop user 'xiaoming'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to 'system'@'localhost' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to 'system'@'127.0.0.1' identified by '123456' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+--------+-----------+
| user | host |
+--------+-----------+
| system | 127.0.0.1 |
| system | localhost |
+--------+-----------+
2 rows in set (0.00 sec)
mysql> flush privileges; #==》一定要刷新權(quán)限弟断,否則不生效
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'system'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for system@localhost |
+------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'system'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
+------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
2、MySQL修改密碼三種方法
(1)刘急、方法一:命令行外修改方法
[root@mysql ~]# mysqladmin -u root -p'123456' password 'ssti123'
[root@mysql ~]# mysqladmin -u root -p password 'ssti123'
(2)排霉、方法二:sql語句update命令修改
標注:使用update命令修改用戶密碼攻柠,必須遵守兩點:
(2.1)瑰钮、必須指定where條件
(2.2)浪谴、必須使用password()函數(shù)加密更改密碼苟耻,否則修改的賬號密碼登錄失敗
mysql> update mysql.user set password=password("123456") where user="root" and host="localhost";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges; #==》一定要刷新權(quán)限凶杖,否則不生效
Query OK, 0 rows affected (0.00 sec)
(3)智蝠、方法三:
標注:此命令只能修改當前登錄用戶的密碼
mysql> set password=password("123456");
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges; #==》一定要刷新權(quán)限,否則不生效
Query OK, 0 rows affected (0.00 sec)
十漆撞、MySQL 表操作
語法格式:
create table <表名> (
<字段名1> <類型1>,
<字段名2> <類型2>,
<字段名3> <類型3>,
<字段名1> <類型1>);
1叫挟、創(chuàng)建表
mysql> create database testdb DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
+--------------------+
4 rows in set (0.00 sec)
mysql> use testdb
Database changed
mysql>
#==》第一種建表語句
create table student(
id int(4) not null,
name char(20) not null,
aga tinyint(2) NOT NULL default '0',
dept varchar(16) default NULL
);
#==》第二種建表語句
create table student02(
`id` int(4) not null, #==》學(xué)號员凝,數(shù)字類型健霹,長度為4糖埋,不為空值
`name` char(20) not null, #==》姓名瞳别,定長字符類型祟敛,長度為20馆铁,不為空值
`aga` tinyint(2) NOT NULL default '0', #==》年齡埠巨,數(shù)字類型辣垒,長度為2乍构,不為空岂丘,默認0值
`dept` varchar(16) default NULL #==》系奥帘,變長字符類型,長度為16扔茅,默認為空
)ENGINE=InnoDB DEFAULT CHARSET=gbk; #==》引擎和字符集召娜,默認引擎為InnoDB玖瘸,字符集,繼承庫的gbk
2蔑匣、查看表結(jié)構(gòu)
mysql> use testdb
Database changed
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)
mysql> show create table student\G #==》查已建表的語句(可看索引及創(chuàng)建表的信息)
*************************** 1. row ***************************
Table: student
Create Table: CREATE TABLE `student` (
`id` int(4) NOT NULL,
`name` char(20) NOT NULL,
`aga` tinyint(2) NOT NULL DEFAULT '0',
`dept` varchar(16) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
1 row in set (0.00 sec)
mysql> desc student; #==》查看表結(jié)構(gòu)
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| aga | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql> show columns from student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| aga | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
十一、表插入數(shù)據(jù)insert
命令格式: insert inot <表名>(字段1趴久,字段2…….) values(值1,值2…….)
表插入優(yōu)化之一:insert inot 插入數(shù)據(jù)盡量批量插入
mysql>
create table student(
id int(4) not null AUTO_INCREMENT,
name char(20) not null,
primary key(`id`)
);
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
mysql> show create table student;
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> select * from student;
Empty set (0.00 sec)
mysql> insert into student(id,name) values(1,'xiaoming');
Query OK, 1 row affected (0.01 sec)
mysql> insert into student(id,name) values(2,'zhangshang'); #==》一條數(shù)據(jù)插入
Query OK, 1 row affected (0.00 sec)
mysql> insert into student(id,name) values(3,'lishi');
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 1 | xiaoming |
| 2 | zhangshang |
| 3 | lishi |
+----+------------+
mysql> insert into student(id,name) values(4,'wangwu'),(5,'Tom'); #==》批量插入數(shù)據(jù)
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 1 | xiaoming |
| 2 | zhangshang |
| 3 | lishi |
| 4 | wangwu |
| 5 | Tom |
+----+------------+
5 rows in set (0.00 sec)
3 rows in set (0 mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec).00 sec)
mysql> help insert
十二、表查詢數(shù)據(jù)select
命令格式:select <字段1>,<字段2>…… from <表名> where <表達式>华匾,其中蜘拉,select/from/where不能隨便改旭旭,支持大小寫
表查詢優(yōu)化之一:select 查詢盡量指定明確的字段源梭,這樣查詢效率高
1废麻、單表查詢
mysql> use testdb
Database changed
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 1 | xiaoming |
| 2 | zhangshang |
| 3 | lishi |
| 4 | wangwu |
| 5 | Tom |
+----+------------+
5 rows in set (0.00 sec)
mysql> select id,name from student;
+----+------------+
| id | name |
+----+------------+
| 1 | xiaoming |
| 2 | zhangshang |
| 3 | lishi |
| 4 | wangwu |
| 5 | Tom |
+----+------------+
5 rows in set (0.00 sec)
mysql> select id,name from student limit 2;
+----+------------+
| id | name |
+----+------------+
| 1 | xiaoming |
| 2 | zhangshang |
+----+------------+
2 rows in set (0.00 sec)
mysql> select id,name from student where id=1;
+----+----------+
| id | name |
+----+----------+
| 1 | xiaoming |
+----+----------+
1 row in set (0.00 sec)
mysql> select id,name from student where id > 1 and id < 3;
+----+------------+
| id | name |
+----+------------+
| 2 | zhangshang |
+----+------------+
1 row in set (0.00 sec)
mysql> select id,name from student where name='xiaoming' or id=3;
+----+----------+
| id | name |
+----+----------+
| 1 | xiaoming |
| 3 | lishi |
+----+----------+
2 rows in set (0.00 sec)
2、多表查詢
mysql> select * from student01;
+----+------------+-------+
| id | name | class |
+----+------------+-------+
| 1 | xiaoming | 1班 |
| 21 | xiaozhang | 2班 |
| 33 | xiaohong | 2班 |
| 2 | xiaocheng | 2班 |
| 3 | zhangshang | 3班 |
| 4 | lishi | 3班 |
+----+------------+-------+
6 rows in set (0.00 sec)
mysql> select * from grade;
+----+--------+---------+
| id | course | chengji |
+----+--------+---------+
| 1 | shuxue | 78 |
| 21 | shuxue | 88 |
| 2 | shuxue | 93 |
| 3 | shuxue | 45 |
+----+--------+---------+
4 rows in set (0.00 sec)
mysql>select student01.id,student01.name,grade.course,grade.chengji from student01,grade where student01.id=grade.id;
+----+------------+--------+---------+
| id | name | course | chengji |
+----+------------+--------+---------+
| 1 | xiaoming | shuxue | 78 |
| 21 | xiaozhang | shuxue | 88 |
| 2 | xiaocheng | shuxue | 93 |
| 3 | zhangshang | shuxue | 45 |
+----+------------+--------+---------+
4 rows in set (0.00 sec)
十三澜公、使用explain查詢select 查詢語句執(zhí)行計劃艾恼,即可以判斷是否引用索引情況
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 1 | xiaoming |
| 2 | zhangshang |
| 3 | lishi |
| 4 | wangwu |
| 5 | Tom |
+----+------------+
5 rows in set (0.00 sec)
mysql> explain select id,name from student where name="wangwu"\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: student
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 5
Extra: Using where
1 row in set (0.00 sec)
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
mysql> explain select id,name from student where name="wangwu"\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: student
type: ref
possible_keys: index_name
key: index_name
key_len: 40
ref: const
rows: 1
Extra: Using where; Using index
1 row in set (0.00 sec)
mysql> help explain #==》多查看幫助
十四、修改表中指定條件固定列數(shù)據(jù)update
命令格式: update <表名> set 字段=新值 where 條件(一定要添加條件并且注意條件)
注意:如果update后面沒有添加where條件語句會把表中的數(shù)據(jù)都修改了,這是很嚴重的問題息罗。
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 3 | lishi |
| 5 | Tom |
| 4 | wangwu |
| 1 | xiaoming |
| 2 | zhangshang |
+----+------------+
5 rows in set (0.00 sec)
mysql> update student set name='oldboy' where name='Tom';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 3 | lishi |
| 5 | oldboy |
| 4 | wangwu |
| 1 | xiaoming |
| 2 | zhangshang |
+----+------------+
5 rows in set (0.00 sec)
update防止誤更新(update)操作辦法
[root@mysql ~]# echo " alias mysql='mysql -U'" >> /etc/profile
[root@mysql ~]# tail -1 /etc/profile
alias mysql='mysql -U'
[root@mysql ~]# mysql -uroot -p123456
mysql> use testdb
Database changed
mysql> select * from student;
+----+------------+
| id | name |
+----+------------+
| 3 | lishi |
| 5 | oldboy |
| 4 | wangwu |
| 1 | xiaoming |
| 2 | zhangshang |
+----+------------+
5 rows in set (0.00 sec)
mysql> update student set name="oldgirl";
#==》報錯原因是沒有添加where條件,防止update誤操作更新
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
mysql> update student set name="oldgirl" where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
+----+----------+
| id | name |
+----+----------+
| 3 | lishi |
| 5 | oldboy |
| 2 | oldgirl |
| 4 | wangwu |
| 1 | xiaoming |
+----+----------+
5 rows in set (0.00 sec)
十五挨摸、刪除表中數(shù)據(jù)delete
命令格式: delete from <表名> where 條件(delete一定要加條件得运,否則整個表都會刪除熔掺,此命令操作需要謹慎)
1、delete 刪除表中數(shù)據(jù)(邏輯一行一行刪除)
mysql> use testdb
Database changed
mysql> select * from student;
+----+----------+
| id | name |
+----+----------+
| 3 | lishi |
| 5 | oldboy |
| 2 | oldgirl |
| 4 | wangwu |
| 1 | xiaoming |
+----+----------+
5 rows in set (0.00 sec)
mysql> delete from student where id=4 and name='wangwu';
Query OK, 1 row affected (0.02 sec)
mysql> select * from student;
+----+----------+
| id | name |
+----+----------+
| 3 | lishi |
| 5 | oldboy |
| 2 | oldgirl |
| 1 | xiaoming |
+----+----------+
4 rows in set (0.00 sec)
mysql> delete from student where id>4;
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+----+----------+
| id | name |
+----+----------+
| 3 | lishi |
| 2 | oldgirl |
| 1 | xiaoming |
+----+----------+
3 rows in set (0.00 sec)
2、truncate 清空表中所有內(nèi)容(物理清空报慕,直接刪除文件)
mysql> select * from student;
+----+----------+
| id | name |
+----+----------+
| 3 | lishi |
| 2 | oldgirl |
| 1 | xiaoming |
+----+----------+
3 rows in set (0.00 sec)
mysql> truncate table student; #==》此命令操作需要謹慎
Query OK, 0 rows affected (0.01 sec)
mysql> select * from student;
Empty set (0.00 sec)
十六眠冈、增刪改表中的字段 alter table
命令格式:alter table <表名> add 字段 類型 其它;
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
#==》默認age字段添加在表中最后一列
mysql> alter table student add age int(3);
Query OK, 4 rows affected (0.06 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| age | int(3) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
#==》指定在name字段后面添加sex字段
mysql> alter table student add sex char(6) after name;
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| sex | char(6) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
#==》指定xuehao字段s添加到表中第一列
mysql> alter table student add xuehao int(10) first;
Query OK, 4 rows affected (0.15 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc student;
+--------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+----------------+
| xuehao | int(10) | YES | | NULL | |
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| sex | char(6) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+--------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
#==》刪除指定xuehao字段
mysql> alter table student drop xuehao;
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| sex | char(6) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
#==》修改age字段類型int型修改為char型
mysql> alter table student modify age char(20);
Query OK, 4 rows affected (0.04 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc student;
+-------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| sex | char(6) | YES | | NULL | |
| age | char(20) | YES | | NULL | |
+-------+----------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
#==》修改age字段名稱及類型
mysql> alter table student change age kecheng varchar(10);
Query OK, 4 rows affected (0.05 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc student;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | MUL | NULL | |
| sex | char(6) | YES | | NULL | |
| kecheng | varchar(10) | YES | | NULL | |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
十七、修改表名rename
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)
mysql> rename table student to xuesheng;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| xuesheng |
+------------------+
1 row in set (0.00 sec)
mysql> alter table xuesheng rename to student;
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)
十八崔挖、刪除表或庫 drop
1狸相、刪除庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
| wiki |
+--------------------+
5 rows in set (0.00 sec)
mysql> drop database wiki; #==》刪除wiki庫
Query OK, 0 rows affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb |
+--------------------+
4 rows in set (0.00 sec)
2、刪除表
mysql> use testdb
Database changed
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| bk01 |
| student |
+------------------+
2 rows in set (0.00 sec)
mysql> drop table bk01;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| student |
+------------------+
1 row in set (0.00 sec)