以前学的SQL语句都忘得差不多了,真失败。
现在要建立两张表:一张是学生基本信息表tb_student 一张是求职信息表tb_sjob 用的数据库是mysql-4.0.14b-win+Navicat V8.0
建立的时候遇到了几个问题
建立两个表后
CREATE TABLE `tb_student` (
`password` varchar(50) default '',
`sname` varchar(20) NOT NULL default '',
`name` varchar(20) default '',
`age` int(4) default NULL,
`sex` tinyint(1) default NULL,
`birthday` datetime default NULL,
`school` varchar(50) default NULL,
`specialty` varchar(50) default NULL,
`knowledge` varchar(20) default NULL,
`email` varchar(50) default NULL,
`resume` text,
PRIMARY KEY (`sname`)
) TYPE=MyISAM;CREATE TABLE `tb_sjob` (
`jobid` int(4) NOT NULL default '0',
`sname` varchar(20) default NULL,
`specialty` varchar(50) default NULL,
`job` varchar(50) default NULL,
`emolument` varchar(50) default NULL,
`ptime` datetime default NULL,
`atime` datetime default NULL,
`other` varchar(200) default NULL,
PRIMARY KEY (`jobid`)
) TYPE=MyISAM;就是无法用Navicat建立外键,也不知道怎么建立表关系
表关系为:
-----------------------------------------------------
主键表 | 外键表 | 关系
-----------------------------------------------------
名称 | 字段名 | 名称 | 字段名 |级联更新|级联删除
-----------------------------------------------------
tb_studnet | sanme |tb_sjob |sname | 是 | 是
------------------------------------------------------
请各位指点一下,不胜感激
现在要建立两张表:一张是学生基本信息表tb_student 一张是求职信息表tb_sjob 用的数据库是mysql-4.0.14b-win+Navicat V8.0
建立的时候遇到了几个问题
建立两个表后
CREATE TABLE `tb_student` (
`password` varchar(50) default '',
`sname` varchar(20) NOT NULL default '',
`name` varchar(20) default '',
`age` int(4) default NULL,
`sex` tinyint(1) default NULL,
`birthday` datetime default NULL,
`school` varchar(50) default NULL,
`specialty` varchar(50) default NULL,
`knowledge` varchar(20) default NULL,
`email` varchar(50) default NULL,
`resume` text,
PRIMARY KEY (`sname`)
) TYPE=MyISAM;CREATE TABLE `tb_sjob` (
`jobid` int(4) NOT NULL default '0',
`sname` varchar(20) default NULL,
`specialty` varchar(50) default NULL,
`job` varchar(50) default NULL,
`emolument` varchar(50) default NULL,
`ptime` datetime default NULL,
`atime` datetime default NULL,
`other` varchar(200) default NULL,
PRIMARY KEY (`jobid`)
) TYPE=MyISAM;就是无法用Navicat建立外键,也不知道怎么建立表关系
表关系为:
-----------------------------------------------------
主键表 | 外键表 | 关系
-----------------------------------------------------
名称 | 字段名 | 名称 | 字段名 |级联更新|级联删除
-----------------------------------------------------
tb_studnet | sanme |tb_sjob |sname | 是 | 是
------------------------------------------------------
请各位指点一下,不胜感激
之后把preview里的copy出来运行就ok了
1005 can't create table errno:150
把TYPE=MyISAM;
改为TYPE=InnoDB就可以了
对于InnoDB之外的其他存储引擎,MySQL服务器能够解析CREATE TABLE语句中的FOREIGN KEY语法,但不能使用或保存它。未来将进行扩展,能够将这类信息保存到表规范文件中,以便能被mysqldump和ODBC检索。稍后,还将为MyISAM表实现外键约束。
修改后的两个表为:CREATE TABLE `tb_student` (
`password` varchar(50) default '',
`sname` varchar(20) NOT NULL default '',
`name` varchar(20) default '',
`age` int(4) default NULL,
`sex` tinyint(1) default NULL,
`birthday` datetime default NULL,
`school` varchar(50) default NULL,
`specialty` varchar(50) default NULL,
`knowledge` varchar(20) default NULL,
`email` varchar(50) default NULL,
`resume` text,
PRIMARY KEY (`sname`),
UNIQUE KEY `student_index` (`sname`)
) TYPE=InnoDB;CREATE TABLE `tb_sjob` (
`jobid` int(4) NOT NULL default '0',
`sname` varchar(20) NOT NULL default '',
`specialty` varchar(50) default NULL,
`job` varchar(50) default NULL,
`emolument` varchar(50) default NULL,
`ptime` datetime default NULL,
`atime` datetime default NULL,
`other` varchar(200) default NULL,
PRIMARY KEY (`jobid`),
UNIQUE KEY `sjob_index` (`jobid`)
) TYPE=InnoDB;
REFERENCES `tb_student` (`sname`)
ON DELETE RESTRICT
ON UPDATE RESTRICT;你应该注意,是在tb_sjob创建sname字段到tb_student的外键。
-----------------------------------------------------------
主键表 | 外键表 | 关系
-----------------------------------------------------------
名称 | 字段名 | 名称 | 字段名 |级联更新|级联删除
-----------------------------------------------------------
tb_studnet | sanme |tb_sjob |sname | 是 | 是
-----------------------------------------------------------
ON DELETE RESTRICT ON UPDATE RESTRICT;
外键约束的4种选项:
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
RESTRICT 就是当你要删除的父表记录在子表中已经有关联的时候,不运行删除。换句话说,你必须先把子表中关联的记录先删除,才能删除父表记录。
CASCADE 级联删除,就是当你要删除的父表记录时,MYSQL会自动先帮你把子表的关联记录删除。
SET NULL 就是把子表的关联字段设置为NULL,这个的前提是子表的关联字段允许为NULL
NO ACTION 跟RESTRICT 一样吧
假设学生表是主表,工作表是关联子表,每个学生可以有多个工作。
如果学生A已经在工作表中有2个工作记录
RESTRICT :当你删除学生A时,MYSQL会报错,告诉你违反了外键约束条件
CASCADE :当你删除学生A时,MYSQL会先替你把工作表的2个工作记录删掉,再删除学生A
限制(Restrict)。不允许进行修改或删除操作。若修改或删除主表的主键时,如果子表中存在子记录,系统将产生一个错误提示。这是缺省的参照完整性设置。 置空(Set Null)。如果外键列允许为空,若修改或删除主表的主键时,把子表中参照的外键列设置为空值(NULL)。 置为缺省(Set Default)。如果指定了缺省值,若修改或删除主表的主键时,把子表中参照的外键设置为缺省值(Default)。 级联(Cascade)。把主表中主键修改为一个新的值时,相应修改子表中外键的值;或者删除主表中主键的记录时,要相应删除子表中外键的记录PS:基础真的很重要
再问一个问题行吗?
在mysql里怎样设置自动编号的?
需要在tb_sjobl的jobid字段的数据类型设置为自动编号的int