SQL Server 学习笔记

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 teacher

drop 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)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值