两个小的简单的问题!

point_to 2003-11-10 10:14:10
由于以前没有动过,现在也没有时间,麻烦大家了!
尽量给出详细的答案,谢了~~~~

条件:已知数据库名:DBTest(SQL Server2000)
结果:
(1) 使用SQL实现
创建表1,
字段名 类型 默认值 主键
Grp_ID int 0 Y
Sys_ID int 0 Y
Func_ID int 0 Y

CREATE TABLE tab1
(
Grp_ID INTEGER NOT NULL ,


)

创建表2,
字段名 类型 默认值 主键
Sys_ID int 0 Y
Func_ID int 0 Y
Test_Type int 1
Test_Name char(16) 0

其中表1和表2的Sys_ID、Func_ID是相同的。
...全文
23 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
point_to 2003-11-11
  • 打赏
  • 举报
回复
疑问:
字段名 类型 默认值 主键
Sys_ID int 0 Y
Func_ID int 0 Y
Test_Type int 1
Test_Name char(16) 0
1、是怎么判断出为空还是不为空的??(即NULL or NOT NULL)
2、Test_Type INTEGER NULL , 上面给出的条件有默认值1,怎么没有体现出来??

welyngj 2003-11-10
  • 打赏
  • 举报
回复
sorry!FOREIGN KEY 可以是单列键或多列键
pengdali 2003-11-10
  • 打赏
  • 举报
回复
1、
NOT NULL 只是说不允许为空,和默认值没有关系,默认值必须写default
2
如上,外键必需和主键相同
pengdali 2003-11-10
  • 打赏
  • 举报
回复
CREATE TABLE tab1
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Func_id INT NOT NULL default(0),
primary key (Sys_ID,Func_id)
)


CREATE TABLE tab2
(
Sys_ID INTEGER NOT NULL ,
Func_ID INTEGER NOT NULL ,
Test_Type INTEGER NULL ,
Test_Name CHAR(16) NOT NULL,
PRIMARY KEY(Sys_ID,Func_ID),
foreign key(Sys_ID,Func_ID) references tab1(Sys_ID,Func_ID)
)
welyngj 2003-11-10
  • 打赏
  • 举报
回复
1.主要是默认值0是不是写成NOT NULL啊???
不是,是default(0)
2。这里的FOREIGN KEY(Sys_ID,Func_ID) REFERENCE tab1对不对啊??]
不对,分开写。
FOREIGN KEY是列级约束,不能多于一列。
constraint con_func_id foreign key(func_id) references tab1(func_id),
constrint con_sys_id foreign key(sys_id) references tab1(sys_id)
point_to 2003-11-10
  • 打赏
  • 举报
回复
多谢大侠,为什么
Test_Type int 1
Test_Name char(16) 0
写成:

Test_Type INT NOT NULL default(1),
Test_Name char(16) default('0'),
就是说Test_Name char(16) default('0'),没有NOT NULL??
welyngj 2003-11-10
  • 打赏
  • 举报
回复
CREATE TABLE tab1
(
Grp_ID INT default(0) NOT NULL ,
sys_ID int default(0) not null,
Func_ID int default(0) not null,
primary key( Grp_ID, Grp_ID,Func_ID)
)

create table tab2
(sys_id int default(0) not null,
func_id int default(0) not null,
test_type int default(1),
test_name char(16) default('0')
primary key(sys_id,func_id))
point_to 2003-11-10
  • 打赏
  • 举报
回复
上面的
CREATE TABLE tab1
(
Grp_ID INTEGER NOT NULL ,


)
是我依照一本书上写的,大家看对不对:
CREATE TABLE tab1
(
Grp_ID INTEGER NOT NULL ,
Sys_ID INTEGER NOT NULL ,
Func_ID INTEGER NOT NULL ,

PRIMARY KEY( Grp_ID,Sys_ID,Func_ID)

)

主要是默认值0是不是写成NOT NULL啊???
2

CREATE TABLE tab2
(
Sys_ID INTEGER NOT NULL ,
Func_ID INTEGER NOT NULL ,
Test_Type INTEGER NULL ,
Test_Name CHAR(16) NOT NULL,

PRIMARY KEY(Sys_ID,Func_ID),
FOREIGN KEY(Sys_ID,Func_ID) REFERENCE tab1

)
这里的FOREIGN KEY(Sys_ID,Func_ID) REFERENCE tab1对不对啊??
还有就是这句话的意思,以及我写的所有的标点符号有没有错啊??
谢了~~~

pengdali 2003-11-10
  • 打赏
  • 举报
回复
如果tab2通过Grp_ID,Sys_ID外键于tab1的话:


CREATE TABLE tab1
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Func_id INT NOT NULL default(0),
primary key (Grp_ID,Sys_ID,Func_id)
)


CREATE TABLE tab2
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Test_Type INT NOT NULL default(1),
Test_Name char(16) default('0'),
primary key (Grp_ID,Sys_ID),
foreign key(Grp_ID) references tab1(Grp_ID),
foreign key(Sys_ID) references tab1(Sys_ID)
)
pengdali 2003-11-10
  • 打赏
  • 举报
回复
CREATE TABLE tab1
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Func_id INT NOT NULL default(0),
primary key (Grp_ID,Sys_ID,Func_id)
)


CREATE TABLE tab2
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Test_Type INT NOT NULL default(1),
Test_Name char(16) default('0'),
primary key (Grp_ID,Sys_ID)
)
pengdali 2003-11-10
  • 打赏
  • 举报
回复
CREATE TABLE tab1
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Func_id INT NOT NULL default(0),
primary key (Grp_ID,Sys_ID,Func_id)
)


CREATE TABLE tab1
(
Grp_ID INT NOT NULL default(0),
Sys_ID INT NOT NULL default(0),
Test_Type INT NOT NULL default(1),
Test_Name char(16) default('0'),
primary key (Grp_ID,Sys_ID)
)

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧