常用SQL语句收藏 <四>
来源:互联网 发布:mac怎么锁定输入法 编辑:程序博客网 时间:2024/06/05 15:15
约束
约束是在修改一个表,或增加一个表记录时,规定表的各个字段之间必须满足的关系.ALTER TABLE studentADD CONSTRAINT age_negative CHECK (student.age >= 0 );约束是表结构的一部分内容,此例的约束是检查年龄字段不要为负值.Update student set age=-1;//将会报错.删除一个约束:alter table student drop constraint age_negative;
主键
主键:表通常具有包含唯一标识表中每一行的值的一列或一组列。这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。在创建或修改表时,您可以通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,并且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束可保证数据的唯一性,因此经常对标识列定义这种约束。create table dbo.test6(col1 nvarchar(25) NOT NULL DEFAULT 'abc', col2 int DEFAULT 23 primary key);首先将原来的主键删除,再建联合主键alter table test6 ADD CONSTRAINT constraint_1 PRIMARY KEY (col1,col2);在两个字段上建联合主键.
外键
外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。ALTER TABLE student ADD CONSTRAINT FK_class FOREIGN KEY (class) REFERENCES class (class) ; 删除外键:alter table student drop CONSTRAINT FK_CLASS建立外键时,要注意几点:外键在外表中要是主键或索引. 两个表的此字段名称最好一样.其他注意事项,项目参考相关数据库的联机帮助文档.例如:外键在外表中重新生成,或重新组织后,或外键的索引被删除后,引起的后果.需要仔细调试.
游标
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[get_avage_age] -- Add the parameters for the stored procedure here@class_name nchar(10),@CheckDate [datetime]ASBEGIN-- SET NOCOUNT ON added to prevent extra result sets from-- interfering with SELECT statements.SET NOCOUNT ON;select avg(age) from student where class=@class_name and time<@CheckDate -- Insert statements for procedure here
DECLARE @cur_age as int DECLARE @avg_age as numeric(8) DECLARE @count as intDECLARE curObject CURSOR FOR select age from student where class=@class_name and born<@CheckDate order by ageset @avg_age=0set @count=0OPEN curObjectFETCH NEXT FROM curObject INTO @cur_ageWHILE(@@FETCH_STATUS=0)BEGIN set @avg_age=@avg_age+@cur_age set @count=@count+1 FETCH NEXT FROM curObject INTO @cur_ageENDset @avg_age=@avg_age/@countSELECT'AVAGE AGE' = @avg_age,'Student Sum' = @countclose curObjectdeallocate curObjectEND在此存储过程中, 使用游标来读取结果集中每个记录的字段值,再求平均值,看看与avg函数的功能是否一样的
使用游标逐条更新记录
DECLARE @cur_age as int DECLARE @avg_age as numeric(8) DECLARE @count as intDECLARE curObject CURSOR FOR select age from student where class=@class_name and born<@CheckDate order by age FOR UPDATE OF age,englishset @avg_age=0set @count=0OPEN curObjectFETCH NEXT FROM curObject INTO @cur_ageWHILE(@@FETCH_STATUS=0)BEGIN set @avg_age=@avg_age+@cur_age set @count=@count+1 update student set english=@count where current of curObject FETCH NEXT FROM curObject INTO @cur_ageENDset @avg_age=@avg_age/@countSELECT'AVAGE AGE' = @avg_age,'Student Sum' = @countclose curObjectdeallocate curObject根据游标更新表,还有很多选项, 涉及到的细节请具体参考相关数据库的联机帮助!
0 0
- 常用SQL语句收藏 <四>
- sql 常用语句积累收藏
- 常用经典SQL语句(收藏)
- 常用SQL语句收藏 <一>
- 常用SQL语句收藏 <二>
- 常用SQL语句收藏 <三>
- 常用SQL语句收藏 <五>
- SQL 常用语句收藏 备用 memo
- 常用经典SQL语句(收藏) 实用SQL语句
- sql:常用sql语句四(索引)
- SQL语句收藏
- SQL语句收藏
- 经典SQL语句收藏
- SQL语句收藏
- SQL语句收藏
- sql语句收藏
- 精彩SQL语句收藏
- 经典SQL语句收藏
- linux C 实现重定向
- shell if语句
- 最小堆的C++实现
- 公文及其种类的演变过程
- 解决UIImageView的tintColor无效的问题
- 常用SQL语句收藏 <四>
- Python+OpenCV学习(1)---图像的读取与保存
- Fraction to Recurring Decimal C#
- rz: command not found
- 加密概念和PKI基础知识简述
- js对象
- 最小堆&&最大堆的实现(c++)
- Mysql初始化root密码和允许远程访问
- vs