1.在sql中没有“”,所以的字符值都使用' '包含
print '1'
select 1
2.任何类型的值都可以使用‘’包含
print 0+'1'+'2' --+首先是一个算术运算符,只有+两边都是字符串+才是是一个连接符,如果有一边是数值类型,那么系统会:将另外一个值做隐式的类型转换,如果可以转换就进行转换,如果不可以转换就报错
3.不区别大小写--对关键字,对于值也不区分
pRiNt 'aaa'
Select * from Admin where name='a'
4.没有==,赋值和逻辑相等都是使用=
if(1=2)
print 'aaaa'
5.Len():得到当前指定字符串的个数,与中英文无关
--字符串变量.方法()
--字符串函数(字符串变量)
--DataLength():得到当前字符串占据的字节数,与字符类型有关
select LEN('abcdefg')
select DataLength('中华人民共和国')--char:char类型空间一旦分配,就不会做自动收缩,就算没有存储满也需要占据指定分配的空间,如果存储过多,就会报错--二进制数据截断的错误,不能越界
select LEN(Char) from chartest
select DataLength(Char) from chartest--VarChar 它会根据存储的内容的长度自动收缩,如果存储的内容小于指定的空间范围,那么多余的空间会收回。所以当存储的内容的长度波动较大的时候就考虑使用VarChar
select LEN(VarChar) from chartest
select DataLength(VarChar) from chartest
--n-- 代表是unicode字符,任何字符都占据两个字节空间 。当以后有中文字符的时候,就使用它。
select LEN(NChar) from chartest
select DataLength(NChar) from chartest
--NVarChar 是一个可变unicode字符
select LEN(NVarChar) from chartest
select DataLength(NVarChar) from chartest
6. 创建数据库
create database 数据库名称on primary --在那个文件组上创建.默认是在主文件组上创建 主数据文件
(
--当它不是一句可以独立执行的sql命令的时候,同时它是一个结构中的某一句 就需要添加,
name='逻辑名称_data', --逻辑名称一般会有一个后缀,数据文件--data 日志文件--log
size=初始大小 , --数值不应该包含在' '以内
fileGrowth=增长方式 , --也不能添加' '包含
maxsize=最大容量,
filename='全路径' --最后一句不添加,扩展名:mdf
)log on --日志文件
(
name='逻辑名称_log', --逻辑名称一般会有一个后缀,数据文件--data 日志文件--log
size=初始大小 , --数值不应该包含在' '以内
fileGrowth=增长方式 , --也不能添加’‘包含
maxsize=最大容量, --日志文件一般不设置最大容量
filename='全路径' --最后一句不添加,扩展名:ldf
)
7.在创建数据库之前要先判断是否数据库已存在
use master --先切换当前数据库
if exists(select * from sysdatabases where name='TestSchool') --先判断数据库是否存在,如果存在就先删除 exists就是判断()里面的语句是否返回值,如果有值就返回true,否则就是false
drop database TestSchool --删除数据库
go --批处理语句
8.自动创建文件夹
调用存储过程xp_cmdshell,让其帮助我们创建一个文件夹 d:\mydir\database
execute xp_cmdshell 'mkdir d:\mydir\database '
9.创建数据表
create table 表名
(
字段名称 字段类型 字段特征(是否非空 标识列 默认值 主键 唯一键 check 约束 ),
字段名称 字段类型 字段特征(是否非空 标识列 默认值 主键 唯一键 check 约束 )
)例:
create table Teacher
(
Id int identity(1,1), --设置标识列 identity(标识种子,标识增量)
Name nvarchar(50) not null, --not null:标记字段不能为null值.字符类型如果没有指定长度,默认就是1
Gender bit not null,
ClassId int ,
Age int,
Salary money, --当一个字段可以为null的时候可以省略
Birthday datetime not null
)
10. 在建表之前要判断表是否已经存在
use 数据库名
if exists( select * from sysobjects
where name='表名' )
drop table 表名
go
11.数据完整性
1.实体完整性:表的每一行数据就称为一个实体.实体完整性是指 每一行记录是唯一的,不重复的
-- 标识列:系统自动生成,永远不会重复
-- 主键:唯一 非空. 一个表的主键只有一个
-- 唯一键:唯一 但是可以为null,只能空一次。一个表的唯一键可以有多个 右键--索引/键--添加--修改名称,修改类型,确定字段
2.域完整性:域就是指字段,域完整性就是为了保证字段的值是合理和准确的
-- 非空,类型,check约束,默认值,关系(主外键约束)
3.自定义完整性:用户自己定义的约束规则:
-- check约束 存储过程 触发器4.引用完整性:一个一表的某个字段的值引用自另外一个表的某一个字段。被引用的表就称为主表,引用表就是称为从表或者外键表
-- 1.选择外键表去创建主外键关系
-- 2.建立主外键关系的字段类型和意义必须一致
-- 3.建立关系的字段 主表中必须是主键或者唯一键
-- 4.添加数据的时候先添加主表数据,再添加外键表
-- 5.删除数据的时候先删除外键表数据再删除主表 数据
12.关系建立的表的级联操作:
--1.不执行任何操作: 该报错就报错,能删除就删除
--2.级联: 删除主表记录,对应的从表记录也将被删除
--3.set null: 删除主表,从表对应记录的字段值=null.前提是这个字段可以设置 为null
--4.set default: 删除主表,从表对应记录的字段值=设置的默认值.前提是这个字段 已经设置了默认值了
13.使用代码创建约束:
--种类: 主键约束(primary key PK)唯一键约束(unique UQ)
检查约束(check CK)
默认值约束(default DF)
外键约束(foreign key FK)
----创建约束的语法:
alter table 表名
add constraint 约束的名称(以简写做为前缀) 约束的类型 约束的说明(字段 表达式 值)例子:
--1.将id设置为主键:
alter table Teacher
add constraint PK_Teacher_id primary key(Id)
--2设置name为唯一键
if exists(select * from sysobjects where name='UQ_Teacher_Name')
alter table teacherdrop constraint UQ_Teacher_Name
alter table teacher
add constraint UQ_Teacher_Name unique(name)
--3.设置年龄0~100之间
alter table teacher
add constraint CK_Teacher_Age check(age>0 and age <=100)
--4.为birthday添加默认值约束
alter table teacher
add constraint DF_Teacher_Birthday default('1990-9-9') for birthday --for是说明为那一个字段添加默认值
--5.为classid添加外键约束
if exists(select * from sysobjects where name='FK_Teacher_classid')
alter table teacher drop constraint FK_Teacher_classid
alter table teacher --从表的某一个字段引用主表的某一个字段
with nocheck --不检查现有数据
add constraint FK_Teacher_classid foreign key(classId) references classes(cid)
on delete set null
on update set default
14.数据插入
--语法: 方法调用(一 一 对应 顺序对应,数量对应,类型对应)
insert [into] 表名(字段列表) values(值列表)
--说明:标识列值不管什么时候都不可能插入值,同时插入的值需要满足表的所有完整性约束
--1.为表的所有字段添加值--如果不指定字段列表,那么就默认需要为所有字段添加值
insert into Teacher values('张感动1',1,1,20,5000,'1990-8-15')
insert into Teacher values('张感动2',1,1,20,5000,'1990-8-15')
insert into Teacher values('张感动3',1,1,20,5000,'1990-8-15')
--2.值不能违反表的约束
insert into Teacher values('张三',1,5,200,5000,'1990-8-15')
--3.1.也可以指定为那一些列插入值 -列名或所提供值的数目与表定义不匹配。
insert into Teacher(Name,Gender,ClassId,Birthday) values('张四',1,6,'1990-8-15')
--3.2 INSERT 语句中列的数目大于 VALUES 子句中指定的值的数目。VALUES 子句中值的数目必须与 INSERT 语句中指定的列的数目匹配
insert into Teacher(Name,Gender,ClassId,Birthday) values('张四',1,6)
--4.非空字段一定需要插入值,除非它有默认值
insert into Teacher(Name,ClassId) values('张五',6)
--如果一个字段可以为null或者有默认值,那么在插入的时候也可以:可以为空字段赋值null,默认值字段赋值default
insert into Teacher values('张6',1,6,null,null,'1990-8-15')
insert into Teacher values('张7',1,6,null,null,default)
--所有值都可以使用’‘包含,如果字段的类型是数值,那么系统会自动的类型转换
insert into Teacher values(N'张8','1','6','30','3000','1990-8-15')
--如果字符类型的字段值没有使用’‘,如果是非数值字符==报错,如果纯数字字符串--OK
insert into Teacher values(8,'1','6','30','3000','1990-8-15')
--如果是日期值没有使用’‘包含,那么就会得系统默认日期
insert into Teacher values('张9','1','6','30','3000',1990-8-15)