MySQL常用命令
1.mysql\bin:mysqld.exe --console
如果安裝成功以上命令將輸出一些mysql啟動及InnoDB信息。
2.mysqladmin --version:版本信息
快速啟動MySQL服務:net start mysql
快速關閉MySQL服務:net stop mysql
3.鍵入mysql進入mysql交互環境:
show databases;
注意:MySQL命令終止符為分號 (;)
4.
mysqladmin -u root password "new_password"; Mysql安裝成功後,默認的root用戶密碼為空,你可以使用此命令來創建root用戶的密碼
mysql -u root -p 登錄mysql
ps -ef | grep mysqld
./mysqladmin -u root -p shutdown
5.增加用戶
insert into user
(host, user, password,
select_priv, insert_priv, update_priv)
values ('localhost', 'guest',
password('guest123'), 'Y', 'Y', 'Y'); 在對應的權限列中,為用戶指定權限"Y"
flush privileges; 重新載入授權表
6.
USE 數據庫名 :選擇要操作的Mysql數據庫,使用該命令後所有Mysql命令都只針對該數據庫。
SHOW DATABASES: 列出 MySQL 數據庫管理系統的數據庫列表。
SHOW TABLES: 顯示指定數據庫的所有表,使用該命令前需要使用 use 命令來選擇要操作的數據庫。
SHOW COLUMNS FROM 數據表: 顯示數據表的屬性,屬性類型,主鍵信息 ,是否為 NULL,默認值等其他信息。
SHOW INDEX FROM 數據表: 顯示數據表的詳細索引信息,包括PRIMARY KEY(主鍵)。
SHOW TABLE STATUS LIKE 數據表: 該命令將輸出Mysql數據庫管理系統的性能及統計信息。
7.數據庫、表、插入、查詢、更新、刪除、增加、like、排序、join、null、alter、數據重復、導入導出
注意:所有的數據庫名,表名,表字段都是區分大小寫的。
mysqladmin -u root -p create TUTORIALS 創建數據庫
mysqladmin -u root -p drop TUTORIALS 刪除數據庫
use TUTORIALS;
CREATE TABLE table_name (column_name column_type); //CREATE TEMPORARY TABLE table_name... 創建臨時表
創建表的詳細例子
tutorials_tbl(
tutorial_id INT NOT NULL AUTO_INCREMENT, //AUTO_INCREMENT:列自增的屬性
tutorial_title VARCHAR(100) NOT NULL,
tutorial_author VARCHAR(40) NOT NULL,
submission_date DATE,
PRIMARY KEY ( tutorial_id ) //主鍵的設置
);
DROP TABLE table_name ;
INSERT INTO table_name ( field1, field2,...fieldN )
VALUES
( value1, value2,...valueN );
注意:如果數據是字符型,必須使用單引號或者雙引號,如:"value"。
select field1, field2,...fieldN from table_name1, table_name2...
[WHERE Clause]
[OFFSET M ][LIMIT N]
查詢語句總結:
查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,並使用WHERE語句來設定查詢條件。
SELECT 命令可以讀取一條或者多條記錄。
你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數據
你可以使用 WHERE 語句來包含任何條件,使用AND或者OR指定一個或多個條件。
你可以通過OFFSET指定SELECT語句開始查詢的數據偏移量。默認情況下偏移量為0。
你可以使用 LIMIT 屬性來設定返回的記錄數。
MySQL的WHERE子句的字符串比較是不區分大小寫的,可以使用 BINARY 關鍵字來設定WHERE子句的字符串比較是區分大小寫的。
SELECT * from tutorials_tbl WHERE BINARY tutorial_author='sanjay';
UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]
你可以同時更新一個或多個字段。
你可以在 WHERE 子句中指定任何條件。
你可以在一個單獨表中同時更新數據。
DELETE FROM table_name [WHERE Clause]
如果沒有指定 WHERE 子句,MySQL表中的所有記錄將被刪除。
你可以在 WHERE 子句中指定任何條件
您可以在單個表中一次性刪除記錄。
like子句
SELECT * from tutorials_tbl WHERE tutorial_author LIKE '%jay';
排序
你可以使用任何字段來作為排序的條件,從而返回排序後的查詢結果。
你可以設定多個字段來排序。
你可以使用 ASC 或 DESC 關鍵字來設置查詢結果是按升序或降序排列。 默認情況下,它是按升排列。
你可以添加 WHERE...LIKE 子句來設置條件。
SELECT * from tutorials_tbl ORDER BY tutorial_author ASC
使用MySQL的JOIN來連接兩張表來讀取tutorials_tbl表中所有tutorial_author字段在tcount_tbl表對應的tutorial_count字段值:
SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a, tcount_tbl b
WHERE a.tutorial_author = b.tutorial_author;
SELECT a.tutorial_id, a.tutorial_author, b.tutorial_count
FROM tutorials_tbl a LEFT JOIN tcount_tbl b
ON a.tutorial_author = b.tutorial_author;
NULL
MySQL提供了三大運算符:
IS NULL: 當列的值是NULL,此運算符返回true。
IS NOT NULL: 當列的值不為NULL, 運算符返回true。
<=>: 比較操作符(不同於=運算符),當比較的的兩個值為NULL時返回true。
關於 NULL 的條件比較運算是比較特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在MySQL中,NULL值與任何其它值的比較(即使是NULL)永遠返回false,即 NULL = NULL 返回false 。
MySQL中處理 NULL 使用 IS NULL 和 IS NOT NULL 運算符。
alter
如下命令使用了 ALTER 命令及 DROP 子句來刪除以上創建表的 i 字段:
ALTER TABLE testalter_tbl DROP i;
注意:如果數據表中只剩余一個字段則無法使用DROP來刪除字段。
ALTER TABLE testalter_tbl ADD i INT;
如果你需要指定新增字段的位置,可以使用MySQL提供的關鍵字 FIRST (設定位第一列), AFTER 字段名(設定位於某個字段之後)。
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;
如果需要修改字段類型及名稱, 你可以在ALTER命令中使用 MODIFY 或 CHANGE 子句 。
把字段 c 的類型從 CHAR(1) 改為 CHAR(10),可以執行以下命令:
ALTER TABLE testalter_tbl MODIFY c CHAR(10); # modify
ALTER TABLE testalter_tbl CHANGE i j BIGINT;
指定字段 j 為 NOT NULL 且默認值為100 ,如果你不設置默認值,MySQL會自動設置該字段默認為 NULL。
ALTER TABLE testalter_tbl MODIFY j BIGINT NOT NULL DEFAULT 100;
ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
查看數據表類型可以使用 SHOW TABLE STATUS 語句。修改數據表類型,可以使用 ALTER 命令及 TYPE 子句來完成。
ALTER TABLE testalter_tbl TYPE = MYISAM;
ALTER TABLE testalter_tbl RENAME TO alter_tbl;
讀取不重復的數據可以在 SELECT 語句中使用 GROUP BY 或者 DISTINCT 關鍵字來過濾重復數據。
SELECT DISTINCT last_name, first_name FROM person_tbl ORDER BY last_name;
SELECT last_name, first_name FROM person_tbl GROUP BY (last_name, first_name);
刪除數據表中的重復數據:添加 INDEX(索引) 和 PRIMAY KEY(主鍵)
將數據表 tutorials_tbl 數據導出到 /tmp/tutorials.txt 文件中:
SELECT * FROM tutorials_tbl INTO OUTFILE '/tmp/tutorials.txt'; # into outfile
SELECT * FROM tutorials_tbl INTO OUTFILE '/tmp/tutorials.txt'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' #設置輸出的格式
LINES TERMINATED BY '\r\n';
LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl;
LOAD DATA LOCAL INFILE 'dump.txt' INTO TABLE mytbl (b, c, a); 按照插入表的列的順序存儲數據
8.正則表達式
MySQL中使用 REGEXP 操作符來進行正則表達式匹配。 # regexp
^ 匹配輸入字符串的開始位置。如果設置了 RegExp 對象的 Multiline 屬性,^ 也匹配 '\n' 或 '\r' 之後的位置。
$ 匹配輸入字符串的結束位置。如果設置了 RegExp 對象的 Multiline 屬性,$ 也匹配 '\n' 或 '\r' 之前的位置。
. 匹配除 "\n" 之外的任何單個字符。要匹配包括 '\n' 在內的任何字符,請使用象 '[.\n]' 的模式。
[...] 字符集合。匹配所包含的任意一個字符。例如, '[abc]' 可以匹配 "plain" 中的 'a'。
[^...] 負值字符集合。匹配未包含的任意字符。例如, '[^abc]' 可以匹配 "plain" 中的'p'。
p1|p2|p3 匹配 p1 或 p2 或 p3。例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 則匹配 "zood" 或 "food"。
* 匹配前面的子表達式零次或多次。例如,zo* 能匹配 "z" 以及 "zoo"。* 等價於{0,}。
+ 匹配前面的子表達式一次或多次。例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等價於 {1,}。
{n} n 是一個非負整數。匹配確定的 n 次。例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的兩個 o。
{n,m} m 和 n 均為非負整數,其中 n <= m 。最少匹配 n 次且最多匹配 m 次。
查找name字段中以'st'為開頭的所有數據:
SELECT name FROM person_tbl WHERE name REGEXP '^st';
查找name字段中包含'mar'字符串的所有數據:
SELECT name FROM person_tbl WHERE name REGEXP 'mar';
查找name字段中以元音字符開頭且以'ok'字符串結尾的所有數據:
SELECT name FROM person_tbl WHERE name REGEXP '^[aeiou]|ok$';
9.事務
MySQL 事務主要用於處理操作量大,復雜度高的數據。比如說,在人員管理系統中,你刪除一個人員,你即需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!
在MySQL中只有使用了 Innodb 數據庫引擎的數據庫或表才支持事務
事務處理可以用來維護數據庫的完整性,保證成批的SQL語句要麼全部執行,要麼全部不執行
事務用來管理insert,update,delete語句
一般來說,事務是必須滿足4個條件(ACID): Atomicity(原子性)、Consistency(穩定性)、Isolation(隔離性)、Durability(可靠性)
1、事務的原子性:一組事務,要麼成功;要麼撤回。
2、穩定性 : 有非法數據(外鍵約束之類),事務撤回。
3、隔離性:事務獨立運行。一個事務處理後的結果,影響了其他事務,那麼其他事務會撤回。事務的100%隔離,需要犧牲速度。
4、可靠性:軟、硬件崩潰後,InnoDB 數據表驅動會利用日志文件重構修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit選項 決定什麼時候吧事務保存到日志裡。
開啟事務:START TRANSACTION 或 BEGIN
提交事務(關閉事務):COMMIT
放棄事務(關閉事務):ROLLBACK
折返點
SAVEPOINT adqoo_1
ROLLBACK TO SAVEPOINT adqoo_1
發生在折返點 adqoo_1 之前的事務被提交,之後的被忽略
10.索引
索引分單列索引和組合索引。單列索引,即一個索引只包含單個列,一個表可以有多個單列索引,但這不是組合索引。組合索引,即一個索引包含多個列。
創建索引時,你需要確保該索引是應用在 SQL 查詢語句的條件(一般作為 WHERE 子句的條件)。
實際上,索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄。
SHOW INDEX FROM table_name
CREATE INDEX indexName ON mytable(username(length));
ALTER mytable ADD INDEX [indexName] ON (username(length))
DROP INDEX [indexName] ON mytable;
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵,這意味著索引值必須是唯一的,且不能為NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現多次。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引為 FULLTEXT ,用於全文索引。
alter命令處理索引:
ALTER TABLE testalter_tbl ADD INDEX (c);
ALTER TABLE testalter_tbl DROP INDEX (c);