免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xxjoyjn
打印 上一主题 下一主题

问一个MSYQL的初级问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-05-22 13:14 |只看该作者
难道不可以建立多个索引吗?
下面两个建立表
CREATE DATABASE manage;
use manage;
CREATE TABLE dept
(id int(4) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL default ' ',
PRIMARY KEY (id),
KEY (name)
)TYPE=MyISAM;
INSERT INTO dept (name) VALUES ('computer');
INSERT INTO dept (name) VALUES ('history');

CREATE TABLE student
( id int(4) NOT NULL  AUTO_INCREMENT,
  name varchar(20) NOT NULL DEFAULT ' ',
  sex varchar( 8 )   NOT NULL DEFAULT 'male',
  age int(4) DEFAULT '0',
  dept varchar(20),
  PRIMARY KEY id,
  KEY (name),
  KEY (sex),
  KEY (age),
  KEY (dept),
  FOREIGN KEY (dept) REFERENCES dept(name) ON DELETE CASCADE
)TYPE=MyISAM;

INSERT INTO student (name,sex,age,dept) VALUES ('xxj','male',34,'computer');
INSERT INTO student (name,sex,age,dept) VALUES ('imp','female',25,'history');

为什么第一个正确通过,第二个就不行?

[ 本帖最后由 xxjoyjn 于 2006-5-22 13:16 编辑 ]

论坛徽章:
0
12 [报告]
发表于 2006-05-22 13:18 |只看该作者

手册,create table 章节,有三种索引的解释。
再者你从 create table 的语法也可以看出来。

论坛徽章:
0
13 [报告]
发表于 2006-05-22 13:21 |只看该作者
你为什么认为错误是由“不能建立多个索引”引起的,而不是你“用错表类型”引起的?

论坛徽章:
0
14 [报告]
发表于 2006-05-22 13:34 |只看该作者
你的表尾使用ENGINE=innoDB而没有使用TYPE=MyISAM这个两个咚咚到底是什么含义?
他们有什么区别?在使用数据库的过程中有什么不同?

论坛徽章:
0
15 [报告]
发表于 2006-05-22 13:49 |只看该作者
原帖由 xxjoyjn 于 2006-5-22 13:34 发表
你的表尾使用ENGINE=innoDB而没有使用TYPE=MyISAM这个两个咚咚到底是什么含义?
他们有什么区别?在使用数据库的过程中有什么不同?

指定表类型啊
MySQL 支持多种表类型,默认是使用 MyISAM 表类型(更老的版本是 ISAM),所以建表时如果不加 type 参数,就是用它了。
但 外健、事务处理 等特性不是 MyISAM 能处理的,所以 MySQL 用了新引擎 InnoDB,建表时要加以指定 type=innodb。
InnoDB 的数据库和表不是以目录形式存在于 data 目录下,而是存在空间文件中,类似 ibdata1。
呵呵,看 InnoDB 的手册吧。本论坛的手册页面中有,中文的,乔版主翻译的。

论坛徽章:
0
16 [报告]
发表于 2006-05-22 13:57 |只看该作者
你show create table时出现的是ENGINE=InnoDB,而你要我写type=InnoDB?

论坛徽章:
0
17 [报告]
发表于 2006-05-22 14:20 |只看该作者
原帖由 xxjoyjn 于 2006-5-22 13:57 发表
你show create table时出现的是ENGINE=InnoDB,而你要我写type=InnoDB?

一样的,你自己试了不就知道了。

论坛徽章:
0
18 [报告]
发表于 2006-05-22 14:31 |只看该作者
我不知道我这里老是出错:

CREATE DATABASE manage;
use manage;
CREATE TABLE dept
(id int(4) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL default ' ',
PRIMARY KEY (id),
KEY (name)
)ENGINE=InnoDB;
INSERT INTO dept (name) VALUES ('computer');
INSERT INTO dept (name) VALUES ('history');

CREATE TABLE student
( id int(4) NOT NULL  AUTO_INCREMENT,
  name varchar(20) NOT NULL DEFAULT ' ',
  sex varchar(   NOT NULL DEFAULT 'male',
  age int(4) DEFAULT '0',
  dept varchar(20),
  PRIMARY KEY id,
  KEY (name),
  KEY (sex),
  KEY (age),
  KEY (dept),
  FOREIGN KEY (dept) REFERENCES dept(name) ON DELETE CASCADE
)ENGINE=InnoDB;



错误如下:
mysql> source  /root/mydb;
Query OK, 1 row affected (0.00 sec)

Database changed
ERROR 1064: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'ENGINE=InnoDB' at line 6
ERROR 1146: Table 'manage.dept' doesn't exist
ERROR 1146: Table 'manage.dept' doesn't exist
ERROR 1064: You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near '
  KEY (name),
  KEY (sex),
  KEY (age),
  KEY (dept),
  FOREIG
ERROR 1146: Table 'manage.student' doesn't exist
ERROR 1146: Table 'manage.student' doesn't exist

论坛徽章:
0
19 [报告]
发表于 2006-05-22 14:47 |只看该作者

  1. mysql> show create table dept\G
  2. *************************** 1. row ***************************
  3.        Table: dept
  4. Create Table: CREATE TABLE `dept` (
  5.   `id` int(4) NOT NULL auto_increment,
  6.   `name` varchar(20) NOT NULL default '',
  7.   PRIMARY KEY  (`id`),
  8.   KEY `name` (`name`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  10. 1 row in set (0.00 sec)

  11. mysql> show create table student\G
  12. *************************** 1. row ***************************
  13.        Table: student
  14. Create Table: CREATE TABLE `student` (
  15.   `id` int(4) NOT NULL auto_increment,
  16.   `name` varchar(20) NOT NULL default '',
  17.   `sex` varchar(20) NOT NULL default 'male',
  18.   `age` int(4) default '0',
  19.   `dept` varchar(20) default NULL,
  20.   PRIMARY KEY  (`id`),
  21.   KEY `name` (`name`),
  22.   KEY `sex` (`sex`),
  23.   KEY `age` (`age`),
  24.   KEY `dept` (`dept`),
  25.   CONSTRAINT `student_ibfk_1` FOREIGN KEY (`dept`) REFERENCES `dept` (`name`) ON DELETE CASCADE
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  27. 1 row in set (0.00 sec)
复制代码

我只是把你第二个语句的 primary key id 改成了 primary key (id)

另,贴代码什么的,用 [code] 标签引一下,否则会变成表情符号。

论坛徽章:
0
20 [报告]
发表于 2006-05-22 15:28 |只看该作者
你把desc student给我看看,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP