+ -
当前位置:首页 → 问答吧 → 求助:从文件导入MYSQL数据库的记录有1689条,再用语句将其导出,却有1760条,是啥原因?

求助:从文件导入MYSQL数据库的记录有1689条,再用语句将其导出,却有1760条,是啥原因?

时间:2011-06-19

来源:互联网

我写一个图书管理程序,用的语言是C/C++,数据库有三个表,分别为book,type,author。数据库的结构如下:
SQL code

mysql> show tables;
+----------------------+
| Tables_in_libmanager |
+----------------------+
| author               |
| book                 |
| type                 |
+----------------------+
3 rows in set (0.33 sec)

mysql> describe book;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| book_id      | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| book_name    | varchar(100)     | NO   |     | NULL    |                |
| book_page    | int(11)          | NO   |     | NULL    |                |
| book_type_id | int(10) unsigned | NO   |     | NULL    |                |
+--------------+------------------+------+-----+---------+----------------+
4 rows in set (0.11 sec)

mysql> describe type;
+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| book_type_id | int(10)      | NO   |     | 0       |       |
| book_type    | varchar(100) | NO   | PRI | NULL    |       |
+--------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> describe author;
+-----------------+------------------+------+-----+---------+-------+
| Field           | Type             | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+---------+-------+
| book_id         | int(10) unsigned | NO   | PRI | NULL    |       |
| book_author     | varchar(100)     | NO   |     | NULL    |       |
| book_translater | varchar(100)     | YES  |     | NULL    |       |
+-----------------+------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)




我将书籍信息写到一个文本文件里,文件的格式为:
书籍id(book.book_id)、书名(book.book_name)、书籍页数(book.book_page)、书籍类型id(book.book_type_id)、书籍类型(type.book_type)、作者(author.book_author)、译者(author.book_translater,无请输入NULL), 文件第一行为BEGINOFFILE,最后一行为ENDOFFILE
再用C++程序将其导入到数据库中,文本文件摘要如下(只有头尾):

SQL code

BEGINOFFILE
1 四朝政治风云 311 115 /丛书/走向未来丛书/1988年出版 怀效锋 NULL
2 人的发现:马丁.路德与宗教改革 228 111 /丛书/走向未来丛书/1984年出版 李平晔 NULL
3 增长的极限:罗马俱乐部关于人类困境的研究报告 251 111 /丛书/走向未来丛书/1984年出版 麻省理工学院研究计划小组 李宝恒
4 激动人心的年代:世纪之交物理学革命的历史考察和哲学探讨 324 111 /丛书/走向未来丛书/1984年出版 李醒民 NULL
5 GEB:一条永恒的金带 252 111 /丛书/走向未来丛书/1984年出版 道.霍夫斯塔特 乐秀成
6 现代物理学和东方神秘主义 256 111 /丛书/走向未来丛书/1984年出版 F.卡普拉 灌耕
7 现实与选择:当代中国工业的结构与体制 304 111 /丛书/走向未来丛书/1984年出版 朱家明 NULL
......
1684 物理学(第五版)习题分析与解答 342 120813 /自然科学/物理/综合 马文蔚 NULL
1685 物理学:揭密系列(Physics.Demystified) 618 120813 /自然科学/物理/综合 Stan.Gibilisco NULL
1686 物理学难题集萃(增订本) 1318 120813 /自然科学/物理/综合 佚名 NULL
1687 物理学原理在工程技术中的应用 336 120813 /自然科学/物理/综合 马文蔚 NULL
1688 物理学中的非线性方程 403 120813 /自然科学/物理/综合 佚名 NULL
1689 应用物理学 279 120813 /自然科学/物理/综合 佚名 NULL
ENDOFFILE


可以看到一共1689条信息,用程序导入后的确是1689条
SQL code

mysql> select count(*) from book;
+----------+
| count(*) |
+----------+
|     1689 |
+----------+
1 row in set (0.07 sec)



现在这1689条数据都在数据库里了,我想将其导出到文本文件,以备份,还是用C/C++语言,却发现最后导出到文件里的有1760条,多了92条。为简单起见,我就贴在mysql命令行里的内容了,在程序里用的是一模一样的SQL查询语句:

SQL code

mysql> select book.book_id, book.book_name, book.book_page, book.book_type_id, type.book_type, author.book_author, author.book_translater from book, type, author where book.book_type_id = type.book_type_id and book.book_id = author.book_id;
......(略去多条输出)
|    1684 | 物理学(第五版)习题分析与解答                                                            |       342 |       120813 | /自然科学/物理/综合                                      | 马文蔚                                        | NULL                                    |
|    1685 | 物理学:揭密系列(Physics.Demystified)                                                          |       618 |       120813 | /自然科学/物理/综合                                      | Stan.Gibilisco                                   | NULL                                    |
|    1686 | 物理学难题集萃(增订本)                                                                     |      1318 |       120813 | /自然科学/物理/综合                                      | 佚名                                           | NULL                                    |
|    1687 | 物理学原理在工程技术中的应用                                                           |       336 |       120813 | /自然科学/物理/综合                                      | 马文蔚                                        | NULL                                    |
|    1688 | 物理学中的非线性方程                                                                       |       403 |       120813 | /自然科学/物理/综合                                      | 佚名                                           | NULL                                    |
|    1689 | 应用物理学                                                                                      |       279 |       120813 | /自然科学/物理/综合                                      | 佚名                                           | NULL                                    |
+---------+------------------------------------------------------------------------------------------------------+-----------+--------------+------------------------------------------------------------------+--------------------------------------------------+-----------------------------------------+
1760 rows in set (0.00 sec)

mysql> 



可以看到book_id还是对的,最后一条是1689,但结果却有1760行,中间必然有重复的,请问是我的查询语句写错了吗?小弟初学数据库,请各位前辈赐教。谢谢!

作者: zwdnet   发布时间: 2011-06-19

type, author 这两个表中有重复记录。

type(book_type_id) 是主键吗?
author(book_id)是主键吗?

作者: ACMAIN_CHM   发布时间: 2011-06-19

问题应该是出在这个表上。book_type_id有重复的。

mysql> describe type;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| book_type_id | int(10) | NO | | 0 | |
| book_type | varchar(100) | NO | PRI | NULL | |
+--------------+--------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

作者: ACMAIN_CHM   发布时间: 2011-06-19

相关阅读 更多