-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSQL语句.sql
433 lines (354 loc) · 9.98 KB
/
SQL语句.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
/*
Navicat SQL Server Data Transfer
Source Server : SQL Server
Source Server Version : 140000
Source Host : localhost:1433
Source Database : YYGLXT
Source Schema : dbo
Target Server Type : SQL Server
Target Server Version : 140000
File Encoding : 65001
*/
CREATE DATABASE drugsystem
ON PRIMARY
(NAME = 'tsg_data',
FILENAME =
'C:\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\tsg_data.mdf',
SIZE = 5MB,
MAXSIZE = 500MB,
FILEGROWTH = 10%)
LOG ON
(NAME = 'tsg_log',
FILENAME =
'C:\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\tsg_log.ldf',
SIZE = 3MB,
MAXSIZE = UNLIMITED,
FILEGROWTH = 1MB)
-- ----------------------------
-- Table structure for 仓库
-- ----------------------------
GO
CREATE TABLE 仓库 (
药品编号 varchar(8) NOT NULL ,
药品数量 int NOT NULL DEFAULT (0)
)
GO
-- ----------------------------
-- Table structure for 订单
-- ----------------------------
GO
CREATE TABLE 订单 (
订单号 varchar(8) NOT NULL ,
下单日期 date NOT NULL ,
药品编号 varchar(8) NOT NULL ,
数量 int NOT NULL ,
总额 float(53) NOT NULL ,
订单状态 varchar(1) NOT NULL DEFAULT ('0') CHECK(订单状态 in ('0','1')),
客户编号 varchar(8) NOT NULL
)
GO
-- ----------------------------
-- Table structure for 供应商
-- ----------------------------
GO
CREATE TABLE 供应商 (
供应商编号 varchar(8) NOT NULL ,
供应商名称 varchar(90) NOT NULL ,
供应商联系方式 varchar(90) NOT NULL ,
供应商地址 varchar(90) NOT NULL
)
GO
-- ----------------------------
-- Table structure for 客户
-- ----------------------------
GO
CREATE TABLE 客户 (
客户编号 varchar(8) NOT NULL ,
客户姓名 varchar(30) NOT NULL ,
客户联系方式 varchar(30) NOT NULL ,
客户登录密码 varchar(30) NOT NULL ,
客户地址 varchar(90) NOT NULL
)
GO
-- ----------------------------
-- Table structure for 入库
-- ----------------------------
GO
CREATE TABLE 入库 (
入库单号 varchar(8) NOT NULL ,
药品编号 varchar(8) NOT NULL ,
入库数量 int NOT NULL ,
入库日期 date NOT NULL
)
GO
-- ----------------------------
-- Table structure for 药品
-- ----------------------------
GO
CREATE TABLE 药品 (
药品编号 varchar(8) NOT NULL ,
药品名称 varchar(90) NOT NULL ,
药品功效 varchar(90) NULL ,
药品单价 float(53) NOT NULL ,
有效期 varchar(30) NOT NULL ,
药品类型 varchar(30) NOT NULL ,
供应商编号 varchar(8) NOT NULL
)
GO
-- ----------------------------
-- Table structure for 员工
-- ----------------------------
GO
CREATE TABLE 员工 (
员工照片 image default NULL,
员工工号 varchar(8) NOT NULL ,
员工姓名 varchar(30) NOT NULL ,
员工联系方式 varchar(30) NOT NULL ,
员工登录密码 varchar(30) NOT NULL ,
员工职务 varchar(30) NOT NULL ,
是否管理员 varchar(1) NOT NULL DEFAULT ('0') CHECK(是否管理员 in ('0','1'))
)
GO
-- ----------------------------
-- View structure for 仓库查询
-- ----------------------------
GO
CREATE VIEW 仓库查询 AS
SELECT
仓库.药品编号,
药品.药品名称,
仓库.药品数量
FROM 仓库
INNER JOIN 药品 ON 仓库.药品编号 = 药品.药品编号
GO
-- ----------------------------
-- View,procedure structure for 当月统计
-- ----------------------------
GO
CREATE VIEW 当月统计 AS
SELECT
订单.下单日期,
药品.药品名称,
订单.数量,
订单.总额
FROM 订单
INNER JOIN 药品 ON 订单.药品编号 = 药品.药品编号
WHERE
订单.订单状态 = 1
and MONTH(下单日期)=MONTH(GETDATE());
GO
GO
CREATE PROCEDURE 月统计
@订单数量 int, @销售额 float(53)
AS
BEGIN
SET @订单数量=(SELECT COUNT(*) FROM 当月统计)
SET @销售额=(SELECT COUNT(总额) FROM 当月统计)
END
GO
-- ----------------------------
-- View structure for 管理员登录
-- ----------------------------
GO
CREATE VIEW 管理员登录 AS
SELECT
员工.员工工号 AS 管理员工号,
员工.员工姓名 AS 管理员姓名,
员工.员工登录密码 AS 管理员登录密码
FROM 员工
WHERE
员工.是否管理员 = 1
GO
-- ----------------------------
-- View structure for 客户登录
-- ----------------------------
GO
CREATE VIEW 客户登录 AS
SELECT
客户.客户编号,
客户.客户姓名,
客户.客户登录密码
FROM 客户
GO
-- ----------------------------
-- View structure for 客户看订单
-- ----------------------------
GO
CREATE VIEW 客户看订单 AS
SELECT
订单.订单号,
订单.下单日期,
订单.药品编号,
药品.药品名称,
客户.客户姓名,
客户.客户地址,
订单.客户编号,
订单.数量,
订单.总额,
订单.订单状态
FROM 订单
INNER JOIN 药品 ON 订单.药品编号 = 药品.药品编号
INNER JOIN 客户 ON 订单.客户编号 = 客户.客户编号
GO
-- ----------------------------
-- View structure for 员工登录
-- ----------------------------
GO
CREATE VIEW 员工登录 AS
SELECT
员工.员工工号,
员工.员工姓名,
员工.员工登录密码
FROM 员工
GO
-- ----------------------------
-- View structure for 在售药品
-- ----------------------------
GO
CREATE VIEW 在售药品 AS
SELECT
药品.药品编号,
药品.药品名称,
药品.药品功效,
药品.药品单价,
药品.有效期,
药品.药品类型,
仓库.药品数量 AS 药品余量
FROM
药品
INNER JOIN 仓库 ON 仓库.药品编号 = 药品.药品编号
WHERE
仓库.药品数量 > 0
GO
-- ----------------------------
-- Primary Key structure for table 仓库
-- ----------------------------
ALTER TABLE 仓库 ADD PRIMARY KEY (药品编号)
GO
-- ----------------------------
-- Primary Key structure for table 订单
-- ----------------------------
ALTER TABLE 订单 ADD PRIMARY KEY (订单号)
GO
-- ----------------------------
-- Primary Key structure for table 供应商
-- ----------------------------
ALTER TABLE 供应商 ADD PRIMARY KEY (供应商编号)
GO
-- ----------------------------
-- Primary Key structure for table 客户
-- ----------------------------
ALTER TABLE 客户 ADD PRIMARY KEY (客户编号)
GO
-- ----------------------------
-- Indexes structure for table 入库
-- ----------------------------
-- ----------------------------
-- Primary Key structure for table 入库
-- ----------------------------
ALTER TABLE 入库 ADD PRIMARY KEY (入库单号)
GO
-- ----------------------------
-- Triggers structure for table 入库
-- ----------------------------
GO
CREATE TRIGGER 入库触发器
ON 入库
AFTER INSERT
AS
declare @数量 int,@药品 varchar(8)
--在inserted表中查询已经插入记录信息
select @数量 = 入库数量,@药品 = 药品编号 from inserted;
update 仓库 set 药品数量 = 药品数量 + @数量 where 药品编号=@药品;
GO
GO
CREATE TRIGGER 退货触发器
ON 入库
AFTER DELETE
AS
declare @数量 int,@药品 varchar(8)
--在inserted表中查询已经插入记录信息
select @数量 = 入库数量,@药品 = 药品编号 from deleted;
update 仓库 set 药品数量 = 药品数量 - @数量 where 药品编号=@药品;
GO
-- ----------------------------
-- Primary Key structure for table 药品
-- ----------------------------
ALTER TABLE 药品 ADD PRIMARY KEY (药品编号)
GO
-- ----------------------------
-- Triggers structure for table 药品
-- ----------------------------
GO
CREATE TRIGGER 仓库更新
ON 药品
AFTER INSERT
AS
declare @药品 varchar(8)
--在inserted表中查询已经插入记录信息
select @药品 = 药品编号 from inserted;
insert into 仓库(药品编号) values(@药品);
GO
-- ----------------------------
-- Primary Key structure for table 员工
-- ----------------------------
ALTER TABLE 员工 ADD PRIMARY KEY (员工工号)
GO
-- ----------------------------
-- Foreign Key structure for table 仓库
-- ----------------------------
ALTER TABLE 仓库 ADD FOREIGN KEY (药品编号) REFERENCES 药品 (药品编号) ON DELETE CASCADE ON UPDATE CASCADE
GO
-- ----------------------------
-- Foreign Key structure for table 订单
-- ----------------------------
ALTER TABLE 订单 ADD FOREIGN KEY (客户编号) REFERENCES 客户 (客户编号) ON DELETE CASCADE ON UPDATE CASCADE
GO
ALTER TABLE 订单 ADD FOREIGN KEY (药品编号) REFERENCES 药品 (药品编号) ON DELETE CASCADE ON UPDATE CASCADE
GO
-- ----------------------------
-- Foreign Key structure for table 入库
-- ----------------------------
ALTER TABLE 入库 ADD FOREIGN KEY (药品编号) REFERENCES 药品 (药品编号) ON DELETE CASCADE ON UPDATE CASCADE
GO
-- ----------------------------
-- Foreign Key structure for table 药品
-- ----------------------------
ALTER TABLE 药品 ADD FOREIGN KEY (供应商编号) REFERENCES 供应商 (供应商编号) ON DELETE CASCADE ON UPDATE CASCADE
GO
CREATE INDEX A ON 仓库(药品编号 ASC)
CREATE INDEX B ON 药品(药品编号 ASC)
CREATE INDEX C ON 订单(下单日期 DESC)
CREATE INDEX D ON 供应商(供应商编号 ASC)
CREATE INDEX E ON 客户(客户编号 ASC)
CREATE INDEX F ON 入库(入库单号 ASC)
CREATE INDEX G ON 员工(员工工号 ASC)
use drugsystem
GO
EXEC sp_addlogin 'system','yww_39485184'
GO
EXEC sp_grantdbaccess 'system','客户'
GO
EXEC sp_grantdbaccess 'system','员工'
GO
EXEC sp_grantdbaccess 'system','管理员'
GO
EXEC sp_addrolemember 'db_owner', '管理员'
GO
GRANT SELECT,INSERT,UPDATE ON 仓库 TO 员工
GO
GRANT SELECT,INSERT,UPDATE ON 药品 TO 员工
GO
GRANT SELECT,INSERT,UPDATE ON 订单 TO 员工
GO
GRANT SELECT,INSERT,UPDATE ON 供应商 TO 员工
GO
GRANT SELECT,INSERT,UPDATE ON 客户 TO 员工
GO
GRANT SELECT,INSERT,UPDATE ON 入库 TO 员工
GO
GRANT SELECT ON 客户看订单 TO 客户
GO
GRANT SELECT ON 在售药品 TO 客户
GO
GRANT INSERT ON 订单 TO 客户