| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3312 人关注过本帖
标题:[求助]关于Mysql中主外键约束的
只看楼主 加入收藏
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
 问题点数:0 回复次数:8 
[求助]关于Mysql中主外键约束的

我想在TEST数据库中建立三张表,其中表SC对其他两个表student,course有外键,语句如下:
drop table if exists student
drop table if exists course
drop table if exists sc
use test;
create table student(
sid int auto_increment primary key,
sno char(6) not null,
sname char(20) not null,
sage char(2) not null)type=InnoDB

create table course(
cid int auto_increment primary key,
cno char(3) not null,
cname char(10) not null)type=InnoDB

create table sc(
gid int auto_increment primary key,
sno char(6) not null,
cno char(3) not null,
foreign key(sno) references student(sno),
foreign key(cno) references course(cno))type=InnoDB

我查阅了一下资料,Mysql的一些早期版本并不支持外键,然而最近MySQL的不同版本都通过新InnoDB列表引擎支持外键
所以我把这三个表都声明为InnoDB的类型,但在建立表SC的过程中出现提示不能建立的信息:
[root@localhost:3306] ERROR 1005: Can't create table '.\test\sc.frm' (errno: 150)
请问一下这是什么原因呀?

[此贴子已经被作者于2007-9-6 9:17:00编辑过]

搜索更多相关主题的帖子: Mysql 
2007-09-06 09:15
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
DROP TABLE IF EXISTS student;
CREATE TABLE student(
SID INT AUTO_INCREMENT PRIMARY KEY,
SNO CHAR(6) NOT NULL,
SNAME CHAR(20) NOT NULL,
SAGE CHAR(2) NOT NULL
)ENGINE=MyISAM DEFAULT CHARACTER SET=UTF8;

DROP TABLE IF EXISTS SOURSE;
CREATE TABLE SOURSE(
CID INT AUTO_INCREMENT PRIMARY KEY,
CNO CHAR(3) NOT NULL,
CNAME CHAR(10) NOT NULL
)ENGINE=MyISAM DEFAULT CHARACTER SET=UTF8;

DROP TABLE IF EXISTS SC;
CREATE TABLE SC(
GID INT AUTO_INCREMENT PRIMARY KEY,
SNO CHAR(6) NOT NULL,
CNO CHAR(3) NOT NULL,
FOREIGN KEY(SNO) REFERENCES student(SNO),
FOREIGN KEY(CNO) REFERENCES sourse(CNO)
)ENGINE=MyISAM DEFAULT CHARACTER SET=UTF8;

我的msn: myfend@
2007-09-06 09:28
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
我按你的例子已经可以实现了,版主能否告诉我用InnoDB引擎怎么实现吗?

[此贴子已经被作者于2007-9-6 9:52:28编辑过]


英者自知,雄者自胜
2007-09-06 09:50
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
InnoDB不能使用外键约束.

DROP TABLE IF EXISTS student;
CREATE TABLE student(
SID INT AUTO_INCREMENT PRIMARY KEY,
SNO CHAR(6) NOT NULL,
SNAME CHAR(20) NOT NULL,
SAGE CHAR(2) NOT NULL
)ENGINE=InnoDB DEFAULT CHARACTER SET=UTF8;

DROP TABLE IF EXISTS SOURSE;
CREATE TABLE SOURSE(
CID INT AUTO_INCREMENT PRIMARY KEY,
CNO CHAR(3) NOT NULL,
CNAME CHAR(10) NOT NULL
)ENGINE=InnoDB DEFAULT CHARACTER SET=UTF8;

DROP TABLE IF EXISTS SC;
CREATE TABLE SC(
GID INT AUTO_INCREMENT PRIMARY KEY,
SNO CHAR(6) NOT NULL,
CNO CHAR(3) NOT NULL,
FOREIGN KEY(SNO) REFERENCES student(SNO),
FOREIGN KEY(CNO) REFERENCES sourse(CNO)
)ENGINE=MyISAM DEFAULT CHARACTER SET=UTF8;

我的msn: myfend@
2007-09-06 09:55
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
往数据库中插入汉字时显示???
我在my.ini文件中找到default-character-set=latin1
我该如何设置才能使显示正常?

英者自知,雄者自胜
2007-09-06 11:06
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
设置成utf8

我的msn: myfend@
2007-09-06 11:08
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
我已按版主的说法已把default-character-set设置了utf8,但我在Mysql的图形工具Mysql control center中用汉字插入时,查询数据库时也能正常显示汉字,但在eclipse中显示的却是乱码,这是什么原因呢?

英者自知,雄者自胜
2007-09-06 22:11
purana
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:广东-广州
等 级:版主
威 望:66
帖 子:6039
专家分:0
注 册:2005-6-17
收藏
得分:0 
先在运行输入net stop mysql

设置my.ini
[mysql]
default-character-set=gbk

[mysqld]
default-character-set=gbk

然后在运行输入net start mysql
再mysql -uroot -p进入
创建数据库
create database db default charset=gbk;
创建数据表
create table t(name varchar(300)) default charset=gbk;

然后就可以在java里写
import java.sql.*;

public class TempTest {
public static void main(String[] args) throws Exception{
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/db","root","admin");
Statement stmt=con.createStatement();
//插入中文
stmt.executeUpdate("insert into t values(\'测试\')");

ResultSet rs=stmt.executeQuery("select name from t");
while(rs.next()){
System.out.println(rs.getString(1));
}

rs.close();
stmt.close();
con.close();
}
}

我在NetBeans IDE里测试插入和显示中文都正确的.eclipse我就没用过了.

我的msn: myfend@
2007-09-07 10:07
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 

上面我也试过了,在eclipse里面好使...
以后在建立数据库和表的过程中一定得先指定他们的编码方式,否则这各种方式变来变去都把人给整晕啦...

[此贴子已经被作者于2007-9-7 12:25:03编辑过]


英者自知,雄者自胜
2007-09-07 12:24
快速回复:[求助]关于Mysql中主外键约束的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032044 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved