SQL的一些基本知识
Len():得到当前指定字符串的个数,与中英文无关
DataLength():得到当前字符串占据的字节数,与字符类型有关
char:char类型空间一旦分配,就不会做自动收缩,就算没有存储满也需要占据指定分配的空间,如果存储过多,就会报错--二进制数据截断的错误,不能越界
VarChar它会根据存储的内容的长度自动收缩,如果存储的内容小于指定的空间范围,那么多余的空间会收回。所以当存储的内容的长度波动较大的时候就考虑使用VarChar
n--代表是unicode字符,任何字符都占据两个字节空间 。当以后有中文字符的时候,就使用它。
--sql语法的特点--
--1.没有"",所有的字符串都使用''包含
--2.它的逻辑相等与赋值运算符一样都是= 如 if 1=1
--3.不区别大小写,但是习惯函数上使用大写。所有与数据库相关的其实都不区分
--4.类型上没有c#严格。任何类型都可以做为字符串进行赋值
--5.没有bool值的概念,在视图中进行插入数据操作的时候必须输入true/false,但是在逻辑运算符的时候却不能写bool值
--6.它是解释语言,你选择了那一句执行那么就只执行你所选择的这一句
--1.它也算术运算符 + - * / %
--2.它也有关系运算符: > >= < <= = != <>
--3.它也有逻辑运算符: not ! and && or ||
--约束-保证数据完整性--
数据完整性:为了保证数据是安全和准确的
1.实体完整性:实体就是指一条记录,实体完整性就是为了保证这一条记录是有效的和不重复的。
1.主键:非空 唯一,一个表只能有一个主键
2.标识列:是由系统自动生成的,永远不会重复
3.唯一键:唯一的,可以为null,但是只能null一次,一个表的唯一键可以有多个
2.域完整性:域就是指某一个字段列,也就意味着这个完整性是为了保证这一列的值是合理有效的
check约束 类型 非空 默认值 标识列
3.自定义完整性:按用户自己的需要创建check约束
check约束 存储过程 触发器
4.引用完整性:某一个表的字段值不是独立存在的,它引用自另外一个已经存在的表的字段值。它的取值范围不能超出主表对应字段的值的范围.被引用的表就是主表,引用的表就是从表,也称为外键表
1.选择外键表去创建主外键关系
2.建立主外键关系的字段的类型需要一致
3.建立主外键关系的字段的意义必须要一样。
4.在添加主外键表数据的时候,先添加主表,再添加外键表
5.在删除主外键关系表数据的时候,先删除从表,再删除主表的值。
6.建议主外键关系的字段在主表中必须是 主键或者 唯一键
级联操作:
1.不执行任何操作:如果有引用就不能删除,如果没有引用 就可以删除
2.删除主表,从表对应的记录也删除--太恶心
3.删除主表 的值,从表对应记录的建立了关系的字段值设置为NULL,前提是这个字段值可以为null
4.设置为默认值,从表对应记录的建立了关系的字段值设置为默认值,前提是这个字段值你已经添加了默认值
--SQL聚合函数--
count():求满足条件的记录数,与值无关
max():求最大值
min():求最小值
sum():求和 只能对数值进行计算不能运用于日期和字符串
avg():求平均值
--1.求整个表的记录
去除约束
alter table 表名 check constraint all
代码创建约束:
语法:
alter table 表名
add constraint 约束名称(PRIMARY KEY--PK unique--UQ check--CK default --DF foreign key--FK) 约束类型 约束说明(字段,关系表达式,值)
---为Teacher表添加主键值 if exists(select * from sysobjects where name='PK_id') alter table teacher drop constraint PK_id alter table teacher add constraint PK_id primary key(id) --为name添加唯一键 alter table teacher add constraint UQ_name unique(name) --为age添加check约束 0~100 alter table teacher add constraint CK_Age check(age>0 and age<=100) --为birthday添加默认值 alter table teacher add constraint DF_Birthday default('1999-9-9') for birthday --为subjectId添加外键约束 alter table teacher with nocheck --不检查现有数据 add constraint FK_teacher_subjectId foreign key(subjectid) references subject(id) on delete no action