--建立HardwareType表:储存商品分类
--设定'分类'字段为主键
create table HardwareType
(
分类 nvarchar(10) NOT NULL,
constraint pk_HardwareType Primary Key (分类)
)
go --建立HardwareBrand表:储存不同商品分类下的商品品牌
create table HardwareBrand
(
分类 nvarchar(10) NOT NULL,
品牌 nvarchar(20) NOT NULL
)
go
--创建Foreign Key约束:分类只能从HardwareBrand表中选择
alter table HardwareBrand
add constraint fk_HardwareBrand
Foreign Key (分类)
references HardwareType
go
--创建UNIQUE约束:同一分类中不允许出现两个一样的品牌
alter table HardwareBrand
add constraint U_HardwareBrand unique (分类,品牌)
go
--设定(分类,品牌)联合字段为主键
alter table HardwareBrand
add constraint pk_HardwareBrand Primary Key (分类,品牌)
go
insert into HardwareType select 'CPU'
insert into HardwareType select '内存'
--向HardwareBrand表添加数据
insert into HardwareBrand
values ('CPU', 'AMD')
go
insert into HardwareBrand
values ('CPU', 'Intel')
go
insert into HardwareBrand
values ('内存', '金士顿')
go
insert into HardwareBrand
values ('内存', '宇瞻')
go
insert into HardwareBrand
values ('内存', '勤茂')
select * from HardwareBrand/*
分类 品牌
---------- --------------------
CPU AMD
CPU Intel
内存 金士顿
内存 勤茂
内存 宇瞻
*/
--设定'分类'字段为主键
create table HardwareType
(
分类 nvarchar(10) NOT NULL,
constraint pk_HardwareType Primary Key (分类)
)
go --建立HardwareBrand表:储存不同商品分类下的商品品牌
create table HardwareBrand
(
分类 nvarchar(10) NOT NULL,
品牌 nvarchar(20) NOT NULL
)
go
--创建Foreign Key约束:分类只能从HardwareBrand表中选择
alter table HardwareBrand
add constraint fk_HardwareBrand
Foreign Key (分类)
references HardwareType
go
--创建UNIQUE约束:同一分类中不允许出现两个一样的品牌
alter table HardwareBrand
add constraint U_HardwareBrand unique (分类,品牌)
go
--设定(分类,品牌)联合字段为主键
alter table HardwareBrand
add constraint pk_HardwareBrand Primary Key (分类,品牌)
go
insert into HardwareType select 'CPU'
insert into HardwareType select '内存'
--向HardwareBrand表添加数据
insert into HardwareBrand
values ('CPU', 'AMD')
go
insert into HardwareBrand
values ('CPU', 'Intel')
go
insert into HardwareBrand
values ('内存', '金士顿')
go
insert into HardwareBrand
values ('内存', '宇瞻')
go
insert into HardwareBrand
values ('内存', '勤茂')
select * from HardwareBrand/*
分类 品牌
---------- --------------------
CPU AMD
CPU Intel
内存 金士顿
内存 勤茂
内存 宇瞻
*/
insert into HardwareType select '内存'
否则插入失败
如果在 HardwareBrand 表中插入的[分类]列值在HardwareType表中不存在,将插不进数据.insert into HardwareBrand
values ('内存', '勤茂')
中'内存'如果hardaretype表中未有内存的记录,就插不进数据.
所以要插入LZ所列数据
必须先插入hardaretype表
insert into hardaretype values('CPU')
insert into hardaretype values('内存')
插入以上数据后,就可顺利插入LZ的hardwarebrand表的数据删除数据相同道理
hardwarebrand表中的'内存'记录如果不删除,
hardwaretype表中的'内存'记录就删除不了.
insert into HardwareBrand
select 分类='内存 笔记本',品牌 from HardwareBrand where 分类='内存'go
insert into HardwareBrand
select 分类='硬盘 笔记本',品牌 from HardwareBrand where 分类='硬盘'
补充下这两句是啥意思???
能不能帮我说下还有 我这样建表,那以后如果还要添加其它数据的话是不是还得要在表HardwareType中的'分类'里添加相同的数据才可以在表HardwareBrand中添加数据.,有没有在表HardwareBrand中添加数据后就可以自动在表HardwareType中自动生成'分类'里面的数据啊????谢谢你们了```
insert into HardwareBrand
select 分类='内存 笔记本',品牌 from HardwareBrand where 分类='内存' go
insert into HardwareBrand
select 分类='硬盘 笔记本',品牌 from HardwareBrand where 分类='硬盘' ---你的这个插入是不会成功的,因为你的HardwareType 表中要行存在 '内存 笔记本' '硬盘 笔记本'这两条记录才行
还有 我这样建表,那以后如果还要添加其它数据的话是不是还得要在表HardwareType中的'分类'里添加相同的数据才可以在表HardwareBrand中添加数据.,有没有在表HardwareBrand中添加数据后就可以自动在表HardwareType中自动生成'分类'里面的数据啊????
----------------是的,一定要
是不是也得在表HardwareType中插入相同的数据???
那能不能有更好的办法做这样的连接呢
是不是也得在表HardwareType中插入相同的数据???
那能不能有更好的办法做这样的连接呢
-------------
在表HardwareBrand 上加INSTEAD OF触发器
--设定'分类'字段为主键
create table HardwareType
(
分类 nvarchar(10) NOT NULL,
constraint pk_HardwareType Primary Key (分类)
)
go --建立HardwareBrand表:储存不同商品分类下的商品品牌
create table HardwareBrand
(
分类 nvarchar(10) NOT NULL,
品牌 nvarchar(20) NOT NULL
)
go
--创建Foreign Key约束:分类只能从HardwareBrand表中选择
alter table HardwareBrand
add constraint fk_HardwareBrand
Foreign Key (分类)
references HardwareType
go
--创建UNIQUE约束:同一分类中不允许出现两个一样的品牌
alter table HardwareBrand
add constraint U_HardwareBrand unique (分类,品牌)
go
--设定(分类,品牌)联合字段为主键
alter table HardwareBrand
add constraint pk_HardwareBrand Primary Key (分类,品牌)
go create trigger trig_insrt
on HardwareBrand
instead of insert
as
begin
insert HardwareType select distinct 分类 from inserted I where not exists(select 1 from HardwareType where 分类 = I.分类)
insert HardwareBrand select * from inserted
endgo---insert into HardwareType select 'CPU'
--insert into HardwareType select '内存'
--向HardwareBrand表添加数据
insert into HardwareBrand
values ('CPU', 'AMD')
go
insert into HardwareBrand
values ('CPU', 'Intel')
go
insert into HardwareBrand
values ('内存', '金士顿')
go
insert into HardwareBrand
values ('内存', '宇瞻')
go
insert into HardwareBrand
values ('内存', '勤茂')
select * from HardwareBrand
select * from HardwareType
drop table HardwareBrand,HardwareType/*
分类 品牌
---------- --------------------
CPU AMD
CPU Intel
内存 金士顿
内存 勤茂
内存 宇瞻(所影响的行数为 5 行)分类
----------
CPU
内存(所影响的行数为 2 行)
*/
on HardwareBrand
instead of insert
as
begin
insert HardwareType select distinct 分类 from inserted I where not exists(select 1 from HardwareType where 分类 = I.分类)
insert HardwareBrand select * from inserted
end
为什么我输入这个 回提示 对象名 'inserted' 无效 ?