首页 > 代码库 > SQL(3)--约束、存储过程

SQL(3)--约束、存储过程

一、数据类型:
整数:int,bigint,smallint
小数:float,real,decimal(长度,精度),numeric(长度,精度)
字符:char(n),varchar(n) 8000英文字符,4000汉字
text——大文本。
逻辑:bit 0,1/true/false
二进制类型:binary 8000,image
日期:datetime(1753-1-1~9999,12,31),smalldatetime(1900.1.1--2079.6.6)

数据类型的作用:建表,SQL编程

二、约束——保证数据的完整性。
(一)主键约束——实体
1.不重。2.不空。3.排序。4.唯一(不能出现两个主键)5.组合主键。
建主键:
1.可视化建主键。
表的设计视图中
2.代码建主键。 primary key

(二)外键约束——引用
两个表,主表和从表。主表——用主键来约束对方的。从表——被约束的表,被约束的列称为外键列。
外键总是建在从表上。
从表外键上填写的内容必须是主表主键里面的已经有的内容。
建外键:
1.可视化:表的设计视图中--关系——外建窗口;使用数据库关系图。
2.代码:references 主表名(主键列)
(三)非空约束 ——不能为空
1.可视化:表的设计界面,每一列后都有一个“允许为null”的复选框。
2.代码:not null

(四)自增长
它有“种子”(起始值)和"步长"(每次增长的数量)。
注意:
1.每个自增长的值,一旦被用过了,就废了,不会再重复使用。
2.任何向自增长列添加值的行为都不正确。
3.对列有类型要求:int decimal

1.可视化:在列的属性中,标识规范——是。
2.代码:identity

(五)Check约束
主要是对列里面的值做进一步的规范化。
1.可视化:在列上右击——check约束——在弹出的对话框中添加check约束。
2.代码:check(表达式)

(六)默认值
1.可视化:在列的属性——默认值或绑定
2.代码:default 值

(七)唯一约束
可以空,但不能重。
1.可视化:在列上右击选择——索引/键——在这个界面中既可以建索引又可以建唯一约束。
2.代码:unique

三、索引
提高查询的效率。一个表可以对不同的列建立多个索引。
簇索引(排序,主键),非簇索引(普通索引)。
索引的劣势:对增、删、改的效率会降低。
1.可视化:跟唯一约束的建法相似。
2.代码:create index 索引名 on 表名(列名)

四、视图
把查询给包装起来,使用起来就像用一个表一样。
视图本身不存储数据。
视图可以从一个表、多个表、多个表和视图上建立起来。
视图的优势:查看方便。劣势:增、删、改不方便。
1.可视化:对象资源管理器中,数据库--视图右击--新建视图。
2.代码:create view 视图名

五、存储

--定义变量
--declare 变量名 变量类型
declare @a varchar(50)

--变量赋值
--set 变量名=值
set @a=‘hello world‘

--打印显示
print @a

--分支
--if 条件
--begin
--end
--else
--begin
--end
if len(@a) > 10
begin
print(‘字符串很长‘)
end
else
begin
print(‘字符串不长‘);
end

2

create proc UP_FRUIT_BUY
@uid varchar(50),
@pwd varchar(50),
@fruitid varchar(50),
@count int
as
begin
declare @c int
select @c=count(*)from Login where UserName=@uid and Password=@pwd
if @c=0
begin
print ‘用户名与密码不正确‘
end
else
begin
declare @num int
select @num=numbers from Fruit where Ids=@fruitid
if @num <@count
begin
print ‘库存不足‘
end
else
begin
declare @money decimal(18,2)--账户余额
declare @cost decimal (18,2)--花的钱
select @money=account from Login where UserName=@uid
declare @price decimal(18,2)--单价
select *from Fruit where Ids=@fruitid
set @cost=@price*@count
if @cost<@money
begin
print ‘账户余额不足‘
end
else
begin
--扣钱
update Login set Account=Account-@cost where UserName=@uid
--扣库存
update Fruit set Numbers=Numbers-@count where Ids=@fruitid
--向orderdetails添加
insert into OrderDetails values (@uid+CAST(GETDATE()as varchar(50)),@fruitid,@count)
end


end
end
end

SQL(3)--约束、存储过程