免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234下一页
最近访问板块 发新帖
查看: 4794 | 回复: 30
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-22 10:14 |只看该作者 |倒序浏览
不好意思,手边没有MSYQL守则,一个简单的应用涉及到MYSQL的基础知识,偶犯难了,
在此请教:

有两个表,dept (id,name),student(id,name,sex,age,dept)

1 在创建表时,要设定dept.name为唯一索引,有的书上说可以使用foreign key ,在MSYQL中
  这样用好像不行,怎么用?
2 我在创建表的过程中为什么不能进行列约束但可以进行表约束?我测试过,把primary key等约束放在
  列后面就不行,而放在表约束中就可以
3 如果我要把student.dept定为外键,与表dept.name相关联,该怎么写呢?我这样写出错了:
  create table `student`
   ( ....
    `dept` varchar(20) ,
    ....
    foreign key `dept` (dept(`name`))
   ) TYPE=MyISAM;
4 保留字KEY是定义外键的还是定义索引的?

论坛徽章:
0
2 [报告]
发表于 2006-05-22 10:42 |只看该作者
建唯一索引用 primary key、unique 都可以,用 foreign key 有点牵强,如果只有一个表呢,和谁建立外健关系去?
foreign key 的语法,http://dev.mysql.com/doc/refman/ ... ey-constraints.html,没手册就看在线的。注意索引字段的使用。

[ 本帖最后由 rardge 于 2006-5-22 10:46 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2006-05-22 10:49 |只看该作者
谢谢rardge兄弟,你真好,我都快爱上你了

论坛徽章:
0
4 [报告]
发表于 2006-05-22 11:28 |只看该作者
我按照你说的,在设定唯一索引时为什么报错?
CREATE TABLE dept
(id int(4) NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL default ' ',
PRIMARY KEY id,
UNIQUE      name
)TYPE=MyISAM;

我的意思是想建立一个唯一索引,唯一索引不是在一个表中可以建多个吗?
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 '
UNIQUE      name

是不是有语法错误?
我的MYSQL版本是4.0.12

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

论坛徽章:
0
5 [报告]
发表于 2006-05-22 11:39 |只看该作者
在MSYQL中是不是不能用UNIQUE来建立索引呀?

我看见有些人在建立表时,仅仅使用单独的一个KEY 保留字来约束一个列,这个KEY与
PRIMARY KEY ,UNIQUE,FOREIGN KEY有什么不同?

论坛徽章:
0
6 [报告]
发表于 2006-05-22 12:05 |只看该作者
我在在线守则里看到这么一句,Currently, only InnoDB tables support foreign keys. See Section 14.2.7.4, “FOREIGN KEY Constraints”. (Foreign key support in MyISAM tables is scheduled for implementation in MySQL 5.2

我想,如果按照我上面,把表的类型定义为TYPE=MyISAM,恐怕上面的定义FOREIGN KEY也会不行的,因为我的MSYQL版本不是5。2,MYISAM类型不支持FOREIGN KEY的,我没有找到关于UNIQUE的用法说明,而我把TYPE=innoDB还是不行,依然说UNIQUE

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

  1. mysql> select version();
  2. +----------------+
  3. | version()      |
  4. +----------------+
  5. | 4.1.18-max-log |
  6. +----------------+
  7. 1 row in set (0.00 sec)

  8. mysql> show create table x\G
  9. *************************** 1. row ***************************
  10.        Table: x
  11. Create Table: CREATE TABLE `x` (
  12.   `id` int(11) default NULL,
  13.   UNIQUE KEY `id` (`id`)
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  15. 1 row in set (0.00 sec)

  16. mysql> show create table x1\G
  17. *************************** 1. row ***************************
  18.        Table: x1
  19. Create Table: CREATE TABLE `x1` (
  20.   `id` int(11) default NULL,
  21.   UNIQUE KEY `id` (`id`),
  22.   CONSTRAINT `x1_ibfk_1` FOREIGN KEY (`id`) REFERENCES `x` (`id`) ON DELETE CASCADE
  23. ) ENGINE=InnoDB DEFAULT CHARSET=utf8
  24. 1 row in set (0.00 sec)
复制代码

论坛徽章:
0
8 [报告]
发表于 2006-05-22 12:59 |只看该作者
你那个表table:     x
  没有PRIMARY KEY  建表时不出错吗?

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

论坛徽章:
0
9 [报告]
发表于 2006-05-22 13:06 |只看该作者
原帖由 xxjoyjn 于 2006-5-22 12:59 发表
你那个表table
  没有PRIMARY KEY  建表时不出错吗?

呵呵,如果建表出错,还能 show 出来么?
表是表,索引是索引。
没有规定建表必须要建立索引,也没有规定建索引必须要建唯一索引,也没有规定建立唯一索引必须是主键(primary key)。

论坛徽章:
0
10 [报告]
发表于 2006-05-22 13:10 |只看该作者
那你的意思是说,保留字KEY就是建立索引,而UNIQUE KEY 就是建立唯一索引吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP