操作数据库
关于数据库的操作比较少,主要是:看、建、用、删。
查看数据库
获取服务器上的数据库列表通常很有用。执行show databases;命令就可以搞定。
1
|
mysql> show databases;
|
创建数据库
1
2
|
mysql>
create
database
db_test;
Query OK, 1 row affected (0.00 sec)
|
使用数据库
数据库一旦创建,就可以通过“使用”(use命令)数据库,将其指定为默认的工作数据库。
1
2
|
mysql> use db_test;
Database
changed
|
删除数据库
删除数据库的方式与创建的方式很相似。可以在mysql客户端中使用drop命令删除数据库,如下:
1
2
|
mysql>
drop
database
db_test;
Query OK, 0
rows
affected (0.00 sec)
|
操作数据表
这里将对如何创建、列出、查看、删除和修改MySQL数据库表。主要是CURD。
创建表
表通过create table语句来创建。创建表的过程中会使用非常多的选项和子句,在这里完全总结一遍也是不现实的,这里只是总结最普遍的,以后遇到别的,再单个总结。创建表的一般用法如下:
1
2
3
4
5
6
7
8
|
mysql>
create
table
tb_test(
-> id
int
unsigned
not
null
auto_increment,
-> firstname
varchar
(25)
not
null
,
-> lastname
varchar
(25)
not
null
,
-> email
varchar
(45)
not
null
,
-> phone
varchar
(10)
not
null
,
->
primary
key
(id));
Query OK, 0
rows
affected (0.03 sec)
|
记住,表至少包含一列。另外,创建表之后总是可以再回过头来修改表的结构。无论当前是否在使用目标数据库,都可以创建表,只要在表名前面加上目标数据库即可。例如:
1
2
3
4
5
6
7
8
|
mysql>
create
table
db_test.tb_test(
-> id
int
unsigned
not
null
auto_increment,
-> firstname
varchar
(25)
not
null
,
-> lastname
varchar
(25)
not
null
,
-> email
varchar
(45)
not
null
,
-> phone
varchar
(10)
not
null
,
->
primary
key
(id));
Query OK, 0
rows
affected (0.03 sec)
|
有条件的创建表
在默认情况下,如果试图创建一个已经存在的表,MySQL会产生一个错误。为了避免这个错误,create table语句提供了一个子句,如果你希望在目标表已经存在的情况下简单地退出表创建,就可以使用这个子句。例如:
1
2
3
4
5
6
7
8
|
mysql>
create
table
if
not
exists db_test.tb_test(
-> id
int
unsigned
not
null
auto_increment,
-> firstname
varchar
(25)
not
null
,
-> lastname
varchar
(25)
not
null
,
-> email
varchar
(45)
not
null
,
-> phone
varchar
(10)
not
null
,
->
primary
key
(id));
Query OK, 0
rows
affected, 1 warning (0.00 sec)
|
无论是否已经创建,都会在返回到命令提示窗口时显示“Query OK”消息。
复制表
基于现有的表创建新表是一项很容易的任务。以下代码将得到tb_test表的一个副本,名为tb_test2:
1
2
3
|
mysql>
create
table
tb_test2
select
*
from
db_test.tb_test;
Query OK, 0
rows
affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
将向数据库增加一个相同的表tb_test2。而有的时候,可能希望只基于现有表的几个列创建一个表。通过create select语句中指定列就可以实现:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
mysql> describe tb_test;
+
-----------+------------------+------+-----+---------+----------------+
| Field | Type |
Null
|
Key
|
Default
| Extra |
+
-----------+------------------+------+-----+---------+----------------+
| id |
int
(10) unsigned |
NO
| PRI |
NULL
| auto_increment |
| firstname |
varchar
(25) |
NO
| |
NULL
| |
| lastname |
varchar
(25) |
NO
| |
NULL
| |
| email |
varchar
(45) |
NO
| |
NULL
| |
| phone |
varchar
(10) |
NO
| |
NULL
| |
+
-----------+------------------+------+-----+---------+----------------+
5
rows
in
set
(0.01 sec)
mysql>
create
table
tb_test2
select
id, firstname, lastname, email
from
tb_test;
Query OK, 0
rows
affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> describe tb_test2;
+
-----------+------------------+------+-----+---------+-------+
| Field | Type |
Null
|
Key
|
Default
| Extra |
+
-----------+------------------+------+-----+---------+-------+
| id |
int
(10) unsigned |
NO
| | 0 | |
| firstname |
varchar
(25) |
NO
| |
NULL
| |
| lastname |
varchar
(25) |
NO
| |
NULL
| |
| email |
varchar
(45) |
NO
| |
NULL
| |
+
-----------+------------------+------+-----+---------+-------+
4
rows
in
set
(0.01 sec)
|
创建临时表
有的时候,当工作在非常大的表上时,可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所 需的少数记录,将记录保存到一个临时表可能更快一些,然后对这些临时表进行查询操作。可以通过使用temporary关键字和create table语句来实现。
1
2
3
|
mysql>
create
temporary
table
emp_temp
select
firstname, lastname
from
tb_test;
Query OK, 0
rows
affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
临时表的创建与其它表一样,只是它们存储在操作系统指定的临时目录中。临时表将在你连接MySQL期间存在,当你断开时,MySQL将自动删除表并释放所有的内存空间;当然了,你也可以手动的使用drop table命令删除临时表。
查看数据库中可用的表
可以使用show tables命令完成。例如:
1
2
3
4
5
6
7
8
|
mysql> show tables;
+
-------------------+
| Tables_in_db_test |
+
-------------------+
| tb_test |
| tb_test2 |
+
-------------------+
2
rows
in
set
(0.00 sec)
|
查看表结构
可以使用describe语句查看表结构,例如:
1
2
3
4
5
6
7
8
9
10
11
|
mysql> describe tb_test;
+
-----------+------------------+------+-----+---------+----------------+
| Field | Type |
Null
|
Key
|
Default
| Extra |
+
-----------+------------------+------+-----+---------+----------------+
| id |
int
(10) unsigned |
NO
| PRI |
NULL
| auto_increment |
| firstname |
varchar
(25) |
NO
| |
NULL
| |
| lastname |
varchar
(25) |
NO
| |
NULL
| |
| email |
varchar
(45) |
NO
| |
NULL
| |
| phone |
varchar
(10) |
NO
| |
NULL
| |
+
-----------+------------------+------+-----+---------+----------------+
5
rows
in
set
(0.00 sec)
|
另外,使用show命令也能得到相同的结果,例如:
1
2
3
4
5
6
7
8
9
10
11
|
mysql> show columns
in
tb_test;
+
-----------+------------------+------+-----+---------+----------------+
| Field | Type |
Null
|
Key
|
Default
| Extra |
+
-----------+------------------+------+-----+---------+----------------+
| id |
int
(10) unsigned |
NO
| PRI |
NULL
| auto_increment |
| firstname |
varchar
(25) |
NO
| |
NULL
| |
| lastname |
varchar
(25) |
NO
| |
NULL
| |
| email |
varchar
(45) |
NO
| |
NULL
| |
| phone |
varchar
(10) |
NO
| |
NULL
| |
+
-----------+------------------+------+-----+---------+----------------+
5
rows
in
set
(0.00 sec)
|
删除表
删除表是使用drop table语句实现的,其语法如下:
1
|
drop
[
temporary
]
table
[if exists] tbl_name [, tbl_name, ...]
|
更改表结构
我们会发现,我们会经常修改和改进表结构,特别是在开发初期;但是,每次进行修改时不必都先删除再重新创建表。相反,可以使用alter语句修改表 的结构。利用这个语句,可以再必要时删除、修改和增加列。和create table一样,alter table提供了很多子句、关键字和选项。这里只是会说一些简单的使用,比如在表tb_demo表中插入一列,表示email,代码如下:
1
2
3
|
mysql>
alter
table
tb_demo
add
column
email
varchar
(45);
Query OK, 0
rows
affected (0.14 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
新的列放在表的最后位置。不过,还可以使用适当的关键字(包括first、after和last)来控制新列的位置。如果想修改表,比如,刚刚加的email,我想加入一个not null控制,代码可以是这样的:
1
2
3
|
mysql>
alter
table
tb_demo change email email
varchar
(45)
not
null
;
Query OK, 0
rows
affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
如果觉的这个email这列没有存在的必要了,可以使用下面的代码删除它,例如:
1
2
3
|
mysql>
alter
table
tb_demo
drop
email;
Query OK, 0
rows
affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
PS:当然在实际开发当中还是要使用图形化软件的。比较专业和好用的MySQL数据库图形化管理软件:SQLyog和Navicat