【MYSQL数据库开发之三】MYSQL 获得数据库和表的信息、日期计算、对表的删除修改等操作!

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 
转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/mysql/778.html

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

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       |

| 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 |

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

5 rows in set (0.00 sec)

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

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

1

2

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”;

示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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

 

mysql> select *from people;

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

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

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

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

| 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    | 1990-1-1  | 2100-10-10 |

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

5 rows in set (0.00 sec)

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

1

2

3

4

5

6

7

8

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

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

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

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

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

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

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

2 rows in set (0.08 sec)

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

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

1

2

3

4

5

6

7

8

9

10

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

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

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

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

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

| 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:

1

2

3

4

5

6

7

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

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

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

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

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

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

1 row in set (0.00 sec)

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

1

2

3

4

5

6

7

8

9

10

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

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

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

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

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

| 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.00 sec)

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

1

2

3

4

5

6

7

8

9

10

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

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

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

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

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

| 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.00 sec)

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

1

2

3

4

5

6

7

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

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

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

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

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

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

1 row in set (0.00 sec)

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

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

1

2

3

4

5

6

7

8

9

10

11

mysql> select name,birthday from people;

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

| name       | birthday  |

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

| himi       | 1989-9-23 |

| himi       | 1989-9-23 |

| himi3      | 1989-9-23 |

| insertHimi | 1989-9-23 |

| tommy      | 1990-1-1  |

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

5 rows in set (0.00 sec)

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

1

2

3

4

5

6

7

8

9

10

mysql> select distinct name from people;

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

| name       |

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

| himi       |

| himi3      |

| insertHimi |

| tommy      |

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

4 rows in set (0.00 sec)

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

1

2

3

4

5

6

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

| name  |

+-------+

| tommy |

+-------+

1 row in set (0.00 sec)

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

1

2

3

4

5

6

7

8

9

10

11

12

13

mysql> select birthday from people order by birthday;

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

| birthday  |

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

| 1989-9-23 |

| 1989-9-23 |

| 1989-9-23 |

| 1989-9-23 |

| 1990-1-1  |

| 1991-2-3  |

| 1992-5-3  |

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

7 rows in set (0.00 sec)

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

1

2

3

4

5

6

7

8

9

10

11

12

13

mysql> select name from people order by name desc;

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

| name       |

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

| xiao       |

| tommy      |

| insertHimi |

| himi3      |

| himi       |

| himi       |

| chinle     |

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

7 rows in set (0.00 sec)

 5. 日起计算;

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

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 |

| 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 |

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

7 rows in set (0.00 sec)

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

1

2

3

4

5

6

7

8

9

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()是适合的函数。为了看它怎样工作,运行一个简单的查询: 

1

2

3

4

5

6

7

8

9

10

11

12

13

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 |

| 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 |

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

7 rows in set (0.00 sec)

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

1

2

3

4

5

6

7

8

9

10

11

12

13

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

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

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

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

| himi       | 1989-9-23 |                10 |

| 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 |

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

7 rows in set (0.00 sec)

时间: 2025-01-21 12:04:43

【MYSQL数据库开发之三】MYSQL 获得数据库和表的信息、日期计算、对表的删除修改等操作!的相关文章

《PHP和MySQL Web开发从新手到高手(第5版)》一2.8 修改存储的数据

2.8 修改存储的数据 PHP和MySQL Web开发从新手到高手(第5版)将数据输入到表中之后,你可能会发现需要修改它.不管是修正拼写错误,还是修改添加笑话的日期,这些都要使用UPDATE命令来完成.这条命令包含了SELECT和INSERT命令的元素,因为后两条命令都是用来挑选出条目以便修改和设置列的值.UPDATE命令的一般形式如下所示: UPDATE tableName SET colName = newValue, - WHERE conditions 例如,想要更改我们之前输入的一条笑

《PHP和MySQL Web开发从新手到高手(第5版)》一一2.8 修改存储的数据

2.8 修改存储的数据 PHP和MySQL Web开发从新手到高手(第5版)将数据输入到表中之后,你可能会发现需要修改它.不管是修正拼写错误,还是修改添加笑话的日期,这些都要使用UPDATE命令来完成.这条命令包含了SELECT和INSERT命令的元素,因为后两条命令都是用来挑选出条目以便修改和设置列的值.UPDATE命令的一般形式如下所示: UPDATE tableName SET colName = newValue, - WHERE conditions 例如,想要更改我们之前输入的一条笑

php配置sqlite数据库开发实例

百度搜索下载SqLiteManager工具 PHP5已经绑定sqlite 1.手动添加的php的pdo的驱动扩展支持 ,在PHP.ini添加 extension=php_pdo.dll extension=php_pdo_sqlite.dll extension=php_sqlite.dll extension_dir = "C:\Program Files\Apache Group\php5\ext" 2.在C:\Program Files\Apache Group\php5\ext

《测试驱动数据库开发》目录—导读

版权声明 测试驱动数据库开发 Authorized translation from the English language edition, entitled Test-Driven Database Development: Unlocking Agility, 9780321784124 by Max Guernsey, III, published by Pearson Education, Inc., publishing as Addison-Wesley, Copyright 2

《测试驱动数据库开发》—第2章2.1节TDD中类的角色

第 2 章 建立数据库的类 测试驱动数据库开发 开始测试驱动数据库时,需要做的第一件事是定义数据库的类,并且不用过多地担心特定的数据库实例.读完本书后,读者将有可能开始从允许任意的手工修改,转变到允许保持任意有意义的数据库实例.为了帮读者达到这个目的,本章将深入讨论什么是类以及类如何能够提供帮助,还将深入探讨在数据库开发中的影响力是如何不同于应用程序开发的影响力的. 在调和了类的本质与在数据库开发中出现的新的影响力之后,本章展现了一个数据库的类的需求,并展示了如何实现该需求.希望能为开发者提供与

oracle-数据库开发,怎么从数据库服务器上看到前台程序执行过哪些SQL

问题描述 数据库开发,怎么从数据库服务器上看到前台程序执行过哪些SQL 具体的应用情景是这样的,我编写了一个简单的Delphi的程序,操作Oracle数据库,我想看到后台的数据库执行了哪些SQL,怎么在oracle上查看到. 主要是因为我在程序中使用绑定变量的方法拼接的SQL,所以没有办法在程序中通过调试看到最后拼成的SQL是什么样的,但是它执行出错,所以我想在后台看到最终执行的SQL是什么样的,这样才能发现问题. 解决方案 select * from v$sql select * from d

《PHP和MySQL Web开发从新手到高手(第5版)》一2.9 删除存储的数据

2.9 删除存储的数据 PHP和MySQL Web开发从新手到高手(第5版)在SQL中删除条目非常容易,你可能已经注意到了,这是一个重复的话题.以下是该命令的语法: DELETE FROM tableName WHERE conditions 要从表中删除所有关于chicken的笑话,使用以下的查询: DELETE FROM joke WHERE joketext LIKE "%chicken%" 信不信由你,DELETE命令中的WHERE子句是可选的.因此,当输入这条命令的时候,你应

《测试驱动数据库开发》——第 2 章 建立数据库的类

第 2 章 建立数据库的类 测试驱动数据库开发开始测试驱动数据库时,需要做的第一件事是定义数据库的类,并且不用过多地担心特定的数据库实例.读完本书后,读者将有可能开始从允许任意的手工修改,转变到允许保持任意有意义的数据库实例.为了帮读者达到这个目的,本章将深入讨论什么是类以及类如何能够提供帮助,还将深入探讨在数据库开发中的影响力是如何不同于应用程序开发的影响力的. 在调和了类的本质与在数据库开发中出现的新的影响力之后,本章展现了一个数据库的类的需求,并展示了如何实现该需求.希望能为开发者提供与实

《PHP和MySQL Web开发从新手到高手(第5版)》一一2.9 删除存储的数据

2.9 删除存储的数据 PHP和MySQL Web开发从新手到高手(第5版)在SQL中删除条目非常容易,你可能已经注意到了,这是一个重复的话题.以下是该命令的语法:**DELETE FROM tableName WHERE conditions**要从表中删除所有关于chicken的笑话,使用以下的查询:**DELETE FROM joke WHERE joketext LIKE "%chicken%"**小心回车键 信不信由你,DELETE命令中的WHERE子句是可选的.因此,当输入