1.在NT上操作mysql(管理員身份運行dos)
啓動:NET START mysql 停止:NET STOP mysql
殺死MySQL服務器:C:\mysql\bin\mysqladmin -u root shutdown
2.frm、MYI、MYD 分別是MyISAM 表的表結構\索引\數據文件
control-D斷開\c取消命令
3.1 語句
連接MySQL服務器mysql –h 主機名 –u 用戶名 –p 用戶密碼 如果你在一個表上有索引SHOW INDEX FROM tbl_name生成有關它們的信息
當前是哪個數據庫mysql> SELECT DATABASE();
當前數據庫包含哪些表mysql> SHOW TABLES;
查看錶結構mysql> DESCRIBE 表名;
查看服務器上當前存在什麼數據庫mysql> SHOW DATABASES;
如果test數據庫存在,嘗試存取它mysql> USE test;// USE語句,必須在一個單行上給出,不需要一個分號
創建數據庫mysql> CREATE DATABASE 庫名;
創建數據庫中的表create table TABLENAME (NAME1 int, NAME2 char(10), …… );
刪除數據庫前,有提示mysqladmin drop databasename
直接刪除數據庫,不提醒drop database name
//drop database if exists school; //如果存在SCHOOL則刪除
重命名錶:mysql > alter table t1 rename t2;
備份數據庫shell> mysqldump -h host -u root -p dbname >dbname_backup.sql
恢復數據庫shell> mysqladmin -h myhost -u root -p create dbname
表中增加字段
alter table dbname add column userid int(11) not null primary key auto_increment;
幫助命令後: \h := help := \?
?\?同‘help’。
Print\p打印當前命令
Clear\c清除命令。
Prompt\R改變提示符
Connect\r連接服務器,可選數據庫和主機。
Quit\q退出
Delimiter\d設置定界符,
Rehash\#徹底重建無用信息
Ego\G發送命令到服務器,直顯結果。
Source\.執行一個SQL腳本,
Exit\q退出,同quit
Status\s取得服務器信息
Go\g發送命令到服務器
Tee\T設置輸出文件,並追加。
Help\h顯示幫助
Use\u使用另一個數據庫。
Notee\t不能寫入輸出文件。
Warnings\W每一條語句後顯警告。
Nowarning\w不顯警告
修改mysql中用戶密碼
#在控制檯上輸入
bash$ mysql -u root mysql #用mysql客戶程序
mysql> update user set password=password("new password") where user='hunte';
mysql> flush privileges; //刷新數據庫
mysql> quit
bash$ mysql -u root mysql
mysql> set password for hunte=password('new password');
mysql> quit
bash$ mysqladmin -u root "old password" "new password"
mysql 改了root密碼後無法登錄:-u和root之間不留空格 mysql -uroot -p
導入/出
導出表:mysqldump --opt school > school.sql
註釋:將數據庫school中的表全部備份到school.sql文件,school.sql是一個文本文件,文件名任取。
mysqldump --opt school teacher student > school.teacher.student.sql
註釋:將數據庫school中的teacher表和st?nt表備份到school.teacher.student.sql文件,school.teacher.student.sql是一個文本文件,文件名任取,打開看看你會有新發現。
導入表:mysql>create database school; mysql>use school;
mysql>source school.sql; (或將school.sql換爲school.teacher.sql / school.teacher.st?nt.sql)
導出數據庫:mysqldump --databases db1 db2 > db1.db2.sql
註釋:將數據庫dbl和db2備份到db1.db2.sql文件,db1.db2.sql是一個文本文件,文件名任取。(舉個例子:mysqldump -h host -u user -p pass --databases dbname > file.dump就是把
host上的以名字user,口令pass的數據庫dbname導入到文件file.dump中。)
導入數據庫:mysql < db1.db2.sql
複製數據庫:mysqldump --all-databases > all-databases.sql
註釋:將所有數據庫備份到all-databases.sql文件,all-databases.sql是一個文本文件,文件名任取。
導入數據庫
mysql>drop database a;
mysql>drop database b;
mysql>drop database c;
mysql>source all-databases.sql; (或exit退出mysql後 mysql < all-databases.sql)
測試:進入安裝有MYSQLDUMP的文件夾:
mysqldump -h localhost -u root -p lwf_db shop> d:\shop.sql
//-h地址 –u用戶名 –p數據庫
查詢問題
1.不支持IN和NOT IN
在MySQL中下列語句還不能工作:
SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
然而,在很多情況下,你可以重寫查詢,而不用子選擇:
SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;
SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL
2.MySQL還不支持Oracle SQL的擴展:SELECT ... INTO TABLE ....,相反MySQL支持ANSI SQL句法INSERT INTO ... SELECT ...,基本上他們是一樣的。另外,你可使用SELECT INTO OUTFILE...或CREATE TABLE ... SELECT解決你的問題。
句法與語法
大小寫問題
MySQL在windows下是不區分大小寫的;在linux下表名區分大小寫;如何讓在windows下大小寫敏感,相應的更改windows中MySQL的設置就行了。在MySQL的配置文件my.ini中增加一行:lower_case_table_names = 0其中0:區分大小寫,1:不區分大小寫
MySQL在Linux下數據庫名、表名、列名、別名大小寫規則是這樣的:
1、數據庫名與表名是嚴格區分大小寫的;
2、表的別名是嚴格區分大小寫的;
3、列名與列的別名在所有的情況下均是忽略大小寫的;
4、變量名也是嚴格區分大小寫的;
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;這樣就是錯誤的大小寫必須一致。
演示引號和轉義如何工作:
mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+
mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+
| hello | 'hello' | ''hello'' | hel"lo | "hello |
+-------+---------+-----------+--------+--------+
引號/斜線
NUL ASCII 0。 用'\0'(一個反斜線和一個ASCII '0')表示它。
\ ASCII 92, 反斜線。用'\\'表示。
' ASCII 39, 單引號。用“\'”表示。
" ASCII 34, 雙引號。用“\"”表示。
如果標識符是一個限制詞或包含特殊字符用單引號引用。
select @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
+----------------------+------+------+------+
| @t1:=(@t2:=1)+@t3:=4 | @t1 | @t2 | @t3 |
+----------------------+------+------+------+
| 5 | 5 | 1 | 4 |
+----------------------+------+------+------+
(這裏,不得不使用 := 句法,因爲 = 是爲比較保留的)
註釋句法
MySQL服務器支持# to end of line、-- to end of line和/* in-line or multiple-line */註釋風格:
mysql> select 1+1; # This comment contins to the end of line
mysql> select 1+1; -- This comment contins to the end of line
mysql> select 1 /* this is an in-line comment */ + 1;
注意--註釋風格要求你在--以後至少有一個空格!
語句用法
expr BETWEEN min AND max
如果expr對大於或等於min且expr是小於或等於max,BETWEEN返回1,否則它返回0。如果所有的參數類型是一樣得,這等價於表達式(min <= expr AND expr <= max)。第一個參數(expr)決定比較如何被執行。如果expr是一個大小寫不敏感的字符串表達式,進行一個大小寫不敏感的字符串比較。如果expr是一個大小寫敏感的字符串表達式,進行一個大小寫敏感的字符串比較。如果expr是一個整數表達式,進行整數比較。否則,進行一個浮點(實數)比較。
mysql> select 1 BETWEEN 2 AND 3; -> 0
mysql> select 'b' BETWEEN 'a' AND 'c'; -> 1
mysql> select 2 BETWEEN 2 AND '3'; -> 1
mysql> select 2 BETWEEN 2 AND 'x-3'; -> 0 //大小比較,->是返回“真/假”值
expr IN (val,...)
如果expr是在IN表中的任何值,返回1,否則返回0。如果所有的值是常數,那麼所有的值根據expr類型被計算和排序,然後項目的搜索是用二進制的搜索完成。這意味着如果IN值表全部由常數組成,IN是很快的。如果expr是一個大小寫敏感的字符串表達式,字符串比較以大小寫敏感方式執行。
mysql> select 2 IN (0,3,5,'wefwf'); -> 0
mysql> select 'wefwf' IN (0,3,5,'wefwf'); -> 1
expr NOT IN (val,...)與NOT (expr IN (val,...))相同。
ISNULL(expr)如果expr是NULL,ISNULL()返回1,否則它返回0。
mysql> select ISNULL(1+1); -> 0
mysql> select ISNULL(1/0); -> 1
注意,使用=的NULL的值比較總爲假!
expr IN (val,...)
如果expr是在IN表中的任何值,返回1,否則返回0。如果所有的值是常數,那麼所有的值根據expr類型被計算和排序,然後項目的搜索是用二進制的搜索完成。這意味着如果IN值表全部由常數組成,IN是很快的。如果expr是一個大小寫敏感的字符串表達式,字符串比較以大小寫敏感方式執行。
mysql> select 2 IN (0,3,5,'wefwf'); -> 0
mysql> select 'wefwf' IN (0,3,5,'wefwf'); -> 1
expr NOT IN (val,...) 與NOT (expr IN (val,...))相同。
ISNULL(expr) 如果expr是NULL,ISNULL()返回1,否則它返回0。
mysql> select ISNULL(1+1); -> 0
mysql> select ISNULL(1/0); -> 1
注意,使用=的NULL的值比較總爲假!
COALESCE(list) 回來list中第一個非NULL的單元。 //coalesce接合 coal煤
mysql> select COALESCE(NULL,1); -> 1
mysql> select COALESCE(NULL,NULL,NULL); -> NULL
INTERVAL(N,N1,N2,N3,...) //interval間隔, 距離
如果N< N1,返回0,如果N< N2,返回1等等。所有的參數被當作整數。爲了函數能正確地工作,它要求N1<N2<N3< ...<Nn。這是因爲使用二進制搜索(很快)。 //與最先大於第一個數的間隔幾個位置。
mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200); -> 3
mysql> select INTERVAL(10, 1, 10, 100, 1000); -> 2
mysql> select INTERVAL(22, 23, 30, 44, 200); -> 0
ALTER TABLE句法
重命名錶,從t1到t2mysql> ALTER TABLE t1 RENAME t2;
爲了改變列a,從INTEGER改爲TINYINT NOT NULL(名字一樣),並且改變列b,從CHAR(10)改爲CHAR(20),同時重命名它,從b改爲c
mysql> ALTER TABLE t2 MODIFY a TINYINT NOT NULL, CHANGE b c CHAR(20);
增加一個新TIMESTAMP列,名爲d
mysql> ALTER TABLE t2 ADD d TIMESTAMP;
在列d上增加一個索引,並且使列a爲主鍵
mysql> ALTER TABLE t2 ADD INDEX (d), ADD PRIMARY KEY (a);
刪出列c
mysql> ALTER TABLE t2 DROP COLUMN c;