MySQL 基礎常用的命令-實用型

一、啟動與關閉

1.1 Linux下啟動mysql 的命令:

  • a. rpm包安裝:service mysqld start
  • b. 源碼包安裝:/usr/local/mysql/bin/mysqld_safe --user=mysql &
MySQL 基礎常用的命令-實用型

1.2 Linux下重啟mysql 的命令:

  • a. rpm包安裝:service mysqld restart
  • b. 源碼包安裝:
  • 先關閉mysql
  • /usr/local/mysql/bin/mysqladmin -uroot -p shutdown
  • 再啟動mysql
  • /usr/local/mysql/bin/mysqld_safe --user=mysql &

1.3 Linux下關閉mysql 的命令:

  • a. rpm包安裝:service mysqld stop
  • b. 源碼包安裝:
  • 方法1、/usr/local/mysql/bin/mysqladmin -uroot -p shutdown
  • 方法2、killall mysqld //強行終止MySQL數據庫服務,有可能導致 表損壞,不建議使用
MySQL 基礎常用的命令-實用型

二、數據庫連接

2.1 連接MySQL:

  • 格式:$mysql_dir/bin/mysql [-h主機地址] -u用戶名 -p用戶密碼,回車後提示輸入密碼。

2.2 退出MySQL:

  • 格式:exit/quit
MySQL 基礎常用的命令-實用型

三、修改密碼

3.1 mysqladmin 命令

格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼

例1:給root加個密碼123456。首先在終端下進入目錄$mysql_dir/bin,然後鍵入以下命令

./mysqladmin -uroot password ’123456′

注:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。

MySQL 基礎常用的命令-實用型

例2:再將root的密碼改為abc123。

./mysqladmin -uroot -p123456 password abc123

MySQL 基礎常用的命令-實用型

3.2 UPDATE user 語句

首先使用root 帳戶登入mysql,然後執行:

UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root';
FLUSH PRIVILEGES;
MySQL 基礎常用的命令-實用型

3.3 SET PASSWORD 語句

同樣,首先使用root 帳戶登入mysql,然後執行:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('abc123');

MySQL 基礎常用的命令-實用型

4.1 CREATE USER

CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']]

CREATE USER用於創建新的MySQL賬戶。要使用CREATE USER,您必須擁有mysql 數據庫的全局CREATE USER權限,或擁有INSERT權限。對於每個賬戶,CREATE USER會在沒有權限的mysql.user表中創建一個新記錄。如果賬戶已經存在,則出現錯誤。

使用自選的IDENTIFIED BY子句,可以為賬戶指定一個密碼。user值和密碼的給定方法和GRANT語句一樣。特別要注意的是,要在純文本中指定密碼,需忽略PASSWORD關鍵詞。要把密碼指定為由PASSWORD()函數返回的混編值,需包含關鍵字PASSWORD。

例1:創建新用戶david & sandy

mysql> create user 'david'@'localhost' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> create user 'sandy'@'localhost' identified by PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';
Query OK, 0 rows affected (0.00 sec)
mysql>

4.2 使用GRANT語句

最好的方法是使用GRANT語句,因為這樣更精確,錯誤少。從MySQL 3.22.11起提供了GRANT;它的主要用途是來給帳戶授權的,但也可用來建立新帳戶並同時授權。

注意:當mysql 運行於no_auto_create_user 時要提供新建用戶的密碼,否則不能創建新用戶。

格式:

GRANT privileges ON databasename.tablename TO 'username'@'host' identified by 'password'; 

例1、增加一個用戶test1,密碼為abc,讓他可以在任何主機上登錄,並對所有數據庫擁有所有權限。

首先用以root用戶連入MySQL,然後鍵入以下命令:

grant all privileges on *.* to 'test1'@'%' identified by 'abc';
flush privileges;
MySQL 基礎常用的命令-實用型

如果不想test2有密碼,可以再打一個命令將密碼消掉。

grant select,insert,update,delete on david.* to 'test2'@'localhost' identified by '';

grant 更多用法,請自行Google+Baidu。

除了GRANT,你可以直接用INSERT語句創建相同的賬戶,然後使用FLUSH PRIVILEGES告訴服務器重載授權表。

例1:創建用戶test3,讓其具有同4.2 例2中test2用戶同樣的權限。

mysql> insert into mysql.user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv) values('localhost', 'test3', PASSWORD('password'),'Y','Y','Y','Y');
Query OK, 1 row affected, 3 warnings (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> select Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv from mysql.user where User='test3';
+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv |
+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
| localhost | test3 | *2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19 | Y | Y | Y | Y |
+-----------+-------+-------------------------------------------+-------------+-------------+-------------+-------------+
row in set (0.00 sec)
mysql>

當用INSERT創建賬戶時,使用FLUSH PRIVILEGES 的原因是告訴服務器重讀授權表。否則,只有重啟服務器後更改才會生效。使用 GRANT,則不需要使用FLUSH PRIVILEGES。

用INSERT語句時,使用PASSWORD()函數是為了加密密碼。GRANT語句自動加密密碼,因此不需要PASSWORD()。

'Y' 值啟用賬戶權限。

五、庫操作

必須首先登錄到mysql 中,有關操作都是在mysql 的提示符下進行,而且每個命令以分號結束。

5.1 創建數據庫

命令:create database ;

例1:創建一個名為test 的數據庫

mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql>

5.2 顯示所有的數據庫

命令:show databases;(注意:最後有個s)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| david |
| mysql |
| test |
+--------------------+
rows in set (0.00 sec)
mysql>

5.3 刪除數據庫

命令:drop database ;

例2:刪除名為test 的數據庫

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)
mysql>

5.4 連接數據庫

命令: use ;

例3:連接david 數據庫

mysql> use david;
Database changed
mysql>

5.5 查看當前使用的數據庫

命令:select database();

mysql> select database();
+------------+
| database() |
+------------+
| david |
+------------+
row in set (0.00 sec)
mysql>

5.6 當前數據庫包含的表信息

命令:show tables;(注意:最後有個s)

mysql> show tables;
+-----------------+
| Tables_in_david |
+-----------------+
| emp |
+-----------------+
row in set (0.00 sec)
mysql>

六、表操作

操作之前應連接某個數據庫。

6.1 建立表

create table  (  [,.. ]);
create table tablename (col1 type1 [not null] [primary key],col2 type2 [not null],..);
mysql> create table myclass (
-> id int(4) not null primary key auto_increment,
-> name char(20) not null,
-> sex int(4) not null default '0',
-> degree double(16,2));
Query OK, 0 rows affected (0.04 sec)
mysql>

補充:根據已有的表創建新表。

create table tab_new like tab_old; (只有表結構)
create table tab_new as select * from tab_old; (既包含表結構,又包含表數據)

只包含表結構:

mysql> create table myclass2 like myclass;
Query OK, 0 rows affected (0.00 sec)
mysql>

既包含表結構,又包含表數據:

mysql> insert into myclass values(1, 'david', 1, 20130417.16);
Query OK, 1 row affected (0.02 sec)
mysql>
mysql>
mysql> create table myclass3 as select * from myclass;
Query OK, 1 row affected (0.07 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from myclass3;
+----+-------+-----+-------------+
| id | name | sex | degree |
+----+-------+-----+-------------+
| 1 | david | 1 | 20130417.16 |

+----+-------+-----+-------------+
row in set (0.02 sec)
mysql>

6.2 獲取表結構

命令:

desc 表名;
or
show columns from 表名;

獲取myclass & myclass2 表結構

mysql> desc myclass;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | | | |
| sex | int(4) | NO | | 0 | |
| degree | double(16,2) | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
rows in set (0.00 sec)
mysql> show columns from myclass2;
+--------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | | | |
| sex | int(4) | NO | | 0 | |
| degree | double(16,2) | YES | | NULL | |
+--------+--------------+------+-----+---------+----------------+
rows in set (0.00 sec)
mysql>

6.3 刪除表

命令:drop table ;

例:刪除表名為 myclass3 的表

mysql> drop table myclass3;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+-----------------+
| Tables_in_david |
+-----------------+
| emp |
| myclass |
| myclass2 |
+-----------------+
rows in set (0.00 sec)
mysql>

6.4 更改表名

命令:rename table 原表名 to 新表名;
例:將表 myclass2 名字更改為 myclass4
mysql> rename table myclass2 to myclass4;
Query OK, 0 rows affected (0.02 sec)
mysql> show tables;
+-----------------+
| Tables_in_david |
+-----------------+
| emp |
| myclass |
| myclass4 |
+-----------------+
rows in set (0.00 sec)
mysql>

6.5 在表中增加字段

命令:alter table 表名 add 字段 類型 其他;

例:在表 myclass 中添加了一個字段passtest,類型為int(4),默認值為0。

mysql> alter table myclass add passtest int(4) default '0'; 

Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> desc myclass;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | char(20) | NO | | | |
| sex | int(4) | NO | | 0 | |
| degree | double(16,2) | YES | | NULL | |
| passtest | int(4) | YES | | 0 | |
+----------+--------------+------+-----+---------+----------------+
rows in set (0.00 sec)
mysql>

七、數據操作

7.1 插入數據

命令:insert into [( [,.. ])] values ( 值1 )[, ( 值n )];

例:向 myclass 表中插入以下記錄,留空的表示使用默認值。

MySQL 基礎常用的命令-實用型

mysql> insert into myclass (id, name, sex, degree, passtest) values(1, 'david', 1, 80.56, 78); 
Query OK, 1 row affected (0.00 sec)
mysql> insert into myclass values(2, 'sandy', 0, 100, 90);
Query OK, 1 row affected (0.00 sec)
mysql> insert into myclass (id, name, sex, degree) values(3, 'renee', 0, 90.34);
Query OK, 1 row affected (0.00 sec)
mysql> insert into myclass (id, name) values(4, 'china');
Query OK, 1 row affected (0.00 sec)
mysql>

7.2 查詢表中的數據

a. 查詢所有行

命令:select from < 表名 > where < 表達式 >;

例1:查看錶 myclass 中所有數據

mysql> select * from myclass;
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 80.56 | 78 |
| 2 | sandy | 0 | 100.00 | 90 |
| 3 | renee | 0 | 90.34 | 0 |
| 4 | china | 0 | NULL | 0 |
+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

例2:查詢表 david 相關信息

mysql> select * from myclass where name='david';
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 80.56 | 78 |
+----+-------+-----+--------+----------+
row in set (0.00 sec)
mysql>

b. 查詢前幾行數據

例如:查看錶 myclass 中前2行數據

mysql> select * from myclass limit 2;
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 80.56 | 78 |
| 2 | sandy | 0 | 100.00 | 90 |
+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

或者:

mysql> select * from myclass order by id limit 2;
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 80.56 | 78 |
| 2 | sandy | 0 | 100.00 | 90 |
+----+-------+-----+--------+----------+
rows in set (0.01 sec)
mysql>

7.3 刪除表中的數據

命令:delete from 表名 where 表達式;

例如:刪除表 myclass 中編號為4的記錄

mysql> delete from myclass where id=4;
Query OK, 1 row affected (0.00 sec)
mysql> select * from myclass;
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 80.56 | 78 |
| 2 | sandy | 0 | 100.00 | 90 |
| 3 | renee | 0 | 90.34 | 0 |

+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

7.4 修改表中的數據

update 表名 set 字段 = 新值,… where 條件;

例:修改 myclass 表中編號為1的記錄,將degree 值改成89.99

mysql> update myclass set degree=89.99 where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from myclass;
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 89.99 | 78 |
| 2 | sandy | 0 | 100.00 | 90 |
| 3 | renee | 0 | 90.34 | 0 |
+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

八、數據的導入導出

8.1 導出整個數據庫

命令:mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名

[root@TS-DEV bin]# ./mysqldump -uroot -p david > /tmp/david/david.sql
Enter password:
[root@TS-DEV bin]# ll /tmp/david/
total 4
-rw-r--r-- 1 root root 2764 Apr 17 17:13 david.sql

[root@TS-DEV bin]#

8.2 導出一個表

命令:mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名

[root@TS-DEV bin]# ./mysqldump -uroot -p david myclass > /tmp/david/david_myclass.sql
Enter password:
[root@TS-DEV bin]# ll /tmp/david/
total 8
-rw-r--r-- 1 root root 1854 Apr 17 17:16 david_myclass.sql
-rw-r--r-- 1 root root 2764 Apr 17 17:13 david.sql
[root@TS-DEV bin]#

8.3 導出一個數據庫結構

命令:mysqldump -u root -p -d --add-drop-table test > test_db.sql

-d 沒有數據 --add-drop-table 在每個create 語句之前增加一個drop table

[root@TS-DEV bin]# ./mysqldump -uroot -p -d --add-drop-table david > /tmp/david/david_db.sql
Enter password:
[root@TS-DEV bin]#

8.4 導入數據庫

a. 常用source 命令

進入mysql 數據庫控制檯

./mysql -uroot -p

mysql> show databases; 

+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
rows in set (0.00 sec)
mysql> create database sandy;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| sandy |
+--------------------+
rows in set (0.00 sec)
mysql> use sandy
Database changed
mysql> source /tmp/david/david.sql
Query OK, 0 rows affected (0.00 sec)
...
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0...
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0...
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+-----------------+
| Tables_in_sandy |
+-----------------+
| emp |
| myclass |
| myclass4 |
+-----------------+
rows in set (0.00 sec)
mysql> select * from emp;
+------+-------+
| id | name |
+------+-------+
| 1 | david |
| 2 | sandy |
+------+-------+
rows in set (0.00 sec)
mysql>

b. 使用mysql 命令

先創建要導入的數據庫 renee。

mysql> create database renee;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| renee |
| sandy |
+--------------------+
rows in set (0.00 sec)
mysql>

導入數據

[root@TS-DEV bin]# ./mysql -uroot -p -D renee < /tmp/david/david_myclass.sql 
Enter password:
[root@TS-DEV bin]#

查看數據

mysql> use renee;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_renee |
+-----------------+
| myclass |
+-----------------+
row in set (0.00 sec)
mysql> select * from myclass;
+----+-------+-----+--------+----------+
| id | name | sex | degree | passtest |
+----+-------+-----+--------+----------+
| 1 | david | 1 | 89.99 | 78 |
| 2 | sandy | 0 | 100.00 | 90 |
| 3 | nancy | 0 | 90.34 | 0 |
+----+-------+-----+--------+----------+
rows in set (0.00 sec)
mysql>

更多導入導出命令,請自行Google+Baidu。


分享到:


相關文章: