在centos6.5安裝教程不贅述。安裝後第一次登陸MySQL時,須要從新設置密碼。MySQL 5.7 在初始安裝後會生成隨機初始密碼,並在/etc/my.cnf配置文件中找到[mysqld]下的log.err配置的目錄/var/log/mysqld.log 中有記錄,能夠經過 cat 命令查看,找 password 關鍵字。html
# cat /var/log/mysqld.log | grep password 2017-10-20T07:58:04.065507Z 1 [Note] A temporary password is generated for root@localhost: boEsPgrCf1.X
找到密碼後,在本機以初始密碼登陸,經過ALTER USER命令修改 root 用戶的密碼, 而後退出登陸,從新以root用戶和剛設置的密碼進行登陸便可。mysql
#若是不設置初始密碼則不容許操做 mysql> SHOW DATABASES; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. #MySQL改變了密碼的強度,須要知足要求才能夠經過密碼設置 mysql> alter user 'root'@'localhost' identified by 'fefjay.2017'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements #正確的密碼設置 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'FEFJay@2017'; Query OK, 0 rows affected (0.00 sec)
查看MySQL官方文檔,是這樣解釋的:linux
MySQL's validate_password plugin is installed by default. This will require that passwords contain at least one upper case letter, one lower case letter, one digit, and one special character, and that the total password length is at least 8 characters.
大概意思就是MySQL5.7之後默認安裝密碼校驗器,新設置的密碼必須知足這樣的條件:包含至少一個大寫字母、至少一個小寫字母、至少一個數字、至少一個特殊字符(好比「@」、「_」之類的)、且總長度至少爲8。
因此設置相應強度的密碼纔會經過校驗,其實也能夠經過禁用密碼校驗插件實現登陸MySQL服務,而後能夠進行更改密碼、查詢等操做,具體網上有不少不錯的方法,此處再也不贅述。git
數據庫對名稱是大小寫敏感的。正則表達式
#建立數據庫 CREATE DATABAE 庫名; #刪庫 DROP DATABASE 庫名;
INSERT INTO 表名(列名1,列名2,列名3) VALUES(行1值1, 行1值2, 行1值3);
INSERT INTO 表名(列名1,列名2,列名3) VALUES(行1值1,行1值2,行1值3), (行2值1,行2值2,行2值3), (行3值1,行3值2,行3值3);
更新和刪除操做必定要注意添加WHERE限制條件,不然很危險!!!
更新和刪除操做只是對錶的內容更改,並不會改變表的結構。sql
UPDATE 表名字 SET 列1=值1,列2=值2 WHERE 條件;
DELETE FROM 表名字 WHERE 條件;
SELECT 列1,列2,列3 FROM 表名 WHERE 限制條件;
最終結果只來自一個表的狀況。條件裏嵌套有查詢,根據須要可多層嵌套。經過比較符鏈接。shell
SELECT ... FROM 表名 WHERE department IN (SELECT department FROM ...)
最終結果來自多個表的狀況,有某些列做爲鏈接字段。數據庫
方式一:SELECT ... FROM 表a,表b WHERE a.某列名 = b.某列名; 方式二:SELECT ... FROM 表a (INNER) JOIN 表b ON a.某列名 = b.某列名; 方式三:SELECT ... FROM 表a CROSS JOIN 表b WHERE a.某列名 = b.某列名;
特殊的內鏈接-自鏈接
,本身和本身做爲兩個表處理。windows
SELECT ... FROM 表a AS A,表a AS B WHERE A.某列名 = B.某列名的計算操做;
SELECT ... FROM 表a LEFT (OUTER) JOIN 表b ON a.某列名 = b.某列名;
SELECT ... FROM 表a RIGHT (OUTER) JOIN 表b ON a.某列名 = b.某列名;
SELECT ... FROM 表a FULL (OUTER) JOIN 表b ON a.某列名 = b.某列名;
SELECT ... FROM 表a CROSS JOIN 表b WHERE a.某列名 = b.某列名;
若是沒有WHERE語句,那麼交叉鏈接和沒有限制的內鏈接等價,都是獲得兩個表的笛卡爾積。
即SELECT ... FROM 表a CROSS JOIN 表b;
結果集等同於 SELECT ... FROM 表a,表b;
。centos
參考:
http://www.cnblogs.com/youzhangjin/archive/2009/05/22/1486982.html
http://www.cnblogs.com/Ewin/archive/2009/10/05/1578322.html
對錶格的操做,能夠理解爲更改表的屬性或者結構。
表的名字是大小寫敏感的。
CREATE TABLE 表名( `列名1` INT(長度) UNSIGNED DEFAULT NOT NULL AUTO_INCREMENT, `列名2` 數據類型(長度) DEFAULT 默認值, `列名3` 數據類型(長度) DEFAULT NULL, PRIMARY KEY(列名) )ENGINE=InnoDB default-charset=utf8;
添加主鍵也能夠在括號裏的最後一行加上CONSTRAINT 主鍵名 PRIMARY KRY(列名)
。
主鍵也能夠是多列的複合主鍵CONSTRAINT 主鍵名 PRIMARY KEY(列1,列2,列3)
。
查看錶的結構
#方式一:使用關鍵字`DESCRIBE` DESCRIBE 表名; #方式二:查看建表語句 SHOW CREATE TABLE 表名;
對一張已經創建的表重命名
方式一:RENAME TABLE 原名 TO 新名; 方式二:ALTER TABLE 原名 RENAME 新名; 方式三:ALTER TABLE 原名 RENAME TO 新名;
DROP TABLE 表名字;
如下兩種方式是等效的
方式一:ALTER TABLE 表名字 ADD 列名 數據類型 約束; 方式二:ALTER TABLE 表名字 ADD COLUMN 列名 數據類型 約束;
若是沒有指定添加的新列的位置,那麼就會默認添加在表的最後一列,若是須要指定在第一列則用關鍵字FIRST
,若是須要在某列後則用關鍵字AFTER 某列名
。
ALTER TABLE 表名字 ADD 列名 數據類型 約束 FIRST;
ALTER TABLE 表名字 ADD 列名 數據類型 約束 AFTER A;
方式一:ALTER TABLE 表名字 DROP 列名; 方式二:ALTER TABLE 表名字 DROP COLUMN 列名;
本質上是修改一個列的屬性,用了關鍵字CHANGE
。
ALTER TABLE 表名字 CHANGE 原列名 新列名 新列的數據類型 約束;
注意到若是新列名和原列名相同的話,就能夠修改這個列的數據類型和約束了。
可是修改數據類型可能會致使數據丟失!!
方式一:ALTER TABLE 表名字 CHANGE 原列名 原列名 新數據類型 約束; 方式二:ALTER TABLE 表名字 MODIFY 列名字 新數據類型;
注意,修改數據類型可能會致使數據丟失!!
數據庫默認使用全表掃描,當一張表數據量較少的時候檢索速度也會很快,當數據量很大的時候(好比達到百萬級)若是使用全表掃描就會很慢。這個時候就須要添加索引
來提升查詢速度
,每每會有很大的改善。添加索引時會在磁盤上建立索引文件,而且寫入索引信息,因此建立索引會增長插入速度
和消耗一部分存儲空間
。
執行查詢語句時,數據庫會自動判斷是否有可用的索引,若是沒有才會進行全表掃描。
方式一:ALTER TABLE 表名字 ADD INDEX 索引名 (列名); 方式二:CREATE INDEX 索引名 ON 表名字 (列名);
方式一:ALTER TABLE 表名字 ADD INDEX 索引名 (列名1,列名2,列名3); 方式二:CREATE INDEX 索引名 ON 表名字 (列名1,列名2,列名3);
SHOW INDEX FROM 表名字;
視圖是一張虛擬表,基於數據庫中已有的一張表或者多張表的真實數據組織而成,是一張邏輯表而不是實際存在的物理表,數據庫中存放的是視圖的定義。查詢的時候能夠把視圖當作一張普通的表操做。
CREATE VIEW 視圖名(視圖列1,視圖列2,視圖列3) AS SELECT 列1,列2,列3 FROM 表;
能夠看到視圖中用到關鍵字AS,並且在AS後面是一個查詢語句,因此這個查詢語句能夠是子查詢和鏈接查詢,視圖依賴的數據能夠是多個表的數據。
SELECT * FROM 視圖名;
DROP VIEW 視圖名;
#使用默認的分隔符 LOAD DATA INFILE '文件路徑' INTO TABLE 表名;
注意導入的文件路徑須要加上單引號。若是須要指定分隔符,則爲:
LOAD DATA INFILE '文件路徑' INTO TABLE 表名 FIELDS TERMINATED BY '列分隔符' LINES TERMINATED BY '換行符';
SELECT 列1,列2,列3 INTO OUTFILE '文件路徑' FROM 表名;
注意導出文件路徑須要加上單引號。一樣,上面是使用默認的分隔符導出數據,若是想要設定分隔符,則能夠在上面的命令後添加分隔操做。
SELECT 列1,列2,列3 INTO OUTFILE '文件路徑' FROM 表名 FIELDS TERMINATED BY '列分隔符' [OPTIONALLY] ENCLOSED BY '指定把字段包括起來的字符(若用了OPTIONALLY則只會包括CHAR和VARCHAR類型)' ESCAPED BY '指定當須要轉義時用什麼做爲轉義字符(一般爲\\)' LINES TERMINATED BY '換行符';
對於用LOAD DATA INFILE或SELECT ...INTO OUTFILE執行的文本文件導入或導出操做,NULL用序列\N表示。
導出和備份的區別
導出僅僅是導出須要的數據,而備份則是把數據庫的結構,包括表結構、全部數據、索引、視圖等所有另存爲一個文件。
備份
數據備份使用關鍵詞mysqldump
,mysqldump是一個備份程序,產生一個備份腳本文件*.sql。
備份命令不須要在MySQL服務裏面敲命令,須要退出MySQL的命令行操做界面,在系統命令行操做界面進行。
#備份整個數據庫 mysqldump -u 用戶名 數據庫名 > 備份文件路徑; #備份某個數據表 mysqldump -u 用戶名 數據庫名 表名 > 備份文件路徑;
source 備份文件路徑;
方式二先在數據庫建一個空庫,而後在系統命令行操做恢復命令。使用Linux輸入符號「<」完成恢復。
mysql -u 用戶名 < 備份文件路徑;
在shell腳本執行SQL語句,不須要登陸MySQL服務執行操做。
mysql -h主機IP地址 -u 登陸用戶名 -p '密碼' -S mysql.sock的路徑 -e "SQL命令;" >> 保存本地文件路徑
若是沒有-h參數,則表示是訪問本地的MySQL服務。舉例:
mysql -uroot -p'fefjay@2017' -S /tmp/mysql.sock -e "show databases;" >> /home/a.txt echo "show databases;" | mysql -uroot -p'fefjay@2017' -S /tmp/mysql.sock > /home/a.txt
上述命令都是先要登陸MySQL服務,而後執行命令,獲得結果,至於把結果是導出到本地的文件a.txt,或者結合管道符|和grep的操做,看具體的業務須要了。可是這裏須要寫出登陸的密碼,不安全,須要找到一種更加安全的能夠寫到腳本中的方法。
參考 http://oldboy.blog.51cto.com/2561410/632608/
序號 | 約束類型 | 關鍵字 | 說明 | 添加方式 |
---|---|---|---|---|
1 | 主鍵 | PRIMARY KRY | 該行數據的惟一標識,非空,一般爲自增加的int | CONSTRAINT 主鍵名 PRIMARY KEY(列名) |
2 | 外鍵 | FOREIGE KRY | 做爲外鍵的列一定是其餘表的主鍵,不然插入失敗。體現數據完整性和表之間的關係 | CONSTRAINT 外鍵名 FOREIGEN KEY(外鍵列) REFERENCE 外鍵做爲主鍵所在的表名T(T的主鍵名) |
3 | 設置默認值 | DEFAULT | 當插入數據爲空時,自動設置爲默認值 | 在列後面直接設置「DEFAULT 值」 |
4 | 非空 | NOT NULL | 被插入的列不容許空 | 在列後面直接設置「NOT NULL」 |
5 | 惟一 | UNIQE | 指定表的這一列數據不能有重複,即每一個值都是惟一的。不然插入失敗 | UNIQUE(列) |
用在WHERE以後,條件:使用「=」、「<」、「>」、「<=」、「=>」組成的不等式。
MySQL中0或者NULL表示條件爲假,其餘值都表示條件爲真。
序號 | 關鍵字 | 說明 | 使用方式舉例 |
---|---|---|---|
1 | AND | 邏輯與,遵循與短路(第一個條件爲假則直接判斷最終結果是假,不會再去執行判斷後面的條件) | 條件1 AND 條件2 |
2 | OR | 邏輯或,遵循或短路(第一個條件爲真則直接判斷最終結果是真,不會再去執行判斷後面的條件) | 條件1 OR 條件2 |
3 | IN | 在某範圍內,能夠是字符串也能夠是數字。若是是連續數值,能夠用「BETWEEN...AND...」代替。 | IN (值1,值2,值3) |
4 | NOT IN | 不在某範圍內,能夠是字符串也能夠是數字 | NOT IN (值1,值2,值3) |
5 | LIKE | 模糊匹配,大小寫不敏感,使用BINARY對大小寫敏感。常與「_」(表明一個字符)和「%」(表明任意個>=0字符)搭配。與「NOT LIKE」相反 | 「LIKE 'fef_'」或「LIKE 'jay$'」 |
6 | RLIKE或REGEXP | 擴展正則表達式,使用BINARY可對大小寫敏感。與「NOT RLIKE」或「NOT RREGEXP」相反 | 找長度爲5的串「RLIKE '^.{5}&'」或「RLIKE '%jay%'」 |
7 | ORDER BY | 對查詢結果集排序,默認是大小寫不敏感,若是要大小寫敏感則用關鍵詞BINARY。升序用ASC(默認,ascending縮寫),降序用DESC(descending縮寫) | 「ORDER BY 列名 DESC」 或 「ORDER BY 列名」 或「ORDER BY BINARY 列名」(大小寫敏感) |
8 | GROUP BY | 分組,根據某一列進行分組 | GROUP BY 列名 |
9 | AS | AS進行重命名,能夠對結果的值列重命名。也用於視圖指定數據集 | SELECT SUM(money) AS 標識名 FROM salary; |
序號 | 函數名 | 做用 | 使用 |
---|---|---|---|
1 | COUNT | 統計行數 | COUNT(1) |
2 | SUM | 求和,僅適用於定義爲數值的列 | SUM(列名) |
3 | AVG | 求均值,僅適用於定義爲數值的列 | AVG(列名) |
4 | MAX | 求最大值,適用於定義爲數值、字符串、日期、時間類型的列 | MAX(列名) |
5 | MIN | 求最小值,用於定義爲數值、字符串、日期、時間類型的列 | MIN(列名) |
COUNT(*)、COUNT(1)、COUNT(0)、COUNT(列名)的區別函數
索引及最左匹配原則
數據類型