1、CREATE UNIQUE INDEX index_name ON table_name (
field_name [(index_length)] [ASC|DESC])
2、ALTER TABLE table_name ADD UNIQUE INDEX|KEY
index_name(field_name [(index_length)] [ASC|DESC])
table_name(
column_name
FULLTEXT INDEX|KEY [index_name](
field_name [(index_length)] [ASC|DESC])
)
1、CREATE FULLTEXT INDEX index_name ON table_name (
field_name [(index_length)] [ASC|DESC])
2、ALTER TABLE table_name ADD FULLTEXT INDEX|KEY
index_name(field_name [(index_length)] [ASC|DESC])
和上面的方法類似
index_name(field_name_1 [(index_length)] [ASC|DESC],
… ,
field_name_n [(index_length)] [ASC|DESC])
DROP INDEX index_name ON table_name
CREATE VIEW view_name AS select_query
SHOW TABLE STATUS [FROM database_name] [LIKE ‘pattern’]
DESC[RIBE] view_name
DROP VIEW view_name[, view_name]
1、CREATE OR REPLACE VIEW view_name AS select_query
2、ALTER VIEW view_name AS select_query
CREATE TIRGGER trigger_name
BEFORE|AFTER DELETE|INSERT|UPDATE
ON table_name FOR EACH ROW
Triggle_statement
Triggle_statement:觸發器被觸發要履行的語句(增、刪、改、查等等)
SHOW TRIGGERS
DROP TRIGGER trigger_name
INSERT INTO table_name (field_1, field_2, …) VALUES (value_1, value_2, vaule_3, …)
desc 表名;
show columns from 表名;
describe 表名;
show create table 表名;
use information_schema
select * from columns where table_name=’表名’;
select * from userdetail where userid limit 0,20
(mysql⑸.5.5開始,InnoDB作為默許存儲引擎)之前是MyISAM,更早是ISAM你能用的數據庫引擎取決于mysql在安裝的時候是如何被編譯的。要添加1個新的引擎,就必須重新編譯MYSQL。在缺省情況下,MYSQL支持3個引擎:ISAM、MYISAM和HEAP。另外兩種類型INNODB和BERKLEYDB(BDB), 也常常可使用。
ISAM是1個定義明確且歷經時間考驗的數據表格管理方法,它在設計之時就斟酌到數據庫被查詢的次數要遠大于更新的次數。因此,ISAM履行讀取操作的速度很快,而且不占用大量的內存和存儲資源。ISAM的兩個主要不足的地方在于,它不支持事務處理,也不能夠容錯:如果你的硬盤崩潰了,那末數據文件就沒法恢復了。如果你正在把ISAM用在關鍵任務利用程序里,那就必須常常備份你所有的實時數據,通過其復制特性,MYSQL能夠支持這樣的備份利用 程序。
MYISAM是MYSQL的ISAM擴大格式和缺省的數據庫引擎(5.5之前)。除提供ISAM里所沒有的索引和字段管理的大 量功能,MYISAM還使用1種表格鎖定的機制,來優化多個并發的讀寫操作。其代價是你需要常常運行OPTIMIZE TABLE命令,來恢復被更新機制所浪費的空間。MYISAM還有1些有用的擴大,例如用來修復數據庫文件的 MYISAMCHK工具和用來恢復浪費空間的MYISAMPACK工具。
MYISAM強調了快速讀取操作,這可能就是為何MYSQL遭到了WEB開發如此青睞的主要緣由:在WEB開發中你所進行的大量數據操作都是讀取操作。所以,大多數虛擬主機提供商和INTERNET平臺提供商只允許使用MYISAM格式。
HEAP允許只駐留在內存里的臨時表格。駐留在內存使得HEAP比ISAM和MYISAM的速度都快,但是它所管理的數據是不穩定的,而且如果在關機之前沒有進行保存,那末所有的數據都會丟失。在數據行被刪除的時候,HEAP也不會浪費大量的空間,HEAP表格在你需要使用SELECT表達式來選擇和操控數據的時候非常有用。要記住,用完表格后要刪除表格。
INNODB和BERKLEYDB(BDB)數據庫引擎都是造就MYSQL靈活性的技術的直接產品,這項技術就是MySql++ API。在使用MySql的時候,你所面對的每個挑戰幾近都源于ISAM和MYIASM數據庫引擎不支持事務處理也不支持外來鍵。雖然要比ISAM和MYISAM引擎慢很多,但是INNODB和BDB包括了對事務處理和外來鍵的支持,這兩點都是前兩個引擎所沒有的。如前所述,如果你的設計需要這些特性中的1者或二者,那你就要被迫使用后兩個引擎中的1個了。
根據鎖的類型分,可以分為同享鎖,排他鎖,意向同享鎖和意向排他鎖。
根據鎖的粒度分,又可以分為行鎖,表鎖。
對mysql而言,事務機制更多是靠底層的存儲引擎來實現,因此,mysql層面只有表鎖,而支持事務的innodb存 儲引擎則實現了行鎖(記錄鎖(在行相應的索引記錄上的鎖)),gap鎖(是在索引記錄間歇上的鎖),next-key鎖(是記錄鎖和在此索引記錄之前的gap上的鎖的結合)。Mysql的記錄鎖實質是索引記錄的鎖,由于innodb是索引組織表;gap鎖是索引記錄間隙的鎖,這類鎖只在RR隔離級別下有效;next-key鎖是記錄鎖加上記錄之前gap鎖的組合。mysql通過gap鎖和next-key鎖實現RR隔離級別。
說明:對更新操作(讀不上鎖),只有走索引才可能上行鎖;否則會對聚簇索引的每行上寫鎖,實際同等于對表上寫鎖。
若多個物理記錄對應同1個索引,若同時訪問,也會出現鎖沖突;
當表有多個索引時,不同事務可以用不同的索引鎖住不同的行,另外innodb會同時用行鎖對數據記錄(聚簇索引)加 鎖。
MVCC(多版本并發控制)并發控制機制下,任何操作都不會阻塞讀操作,讀操作也不會阻塞任何操作,只由于讀不上鎖。
同享鎖:由讀表操作加上的鎖,加鎖后其他用戶只能獲得該表或行的同享鎖,不能獲得排它鎖,也就是說只能讀不能寫
排它鎖:由寫表操作加上的鎖,加鎖后其他用戶不能獲得該表或行的任何鎖,典型是mysql事務中的更新操作
意向同享鎖(IS):事務打算給數據行加行同享鎖,事務在給1個數據行加同享鎖前必須先獲得該表的IS鎖。
意向排他鎖(IX):事務打算給數據行加行排他鎖,事務在給1個數據行加排他鎖前必須先獲得該表的IX鎖。
在缺省模式下,MYSQL是autocommit模式的,所有的數據庫更新操作都會即時提交,所以在缺省情況下,mysql是不支持事務的。 但是如果你的MYSQL表類型是使用InnoDB Tables 或 BDB tables的話,你的MYSQL就能夠使用事務處理,使用SET AUTOCOMMIT=0就能夠使MYSQL允許在非autocommit模式, 在非autocommit模式下,你必須使用COMMIT來提交你的更改,或用ROLLBACK來回滾你的更改。
示例以下:
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1;
UPDATE table2 SET summmary=@A WHERE type=1;
COMMIT;
1、可以處理具有上千萬條記錄的大型數據
2、支持常見的SQL語句規范
3、可移植行高,安裝簡單小巧
4、良好的運行效力,有豐富信息的網絡支持
5、調試、管理,優化簡單(相對其他大型數據庫)
1、在數據庫安裝的時候指定字符集
2、如果在安完了以后可以更改以配置文件
3、建立數據庫時候:指定字符集類型
4、建表的時候也指定字符集
1.如果MYSQL客戶端和服務器真個連接需要逾越并通過不可信任的網絡,那末需要使用ssh隧道來加密該連接的通訊。
2.使用set password語句來修改用戶的密碼,先“mysql -u root”登陸數據庫系統,然后mysql> update mysql.user set password=password(‘newpwd’),最后履行flush privileges就能夠了。
3.Mysql需要防備的攻擊有,防偷聽、篡改、回放、謝絕服務等,不觸及可用性和容錯方面。對所有的連接、查詢、其他操作使用基于acl即訪問控制列表的安全措施來完成。也有1些對ssl連接的支持。
4.設置除root用戶外的其他任何用戶不允許訪問mysql主數據庫中的user表; 加密后寄存在user表中的加密 后的用戶密碼1旦泄漏,其他人可以隨便用該用戶名/密碼相應的數據庫;
5.使用grant和revoke語句來進行用戶訪問控制的工作;
6.不要使用明文密碼,而是使用md5()和sha1()等單向的哈系函數來設置密碼;
7.不要選用字典中的字來做密碼;
8.采取防火墻可以去掉50%的外部危險,讓數據庫系統躲在防火墻后面工作,或放置在dmz區域中;
9.從因特網上用nmap來掃描3306端口,也可用telnet server_host 3306的方法測試,不允許從非信任網絡中訪問數據庫服務器的3306號tcp端口,需要在防火墻或路由器上做設定;
10.為了避免被歹意傳入非法參數,例如where id=234,他人卻輸入where id=234 or 1=1致使全部顯示,所以在web的表單中使用”或””來用字符串,在動態url中加入%22代表雙引號、%23代表井號、%27代表單引號;傳遞未檢查過的值給mysql數據庫是非常危險的;
11.在傳遞數據給mysql時檢查1下大小;
12.利用程序需要連接到數據庫應當使用1般的用戶帳號,開放少數必要的權限給該用戶;
13.在各編程接口(c c++ php perl java jdbc等)中使用特定‘逃脫字符’函數; 在因特網上使用mysql數據 庫時1定少用傳輸明文的數據,而用ssl和ssh的加密方式數據來傳輸;
14.學會使用tcpdump和strings工具來查看傳輸數據的安全性,例如tcpdump -l -i eth0 -w -src or
dst port 3306 strings。以普通用戶來啟動mysql數據庫服務;
15.不使用到表的聯結符號,選用的參數 –skip-symbolic-links;
16.確信在mysql目錄中只有啟動數據庫服務的用戶才可以對文件有讀和寫的權限;
17.不準將process或super權限付給非管理用戶,該mysqladmin processlist可以羅列出當前履行的查詢 文本;super權限可用于切斷客戶端連接、改變服務器運行參數狀態、控制拷貝復制數據庫的服務器;
18.file權限不付給管理員之外的用戶,避免出現load data ‘/etc/passwd’到表中再用select 顯示出來
的問題;
19.如果不相信dns服務公司的服務,可以在主機名稱允許表中只設置ip數字地址;
20.使用max_user_connections變量來使mysqld服務進程,對1個指定帳戶限定連接數;
21.grant語句也支持資源控制選項;
22.–local-infile=0或1 若是0則客戶端程序就沒法使用local load data了,賦權的1個例子grant insert(user) on mysql.user to ‘user_name’@’host_name’;若使用–skip-grant-tables系統將對任何用戶的訪問不做任何訪問控制,但可以用 mysqladmin flush-privileges或mysqladmin reload來開啟訪問控制;默許情況是show databases語句對所有用戶開放,可以用–skip-show-databases來關閉掉。
23.碰到error 1045(28000) access denied for user ‘root’@’localhost’ (using password:no)毛病時,你需要重新設置密碼,具體方法是:先用–skip-grant-tables參數啟動mysqld,然后履行 mysql -u root mysql,mysql>update user set password=password(’newpassword’) where user=’root’;mysql>flush privileges;,最后重新啟動mysql就能夠了。
獲得當前時間用 now() 就行。在數據庫中格式化時間 用DATE_FORMAT(date, format)。根據格式串
format 格式化日期或日期時間值date,返回結果串。
答案: Debian 上運行命令 service mysql status,在RedHat 上運行命令 service mysqld status。然后看看輸出便可。
答案:運行命令 service mysqld start 開啟服務;運行命令 service mysqld stop 停止服務。
答案:運行命令 mysql -u root –p
答案:運行命令 show databases;
答案:運行命令 use database_name; 進入名為 database_name 的數據庫。
答案:在當前數據庫運行命令 show tables;
答案:運行命令 describe table_name;
上一篇 AOP簡單介紹