天天看点

【MySQL数据库开发之三】MySQL 获得数据库和表操作!

通过上一篇的介绍,大家可以创建自己的数据库和表以及插入表中数据等等,本章继续介绍更多的数据库的相关操作;

  1.  查看所有表单数据:(这里我直接使用上一篇创建的himiDB数据库与其中的people表进行讲解,还不太熟悉的请移步到上一篇的博文)   步骤:(获取)显示所有已存在的数据库->使用himidb数据库->(获取)显示所有表->(获取)显示所有表内的数据

mysql> show databases; 

+--------------------+ 

| Database           | 

| information_schema | 

| himiDB             | 

| mysql              | 

| performance_schema | 

| test               | 

5 rows in set (0.00 sec) 

mysql> use himidb; 

Database changed 

mysql> show tables; 

+------------------+ 

| Tables_in_himidb | 

| people           | 

1 row in set (0.00 sec) 

mysql> select *from people; 

+------------+------+----------+------+-----------+------------+ 

| name       | mz   | city     | sex  | birthday  | deathday   | 

| himi       | h    | beijing  | m    | 1989-9-23 | NULL       | 

| himi3      | h    | beijing  | m    | 1989-9-23 | NULL       | 

| insertHimi | h    | Anhui    | m    | 1989-9-23 | NULL       | 

| tommy      | m    | chaoxian | w    | 19890823  | 2100-10-10 | 

2. 假设我们修改people中的tommy 的生日为  1990-1-1日:

2.1:第一种方式可以通过txt进行,假设我们已经有一个txt存储了所有表内数据,并且tommy的生日在txt中已经是最新的了,那么我们就可以直接如下来进行更改(注意这种方式是删除以前所有表元素直接进行重新添加的操作!如果你没有之前这些数据就不要使用此方式)

mysql> DELETE FROM people; 

mysql> LOAD DATA LOCAL INFILE '/xxx/xxx/people.txt' INTO TABLE people; 

2.2:使用UPDATE进行指向性修改;

语句形式: update xx(表名) set xx(item名)   =’xxx新value’ where xx(item索引) =”where中item索引的对应value”;

示例:

mysql> update people set birthday = '1990-1-1' where name = 'tommy'; 

Query OK, 1 row affected (0.11 sec) 

Rows matched: 1  Changed: 1  Warnings: 0 

| tommy      | m    | chaoxian | w    | 1990-1-1  | 2100-10-10 | 

3.查看特定条件所有数据:

mysql> select *from people where name='himi'; 

+------+------+---------+------+-----------+----------+ 

| name | mz   | city    | sex  | birthday  | deathday | 

| himi | h    | beijing | m    | 1989-9-23 | NULL     | 

2 rows in set (0.08 sec) 

通过以上可以看出是在 select *from xx 后加入指向,比较容易理解;

 继续查看哪些是大于1990年之前的额people:

mysql> select *from people where birthday <'1990-1-1'; 

+------------+------+---------+------+-----------+----------+ 

| name       | mz   | city    | sex  | birthday  | deathday | 

| himi       | h    | beijing | m    | 1989-9-23 | NULL     | 

| himi3      | h    | beijing | m    | 1989-9-23 | NULL     | 

| insertHimi | h    | Anhui   | m    | 1989-9-23 | NULL     | 

4 rows in set (0.01 sec) 

继续查看表中有几个woman:

mysql> select *from people where sex ="w"; 

+-------+------+----------+------+----------+------------+ 

| name  | mz   | city     | sex  | birthday | deathday   | 

| tommy | m    | chaoxian | w    | 1990-1-1 | 2100-10-10 | 

继续查看表中既是woman又是在1990年以前的:(AND)

mysql> select *from people where sex ="m" and birthday < '1990-1-1'; 

4 rows in set (0.00 sec) 

继续查看表中叫tommy 或者 是beijing地区的:(OR)

mysql> select *from people where city='beijing' or birthday <'1990-1-1'; 

AND和OR可以混用,但AND比OR具有更高的优先级。如果使用两个操作符,使用圆括号进行分组~如下:

mysql> select *from people where (city='beijing' and sex='w') or (city ='chaoxian' and sex = 'w'); 

4.查看所有数据的特定条件:

假如我们需要查看所有人的性别 和名字:

mysql> select name,birthday from people; 

+------------+-----------+ 

| name       | birthday  | 

| himi       | 1989-9-23 | 

| himi3      | 1989-9-23 | 

| insertHimi | 1989-9-23 | 

| tommy      | 1990-1-1  | 

从上面的名字来看,发现了重复的名字,那么如果只想让同一名字只显示一个,可以使用 distinct 关键字;如下:

mysql> select distinct name from people; 

+------------+ 

| name       | 

| himi       | 

| himi3      | 

| insertHimi | 

| tommy      | 

来个复杂点的:使用一个WHERE子句结合行选择与列选择

mysql> select name from people where city='chaoxian' and birthday = '1990-1-1';+-------+ 

| name  | 

+-------+ 

| tommy | 

选择出的列根据生日进行排序显示(提前Himi这里又往表中添加了很多人)

mysql> select birthday from people order by birthday; 

+-----------+ 

| birthday  | 

| 1989-9-23 | 

| 1990-1-1  | 

| 1991-2-3  | 

| 1992-5-3  | 

7 rows in set (0.00 sec) 

选择出的列根据名字降序进行排序显示:

mysql> select name from people order by name desc; 

| xiao       | 

| chinle     | 

5. 日起计算;

MySQL提供了几个函数,可以用来计算日期,例如,计算年龄或提取日期部分:

YEAR()提取日期的年部分,

RIGHT(x,y)提取 x 日期的MM-DD (日历年)  部分的最右面y个字符。

mysql> select name ,birthday,curdate(),(year(curdate())-year(birthday))- (right(curdate(),5)<right(birthday,5)) from people; 

+------------+-----------+------------+--------------------------------------------------------------------------+ 

| name       | birthday  | curdate()  | (year(curdate())-year(birthday))- (right(curdate(),5)<right(birthday,5)) | 

| himi       | 1989-9-23 | 2012-04-17 |                                                                       23 | 

| himi3      | 1989-9-23 | 2012-04-17 |                                                                       23 | 

| insertHimi | 1989-9-23 | 2012-04-17 |                                                                       23 | 

| tommy      | 1990-1-1  | 2012-04-17 |                                                                       22 | 

| xiao       | 1991-2-3  | 2012-04-17 |                                                                       20 | 

| chinle     | 1992-5-3  | 2012-04-17 |                                                                       19 | 

下面我们算下死亡时间和当前时间的差值,其中我们排除deathday为NULL的人。

mysql> select name ,deathday,curdate(),(year(curdate())-year(deathday))- (right(curdate(),5)<right(deathday,5)) from people where deathday is not null; 

+--------+------------+------------+--------------------------------------------------------------------------+ 

| name   | deathday   | curdate()  | (year(curdate())-year(deathday))- (right(curdate(),5)<right(deathday,5)) | 

| tommy  | 2100-10-10 | 2012-04-17 |                                                                      -89 | 

| xiao   | 1994-1-1   | 2012-04-17 |                                                                       17 | 

| chinle | 1994-1-1   | 2012-04-17 |                                                                       17 | 

3 rows in set (0.00 sec) 

MySQL提供几个日期部分的提取函数,例如YEAR( )、MONTH( )和DAYOFMONTH( )。在这里MONTH()是适合的函数。为了看它怎样工作,运行一个简单的查询: 

mysql> select name ,birthday, year(birthday),month(birthday) ,dayofmonth(birthday) from people; 

+------------+-----------+----------------+-----------------+----------------------+ 

| name       | birthday  | year(birthday) | month(birthday) | dayofmonth(birthday) | 

| himi       | 1989-9-23 |           1989 |               9 |                   23 | 

| himi3      | 1989-9-23 |           1989 |               9 |                   23 | 

| insertHimi | 1989-9-23 |           1989 |               9 |                   23 | 

| tommy      | 1990-1-1  |           1990 |               1 |                    1 | 

| xiao       | 1991-2-3  |           1991 |               2 |                    3 | 

| chinle     | 1992-5-3  |           1992 |               5 |                    3 | 

练习:找到一个下个月是几月份:

mysql> select name,birthday,month(birthday)+1 from people; 

+------------+-----------+-------------------+ 

| name       | birthday  | month(birthday)+1 | 

| himi       | 1989-9-23 |                10 | 

| himi3      | 1989-9-23 |                10 | 

| insertHimi | 1989-9-23 |                10 | 

| tommy      | 1990-1-1  |                 2 | 

| xiao       | 1991-2-3  |                 3 | 

| chinle     | 1992-5-3  |                 6 | 

本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/908923,如需转载请自行联系原作者