1. 連接MySQL: mysql -h host_address -u user_name -p user_password
~~~
mysql -h110.110.110.110 -u root -p 123;
~~~
2. 修改密碼:mysqladmin -u user_name -p old_password password new_password
~~~
mysqladmin -u root -p abc123 password def456;
~~~
3. 增加新用戶:grant select on db_name.* to user_name@login_host identified by 'user_password'
~~~
/* mysql grant命令添加用戶常用的三種模式 */
grant all PRIVILEGES on *.* to 'test'@'localhost' identified by '123';
grant all PRIVILEGES on *.* to 'test'@'%' identified by '123';
grant all PRIVILEGES on *.* to 'test'@'10.22.225.18' identified by '123';
~~~
說明:
第一條命令添加一個本地用戶 'test' ,一般用于web服務器和數據庫服務器在一起的情況; 第二條命令添加一個用戶 'test' ,只要能連接數據庫服務器的機器都可以使用,這個比較危險,一般不用;
最后條命令在數據庫服務器上給 '10.22.225.18' 機器添加一個用戶'test',一般用于web服務器和數據庫服務器分離的情況。
注意:
真正使用的時候不會用 grant all PRIVILEGES on *.* ,而是根據實際需要設定相關的權限。 比如 `grant select,insert,delete,update on test.* to 'test'@'localhost' identified by '123';`
4. 創建數據庫: create database db_name
~~~
create database news;
~~~
5. 顯示數據庫: show databases
6. 刪除數據庫: drop database db_name
~~~
drop database news;
~~~
7. 連接數據庫:use db_name
~~~
use news;
~~~
use 語句可以通告MySQL把 db_name 數據庫作為默認(當前)數據庫使用,用于后續語句。該數據庫保持為默認數據庫,直到語段的結尾,或者直到發布一個不同的 USE 語句:
~~~
mysql> USE db1;
mysql> SELECT COUNT(*) FROM mytable; # selects from db1.mytable
mysql> USE db2;
mysql> SELECT COUNT(*) FROM mytable; # selects from db2.mytable
~~~
8. 選擇的數據庫:select method()
MySQL中 SELECT 命令類似于其他編程語言里的 print 或者 write,你可以用它來顯示一個字符串、數字、數學表達式的結果等等。如何使用 MySQL 中 SELECT 命令的特殊功能?
①顯示MYSQL的版本
~~~
mysql> select version();
+-----------------------+
| version() |
+-----------------------+
| 6.0.4-alpha-community |
+-----------------------+
1 row in set (0.02 sec)
~~~
② 顯示當前時間
~~~
mysql> select now();
+---------------------+
| now() |
+---------------------+
| 2009-09-15 22:35:32 |
+---------------------+
1 row in set (0.04 sec)
~~~
③顯示年月日
~~~
SELECT DAYOFMONTH(CURRENT_DATE);
+--------------------------+
| DAYOFMONTH(CURRENT_DATE) |
+--------------------------+
| 15 |
+--------------------------+
1 row in set (0.01 sec)
SELECT MONTH(CURRENT_DATE);
+---------------------+
| MONTH(CURRENT_DATE) |
+---------------------+
| 9 |
+---------------------+
1 row in set (0.00 sec)
SELECT YEAR(CURRENT_DATE);
+--------------------+
| YEAR(CURRENT_DATE) |
+--------------------+
| 2009 |
+--------------------+
1 row in set (0.00 sec)
~~~
④顯示字符串
~~~
mysql> SELECT "welecome to my blog!";
+----------------------+
| welecome to my blog! |
+----------------------+
| welecome to my blog! |
+----------------------+
1 row in set (0.00 sec)
~~~
⑤當計算器用
~~~
select ((4 * 4) / 10 ) + 25;
+----------------------+
| ((4 * 4) / 10 ) + 25 |
+----------------------+
| 26.60 |
+----------------------+
1 row in set (0.00 sec)
~~~
⑥串接字符串
~~~
select CONCAT(f_name, " ", l_name)
AS Name
from employee_data
where title = 'Marketing Executive';
+---------------+
| Name |
+---------------+
| Monica Sehgal |
| Hal Simlai |
| Joseph Irvine |
+---------------+
3 rows in set (0.00 sec)
~~~
~~~
注意:這里用到 CONCAT() 函數,用來把字符串串接起來。另外,我們還用到以前學到的 AS 給結果列 'CONCAT(f_name, " ", l_name)' 起了個假名。
~~~
9. 創建數據表:`create table table_name (field_1_name field_1_type [ ,... field_n_name field_n_type ])`
~~~
CREATE TABLE IF NOT EXISTS `user` (
`uid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL,
`user_password` varchar(32) DEFAULT NULL,
`user_email` varchar(40) DEFAULT NULL,
PRIMARY KEY (`uid`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
~~~
10. 獲取表結構:desc table_name 或者 show columns from table_name
~~~
使用MySQL數據庫desc 表名時,我們看到Key那一欄,可能會有4種值,即 ' ' , 'PRI' , 'UNI' , 'MUL' 。
~~~
①如果 Key 是空的, 那么該列值的可以重復, 表示該列沒有索引, 或者是一個非唯一的復合索引的非前導列;
②如果 Key 是 PRI , 那么該列是主鍵的組成部分;
③如果 Key 是 UNI , 那么該列是一個唯一值索引的第一列(前導列),并別不能含有空值(NULL);
④如果 Key 是 MUL , 那么該列的值可以重復, 該列是一個非唯一索引的前導列(第一列)或者是一個唯一性索引的組成部分但是可以含有空值 NULL。 如果對于一個列的定義,同時滿足上述4種情況的多種,比如一個列既是 PRI ,又是UNI ,那么 desc table_name 的時候,顯示的Key 值按照優先級來顯示 PRI->UNI->MUL 。那么此時,顯示 PRI 。 一個唯一性索引列可以顯示為 PRI ,并且該列不能含有空值,同時該表沒有主鍵。 一個唯一性索引列可以顯示為 MUL ,如果多列構成了一個唯一性復合索引,因為雖然索引的多列組合是唯一的,比如 ID+NAME 是唯一的,但是沒一個單獨的列依然可以有重復的值,只要 ID+NAME 是唯一的即可。
11. 刪除表:drop table table_name
DROP TABLE 用于取消一個或多個表。您必須有每個表的 DROP權限。所有的表數據和表定義會被取消,所以使用本語句要小心!
12. 表插入數據:`insert into table_name ( field_1_name [ ,... field_n_name ]) values ( value_1 [,... value_n ] )`
~~~
INSERT INTO user (`uid`, `user_name`, `user_password`, `user_email`) VALUES (1, 'admin', 'admin', 'admin@example.com');
~~~
insert into 每次只能向表中插入一條記錄。
13. 查詢表數據:`select field_1_name [,... field_n_name ] from table_name where sql_expression`
①查詢所有行:
查看表 user 中所有數據 `select * from user;`
②查詢前幾行數據:
查看表 user 中前2行數據 `select * from user order by id limit 0,2;`
注:select 一般配合 where 使用,以查詢更精確更復雜的數據。
14. 刪除表中數據:`delete from table_name where sql_expression`
刪除表 user 中編號為1 的記錄` delete from user where uid=1;`
15. 修改表中數據:`update table_name set field_name = new_value [ ,…] where sql_expression`
如更新 id 為 1 的 user,設置 user_name字段值為 Mary。
`update user set user_name='Mary' where id=1;`
①單表的MySQL UPDATE語句:
`UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]`
②多表的UPDATE語句:
`UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]`
UPDATE 語法可以用新值更新原有表行中的各列。SET 子句指示要修改哪些列和要給予哪些值。WHERE 子句指定應更新哪些行。如果沒有 WHERE 子句,則更新所有的行。如果指定了 ORDER BY 子句,則按照被指定的順序對行進行更新。 LIMIT 子句用于給定一個限值,限制可以被更新的行的數目。
16. 增加字段:`alter table table_name [ add field_name field_type / other_sql_expression ]`
在表 user 中添加了一個字段 user_pic ,類型為 varchar(40),默認值為` NULL alter table user add user_pic varchar(40) default NULL;`
加索引 `alter table employee add index emp_name (name);`
加主關鍵字的索引` alter table employee add primary key(id);`
加唯一限制條件的索引 `alter table employee add unique emp_name2(cardnumber);`
刪除某個索引` alter table employee drop index emp_name;`
增加字段` alter table user add user_pic varchar(40) default NULL;`
修改原字段名稱及類型 `ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;`
刪除字段` ALTER TABLE table_name DROP field_name;`
17. 修改表名:`rename table old_table_name to new_table_name`
當你執行 RENAME 時,你不能有任何鎖定的表或活動的事務。你同樣也必須有對原初表的 ALTER 和 DROP 權限,以及對新表的 CREATE 和 INSERT 權限。 如果在多表更名中,MySQL 遭遇到任何錯誤,它將對所有被更名的表進行倒退更名,將每件事物退回到最初狀態。
18.備份數據庫:
①導出整個數據庫,導出文件默認是存在`mysql\bin`目錄下 `mysqldump -u user_name -p user_password db_name > new_db_name.sql`
②導出一個表 `mysqldump -u user_name -p user_password database_name table_name > outfile_name.sql`
③導出一個數據庫結構 `mysqldump -u user_name -puser_password -d -add-drop-table database_name > outfile_name.sql -d` 沒有數據` -add-drop-table` 在每個 create 語句之前增加一個 drop table
④帶語言參數導出 `mysqldump -u user_name -p user_password -default-character-set=latin1 -set-charset=gbk -skip-opt database_name > outfile_name.sql`
19. 建庫建表示例:
~~~
drop database if exists school; //如果存在SCHOOL則刪除
create database school; //建立庫SCHOOL
use school; //打開庫SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default ‘深圳’,
year date
); //建表結束
//以下為插入字段
insert into teacher values(”,’allen’,'大連一中’,'1976-10-10′);
insert into teacher values(”,’jack’,'大連二中’,'1975-12-23′);
~~~
如果你在 mysql 提示符鍵入上面的命令也可以,但不方便調試。
①你可以將以上命令原樣寫入一個文本文件中,假設為 school.sql ,然后復制到 c:\ 下,并在 DOS 狀態進入目錄 mysql\bin ,然后鍵入以下命令:` mysql -u user_name -p user_password < c:\school.sql`
如果成功,空出一行無任何顯示;如有錯誤,會有提示。(以上命令已經調試,你只要將//的注釋去掉即可使用)。
②或者進入命令行后使用 `mysql> source c:\school.sql; `也可以將 school.sql 文件導入數據庫中。PHP面試題匯總