您的位置:新葡亰496net > 网络数据库 > SQLserver高端编制程序,Oralce常用命令

SQLserver高端编制程序,Oralce常用命令

发布时间:2019-09-08 03:38编辑:网络数据库浏览(94)

    1、数据库设计

    if exists(select name from sysobjects where name = 'stuInfo')
    drop table stuInfo
    go
    create table stuInfo
    (
    stuName varchar(20) not null, --学员名称
    stuNo char(6) not null, --学号
    stuSex char(2) not null, --性别
    stuAge int not null, --年龄
    stuID numeric(18,0) not null, --身份证号,numeric(18,0)表示20人数字,小数位数为0
    stuSeat smallint identity(1,1), --座位号:自动编号(标记列),从1从头自增
    stuAddr text --住址
    )
    go

     

    第16课-数据库开采及ado.net

     

    数据库设计的严重性:

    缩减冗余,升高质量、易维护

    alter table stuInfo add constraint PK_stuID primary key(stuID);
    alter table stuInfo add constraint UQ_stuSeat unique(stuSeat);
    alter table stuInfo add constraint CK_stuSex check(stuSex

    数据库SQl,成立数据库和表,增加和删除改语句,约束,top和Distinct,聚合函数介绍

    顾客管理

    数据库设计的步子:

    1、搜聚音信、标志对象、标记属性、标记关系(一对一、一对多、多对一、多对多)

    in('男','女'));

    if exists(select name from sysobjects where name='stuMarks')
    drop table stuMarks
    go
    create table stuMarks
    (
    examNo char(7) not null, --考号
    stuNo char(6) not null, --学号
    writtenExam int not null, --笔试战表
    labExam int not null --机试战表
    )
    go

    alter table stuMarks add constraint PK_examNo primary key(examNo);

     

    SQL语句入门(脚本、命令)

    为scott客商解锁

    E-R图:

    品质:定义实体的性质、实体的性状

    实体:数据项(属性)的集合

    涉嫌:实体之间相互连接的艺术

    图片 1

    总结掌握一下就足以了

    图片 2

    alter table stuMarks add constraint UQ_stuNo unique(stuNo);

    select * from stuInfo;
    insert into stuInfo values('张秋丽','s25301','女',18,412724一九九零03151234,'日本东京海淀');
    insert into stuInfo values('李通古文','s25303','男',22,412724198703161234,'广西揭阳');
    insert into stuInfo values('李文才','s25302','男',31,412724一九八八03171234,'贵州罗利');
    insert into stuInfo values('欧阳俊','s25304','男',28,412724198903181234,'江苏克孜勒苏柯尔克孜');
    insert into stuInfo values('欧阳丹','s25305','女',23,412724一九八八03191234,'江苏库车');

    select * from stuMarks;
    insert into stuMarks values('s27811','s25303',80,58);
    insert into stuMarks values('s27813','s25302',50,90);
    insert into stuMarks values('s27815','s25301',65,0);
    insert into stuMarks values('s27816','s25304',77,82);
    insert into stuMarks values('s27817','s25305',70,92);


    --局地变量表明/赋值/查询
    declare @stuName varchar(20) --声明
    set @stuName = '李文才' --赋值@stuName
    select * from stuInfo where stuName=@stuName; --查询
    declare @stuSeat int
    select @stuSeat = stuSeat from stuInfo where stuName=@stuName --赋值@stuSeat
    select * from stuInfo where (stuSeat = @stuSeat 1) or (stuSeat = @stuSeat - 1) --查询

    Ø Go批管理语句

    SQL全名是结构化查询语言(Structured Query Language)

    1:解锁
      alter user scott account unlock;

    数据库规范化:

    go

    --IF···ELSE···
    --案例1:如果笔试成绩平均分胜出70上佳,否则比较糟糕
    declare @avgWrt float
    select @avgWrt=AVG(writtenExam) from stuMarks
    if(@avgWrt > 70)
    begin
    print '成绩非凡,平均成绩:' convert(varchar, @avgWrt)
    select top 3 * from stuMarks order by writtenExam desc
    end
    else
    begin
    print '战绩比较糟糕,平均战绩:' convert(varchar, @avgWrt)
    select top 3 * from stuMarks order by writtenExam asc

    用来同时奉行多少个语句

    SOL语句是和DBMS“交谈”专项使用的语言,分裂的DBMS都认SQL语法。

    2: 退换密码
       alter user scott identified by tiger;

    首先范式(1NF):

    每列都应该是原子性的,五重复的域

    end

    --案例2:假设机试战表平均分超越40爱不释手,不然非常差
    declare @avgLab float
    select @avgLab=AVG(labExam) from stuMarks
    if(@avgLab > 40)
    begin
    print '战绩不错,平均战表:' convert(varchar, @avgLab)
    select max(labExam) from stuMarks
    end
    else
    begin
    print '战表非常糟糕,平均战绩:' convert(varchar, @avgLab)
    select min(labExam) from stuMarks
    end

     

    Sql中字符串使用单引号:通过写俩个单引号来转义一个单引号。

    3: 跳转
       connect sqlplus scott/tiger

    其次范式(2NF):

    在首先范式的底子上品质完全依赖于主键

    go

    --while循环语句,能够使用 break 退出所在层的轮回,continue 退出当次循环
    select * from stuMarks where labExam<60
    --案例1:labExam低于60分的,循环加到60分,每回加2分
    declare @n int
    while(1 = 1)
    begin
    select @n=count(*) from stuMarks where labExam < 60
    if(@n > 0)
    begin
    update stuMarks set labExam = labExam 2 where labExam < 60
    end
    else
    begin
    break
    end
    end
    select * from stuMarks

    Ø 使用、切换数据库

    Sql中的注释“——” 单行注释相比较好

    4  查询测量试验OK
        select * from emp;

    其三范式(3NF):

    其三范式供给各列与主键列直接相关

    --update stuMarks set labExam=50 where labExam=60

    select * from stuMarks where writtenExam<60
    --案例2:writtenExam低于60分的,循环加到60分,每一次加2分
    declare @m int
    while(1=1)
    begin
    select @m=count(*) from stuMarks where writtenExam < 60
    if(@m > 0)
    begin
    update stuMarks set writtenExam = writtenExam 2 where writtenExam < 60
    end
    else
    break;
    end
    select * from stuMarks


    --case多分支语句
    --select col1,col2 =
    -- case
    -- when···col2 = condition1···then···
    -- when···col2 = condition2···then···
    -- else···
    -- end
    --from tabName
    select stuNo,writtenExam =
    case
    when writtenExam >= 90 then 'A'
    when writtenExam between 80 and 89 then 'B'
    when writtenExam between 70 and 79 then 'C'
    when writtenExam between 60 and 69 then 'D'
    else 'E'
    end
    from stuMarks

    use master
    go

    看清俩个数据是不是等于使用=(单等号)

    创立顾客
    create user "username" identified by "userpassword";

    T-SQL语句成立和保管数据库和表:

    select * from stuMarks

    select stuName,stuAge =
    case
    when stuAge >= 30 then 'old'
    when stuAge between 20 and 29 then 'strong'
    when stuAge between 10 and 19 then 'young'
    else 'baby'
    end
    from stuInfo
    select * from stuInfo


    if exists(select name from sysobjects where name = 'bankCounter')
    drop table bankCounter
    go
    create table bankCounter
    (
    cstName varchar(32) not null, --顾客姓名
    countNo numeric(21,0) not null, --账户
    curMoney money, --账户现金余额
    time_stamp datetime --时间戳
    )
    go
    alter table bankCounter add constraint PK_countNo primary key(countNo);
    alter table bankCounter add constraint CK_curMoney check(curMoney > 0) ;
    go
    insert into bankCounter values('张三',400006666668888889999,1000,'2012-08-09');
    insert into bankCounter values('李四',400006666668888889998,1001,'2013-08-06');
    go

     

    在sql语句中sql代码不区分轻重缓急写

    剔除客户
    drop user "username" cascade;

    T-SQL成立数据库:

    if DB_ID('数据库名') is not null
    drop database 数据库名
    go
    create database 数据库名
    on
    (
            name='数据库名',
            filename='物理数据库储存路径数据库文件'
    )
    

    select * from bankCounter

    Ø 创建、删除数据库

    SQL首要分为:

    授权
    grant connect,resource,dba to "username";

    案例:

    if DB_ID('Student')is not null
    drop databese Student
    go
    create databese Student
    on
    (
        name='Student',
        finema='E:第二学期SQLstuDBStudent.mdf'
    )
    

     

    数据文件参数 描述
    name 数据库逻辑名称
    filename 数据库物理文件名
    size 数据文件初始化大小,单位默认为M
    maxsize 数据文件可增长到最大值,单位默认阿M,不指定即无限大
    filegrowth 数据库每次增长率,可以是百分比,默认单位M,0不增长

    --事务管理:一种体制,二个操作类别,它将一组数据库操作指令作为一个整机实践,并共同向系统提交可能吊销,即

    那组命令要不全体施行,要不全部不实践,有其它多少个错误就要立时回滚/撤销全体操作。
    --begin transaction --开端作业
    --commit transaction --提交事务
    --rollback transaction --回滚(撤销)事务

    --案例:在此例中,张三转账一千给李四,但因check约束curMoney必得高于零,报错,所以update(张三)的现金值没变,
    -- 不过,李四的现金却充实了1000
    use StudentDemoDB
    go
    update bankCounter set curMoney = curMoney - 1000 where cstName='张三';
    update bankCounter set curMoney = curMoney 1000 where cstName='李四';
    go
    --还原数据
    select * from bankCounter
    update bankCounter set curMoney = curMoney - 1000 where cstName='李四';

    -------------用事务管理
    begin transaction
    use StudentDemoDB
    go
    declare @errorT int --定义局地变量记录错误次数
    set @errorT = 0 --初始化
    update bankCounter set curMoney = curMoney - 1000 where cstName='张三';
    set @errorT = @errorT @@error
    update bankCounter set curMoney = curMoney 1000 where cstName='李四';
    set @errorT = @errorT @@error

    if(@errorT > 0)
    begin
    print '错误编码 #' convert(varchar,@errorT) '!'
    rollback transaction
    end
    else
    begin
    commit transaction
    end
    go

    方法1

    DDL(数据定义语言、建表、建库等语言)(例:Create Table、Drop Table、Alter Table)

    查看当前客户的剧中人物
    select * from user_role_privs;
    select * from session_privs;

    T-SQL语句创造表:

    if object_ID('表名')is not null
    drop table 表名
    go
    create table 表名
    (
          字段1 数据类型 列的特性,
          字段2 数据类型 列的特性
    )
    

    select * from bankCounter

    begin transaction
    declare @error int
    set @error=0
    update bankCounter set curMoney = curMoney - 800 where cstName = '张三'
    set @error = @error @@ERROR
    update bankCounter set curMoney = curMoney 800 where cstName = '李四'
    set @error = @error @@ERROR

    if(@error > 0)
    begin
    rollback transaction
    end
    else
    begin
    commit transaction
    end
    go
    select * from bankCounter
    go


    --索引
    --create [unique] [clustered|nonclustered] index index_name
    --on table_name (column)
    --[with
    -- fillfactor = x
    --]
    --说明
    --unique:实践独一索引,可选
    --clustered/nonclustered:钦命聚焦索引照旧非聚集索引,可选
    --fillfactor:表示填充因子,拟定一个0-100的值,该值提醒索引页填满的空中所占的比重

    --案例1:成绩表stuMark中的writtenExam列常常被询问,为了加快查询速度,今后开创索引。因为战绩恐怕会重新,
    --因而索引只可以创建 非集中索引。
    use StudentDemoDB
    go
    if exists(select name from sysindexes where name = 'IX_stuMarks_writtenExam')
    drop index stuMarks.IX_stuMarks_writtenExam
    go
    create nonclustered index IX_stuMarks_writtenExam
    on stuMarks(writtenExam)
    with fillfactor=30
    go


    --视图
    --create view view_name
    --as
    --<select语句>
    --案例:stuInfo/stuMarks的视图
    if exists(select name from sysobjects where name='view_stuMarksInfo')
    drop view view_stuMarksInfo
    go
    create view view_stuMarksInfo
    as
    select a.stuName,a.stuNo,b.examNo,a.stuSex,a.stuAge,b.writtenExam,b.labExam
    from stuInfo a,stuMarks b where a.stuNo = b.stuNo
    go

    --判别是还是不是存在该数据库,存在就删除
    if (exists (select * from sys.databases where name = 'database_name'))
    drop database database_name
    go
    --创建数据库,设置数据库文件、日志文件保留目录
    create database database_name
    on(
    name = 'database_name',
    filename = 'c:datadatabase_name.mdf'
    )
    log on(
    name = 'database_name_log',
    filename = 'c:datadatabase_name_log.ldf'
    )
    go

    DML(数据操作语言)(例:Select、Insert、Update、Delete)

    查看当前客商的类别权限和表级权限
    select * from user_sys_privs;
    select * from user_tab_privs;

    案例:

    if object_ID('StuInfo')is not null
    drop table StuInfo
    go
    create table StuInfo
    (
          StuId int identity(1,1) primary key,
          StuName varchar(10) not null,
          StuSex varchar(2) not null,
          StuAge varchar(3) not null
    )
    

    select * from view_stuMarksInfo

    --存款和储蓄进度

    --系统存款和储蓄进度
    exec sp_databases --列出服务器上具备的的数据库
    exec sp_helpdb --列出装有数据库的音讯
    exec sp_helpdb Student德姆oDB --列出钦点数据库的新闻
    exec sp_renamedb 'A','B' --将数据A的名号改为B
    exec sp_tables --列出当下蒙受下可查询的靶子的列表

    exec sp_columns stuInfo --列出内定表的的保有列的新闻
    exec sp_help --列出当下情形下全体的对象新闻(表名/约束名/视图)
    exec sp_help stuInfo --再次回到钦点表的有所音讯(表名/字段/约束/)
    exec sp_helpconstraint stuInfo --再次回到钦定表的自律音信
    exec sp_helpindex stuInfo --重临钦命表的目录消息
    exec sp_stored_procedures --重回当前境况中的全数存款和储蓄进度
    exec sp_helptext 'view_stuMarksInfo'

     

    DCL(数据库调节语言)(例:GRANT授权、REVOKE撤废授权)

    询问用户表
    select username from dba_users;

    T-SQL创设约束:

    主键约束:(primary key constraint):主键列数据独一,并不为空,简称:PK

    独一约束:(unique constraint):保险该列不允许守岁重复值,简称:UQ

    检查约束:(check constraint):限制列中允许的取值以及八个列直接的涉嫌,简称:CK

    暗中认可约束:(default constraint):设置某列的暗许值,简称:DF

    外键约束:(foreign key constraint):用于在三个表之间建设构造关系,要求钦命主从表,简称:FK

    --查看视图/私下认可值/(未加密的|顾客定义的仓库储存进程)/触发器的话语文本

    --创立不带参的积攒进度
    --create proc[edure] procedure_name
    -- [
    -- { @参数1 数据类型 }[= 默认值][output], --个中参数部分可选
    -- ······, --个中参数部分可选
    -- { @参数n 数据类型 }[= 默认值][output] --个中参数部分可选
    -- ]
    -- as
    -- <select语句>

    --案例:查看此次试验平均分,以及未通过(writtenExam < 60 or labExam < 60)的侦察学员名单
    use StudentDemoDB
    go
    if exists(select name from sysobjects where name = 'proc_avg_nopass_nopara')
    --drop proc proc_avg_nopass_nopara
    drop procedure proc_avg_nopass_nopara --与地方的drop proc proc_avg_nopass等价
    go
    create procedure proc_avg_nopass_nopara
    as
    select avg(writtenExam) as '笔试平均成绩',avg(labExam) as '机试平均成绩' from stu马科斯
    select a.stuName,a.stuNo,b.examNo,a.stuSex,a.stuAge,b.writtenExam,b.labExam
    from stuInfo a,stuMarks b where a.stuNo = b.stuNo and (b.writtenExam < 60 or b.labExam < 60)
    go

    exec proc_avg_nopass_nopara
    go

    select * from stuMarks
    update stuMarks set writtenExam=55 where stuNo='s25303'

    主意2(设置文件大小)、

    实例代码:

    修改顾客口令密码
    alter user "username" identified by "password";

    T-SQL加多封锁的语法格式:

    alter table 表名

    add constraint 约束名 约束类型 具体的封锁表达

    go

    --创制带输入参数的积攒进程
    --create proc[edure] procedure_name
    -- [
    -- { @参数1 数据类型 }[= 默认值][output], --个中参数部分可选,有output表示输出参数,不然为输入参数
    -- ······, --个中参数部分可选,有output表示输出参数,不然为输入参数
    -- { @参数n 数据类型 }[= 默认值][output] --在那之中参数部分可选,有output表示输出参数,不然为输入参数
    -- ]
    -- as
    -- <select语句>

    --案例:查看此番试验平均分,以及未通过(writtenExam < 自定义参数 or labExam < 自定义参数)的考试学员名单
    use StudentDemoDB
    go
    if exists(select name from sysobjects where name = 'proc_avg_nopass_para')
    drop proc proc_avg_nopass_para
    go
    create proc proc_avg_nopass_para
    @written int,
    @lab int
    as
    select avg(writtenExam) as '笔试平均战表',avg(labExam) as '机试平均战表' from stu马科斯
    select a.stuName,a.stuNo,b.examNo,a.stuSex,a.stuAge,b.writtenExam,b.labExam
    from stuInfo a,stuMarks b where a.stuNo = b.stuNo and (b.writtenExam < @written or b.labExam < @lab)
    go

    exec proc_avg_nopass_para 55,65
    go


    --默许值(条件)存款和储蓄进度
    --create proc[edure] procedure_name
    -- [
    -- { @参数1 数据类型 }[= 默认值][output], --当中参数部分可选,有output表示输出参数,不然为输入参数
    -- ······, --个中参数部分可选,有output表示输出参数,否则为输入参数
    -- { @参数n 数据类型 }[= 默认值][output] --个中参数部分可选,有output表示输出参数,不然为输入参数
    -- ]
    -- as
    -- <select语句>

    --案例:查看这次考试平均分,以及未经过(writtenExam/labExam暗许<60不经过)的考试学员名单
    use StudentDemoDB
    go
    if exists(select name from sysobjects where name = 'proc_avg_nopass_default')
    drop proc proc_avg_nopass_default
    go
    create proc proc_avg_nopass_default
    @writePass int=60, --默认值
    @labPass int=60 --默认值
    as
    select avg(writtenExam) as '笔试平均战表',avg(labExam) as '机试平均战绩' from stu马科斯
    select a.stuName,a.stuNo,b.examNo,a.stuSex,a.stuAge,b.writtenExam,b.labExam
    from stuInfo a,stuMarks b where a.stuNo = b.stuNo and (b.writtenExam < @writePass or b.labExam < @labPass)
    go
    exec proc_avg_nopass_default
    go


    --创造带输出参数的存款和储蓄进度
    --create proc[edure] procedure_name
    -- [
    -- { @参数1 数据类型 }[= 默认值][output], --当中参数部分可选,有output表示输出参数,否则为输入参数
    -- ······, --当中参数部分可选,有output表示输出参数,不然为输入参数
    -- { @参数n 数据类型 }[= 默认值][output] --当中参数部分可选,有output表示输出参数,否则为输入参数
    -- ]
    -- as
    -- <select语句>

    --案例:查看这一次考试平均分,以及未通过(writtenExam/labExam默许<60不经过)的考试学员名单,还想重返比不上格人数
    use StudentDemoDB
    go
    if exists(select name from sysobjects where name = 'proc_avg_nopass_output')
    drop proc proc_avg_nopass_output
    go
    create proc proc_avg_nopass_output
    @noPassNum int output,
    @wPass int=60,
    @lPass int=60
    as
    select avg(writtenExam) as '笔试平均成绩',avg(labExam) as '机试平均成绩' from stu马科斯
    select a.stuName,a.stuNo,b.examNo,a.stuSex,a.stuAge,b.writtenExam,b.labExam
    from stuInfo a,stuMarks b where a.stuNo = b.stuNo and (b.writtenExam < @wPass or b.labExam < @lPass)
    select @noPassNum = count(c.stuName) from (select a.stuName,a.stuNo,b.examNo,a.stuSex,a.stuAge,b.writtenExam,b.labExam
    from stuInfo a,stuMarks b where a.stuNo = b.stuNo and (b.writtenExam < @wPass or b.labExam < @lPass)) c
    go

    /*调用存款和储蓄进程proc_avg_nopass_output*/
    declare @sum int --声爱他美个片段变量,用来抽出存款和储蓄进程中输出的参数值
    exec proc_avg_nopass_output @sum output --输出参数,此时@wPass,@lPass使用暗许值
    print convert(varchar,@sum)
    go
    declare @sum int
    exec proc_avg_nopass_output @sum output,66 --此时@wPass=66,d@lPass使用暗许值
    go
    declare @sum int
    exec proc_avg_nopass_output @sum output,66,100 --此时@wPass=66,@lPass=100
    go

    --判定是不是存在该数据库,存在就删除
    if (exists (select * from sys.databases where name = 'database_name'))
    drop database database_name
    go
    create database database_name
    --暗中认可就属于primary主文件组,可回顾
    on primary (
    --数据文件的现实性描述
    name = 'database_name_data',        --主数据文件的逻辑名
    fileName = 'c:database_name_data.mdf',     --主数据文件的物理名
    size = 3MB,                  --主数据文件的开始大小
    maxSize = 50MB,               --主数据文件增加的最大值
    fileGrowth = 百分之十                --主数据文件的拉长率
    )
    --日志文件的有血有肉陈诉,各参数含义同上
    log on (
    name = 'database_name_log',
    fileName = 'c:database_name_log.ldf',
    size = 1MB,
    fileGrowth = 1MB
    )
    go

    --1.创办一个数据库

    展现当前客商
    show user;

    T-SQL删除约束:

    alter table 表名

    drop constraint 约束名

     

    create database School;

    表空间管理

    案例:

    --添加主键约束(将StuNo设为主键)
    alter table StuInfo add constraint PK_StuNO primary key (StuNo)
    go
    --添加默认约束(性别默认为男)
    alter table StuInfo Add constraint DF_StuSex DEFAULT ('男')for StuSex 
    go
    --添加检查约束(年龄必须为40之间)
    alter table StuInfo Add constraint CK_StuAge check(StuAge>=18 and StuAge<=40)
    go
    --添加外键约束
    alter table Exam Add constraint FK_StuNo FORELGN KEY (StuNo)references StuInfo(StuNo)
    go
    

    格局3(设置次数据文件)

    --删除数据库

    成立表空间
    create  tablespace data01 datafile 'd:/DATA01.DBF' size 10M;

    (1)对表结构的操作

    1、在表中加多一列

    语法:alter table 表名

       add  增加的列名  数据类型

    事例:在Student表中增多列Hobbies,类型为varchar,宽度:20

                alter  table  Student  

             add  Hobbies  varchar(20)

    2、删除表中的一列

    语法:alter  table  表名

          drop  column  列名

    例子:删除Student表中的Hobbies列

          alter  table  Student

          drop  column  Hobbies

    3、修改表中列的数据类型

    语法:alter table 表名

          alter  column 列名  修改后的数据类型  not null

    例子:修改Student中的Sex列为char型,宽度为2

          alter  table  Student

          alter column Sex char(2) nou null

    if (exists (select * from sys.databases where name = 'database_name'))
    drop database database_name
    go
    create database database_name
    --暗中同意就属于primary主文件组,可归纳
    on primary (
    --数据文件的具体描述
    name = 'database_name_data', --主数据文件的逻辑名
    fileName = 'c:database_name_data.mdf', --主数据文件的物理名
    size = 3MB, --主数据文件的开首大小
    maxSize = 50MB, --主数据文件拉长的最大值
    fileGrowth = 百分之十 --主数据文件的增进率
    ),
    --次数据文件的切实可行描述
    (
    --数据文件的现实描述
    name = 'database_name2_data', --主数据文件的逻辑名
    fileName = 'c:database_name2_data.mdf', --主数据文件的物理名
    size = 2MB, --主数据文件的启幕大小
    maxSize = 50MB, --主数据文件增进的最大值
    fileGrowth = 十分之一 --主数据文件的拉长率
    )
    --日志文件的现实性陈诉,各参数含义同上
    log on (
    name = 'database_name_log',
    fileName = 'c:database_name_log.ldf',
    size = 1MB,
    fileGrowth = 1MB
    ),
    (
    name = 'database_name2_log',
    fileName = 'c:database_name2_log.ldf',
    size = 1MB,
    fileGrowth = 1MB
    )
    go

    drop database School;

    drop tablespace data01 including contents and datafiles;

    (2)增添约束

     1、加多主键约束
    语法:alter  table 表名
                  add  constraint   约束名    primary key(要安装主键的列名)
    例子:
    给Class表加多主键约束
    if OBJECT_ID('PK_ClassId') is not null
    alter  table  Class
        drop  constraint  PK_ClassId
    go
    alter  table  Class
    add  constraint  PK_ClassId  primary key(ClassId)

    2、增加独一约束
    语法:alter table 表名
                 add constraint 约束名 unique(要加多独一约束的列名)
    例子:
    给新闻表stuInfo中的全名增加独一约束
    if OBJECT_ID('UQ_StuName') is not null
    alter  table  StuInfo
     drop  constraint  UQ_StuName
     go
     alter  table  StuInfo
     add  constraint  UQ_StuName
     unique(StuName)

    3、增加默许约束
    语法:alter table 表名
                 add constraint  约束名  Default(暗中同意值)  for 要增多暗许值的列名
    例子:
    给stuInfo表中的Age列增添暗许值为18
     if OBJECT_ID('DF_Age') is not null
        alter  table  StuInfo
        drop  constraint  DF_Age
     go
     alter  table  stuInfo 
     add  constraint  DF_Age  Default(18) for Age

    4、增加检查约束
    语法:alter table 表名
               drop constraint 约束名
              check(列名>=0)
    例子:
    给笔试成绩增多三个约束,须要成绩必得在0-100里头
    if OBJECT_ID('CK_WriteExam') is not null
    alter table Exam
    drop constraint CK_WriteExam
    go
    alter table Exam
     add constraint CK_WriteExam
     check(WriteExam>=0 and WriteExam<=100)

    5、外键约束
    语法:alter table 表名1
           add constraint 约束名
           foreign key(外键约束名)
            references 表名2(外键约束名)
    例子:
    给班级表与学员音讯表创制关系(外键约束)
    if OBJECT_ID('FK_Class_StuInfo') is not null
    alter table  stuInfo
    drop constraint Fk_Class_StuInfo
    go
    alter table stuInfo
    add constraint Fk_Class_StuInfo
    foreign key(ClassId)
    references Class(ClassId)

    --删除约束
    Alter table 表名
    Drop ConStraint 约束名

    --删除表
    Drop table 表名

     

     

    --创立数据库的时候钦定一些采取

    修改表空间尺寸
    alter database datafile 'D:/DATA01.DBF' resize 5M;

    (3)高端查询语法格式

    --内连接
    语法:
    select 要询问的品质
    from 表1 inner join 表2
    on 表1.Id=表2.Id
    where 要限制的尺码(能够毫无)

    --左外连接
    语法:
    select 要询问的性质
    from 表1 left outer join 表2
    on 表1.id=表2.id

    --右外连接
    语法:
    select 要询问的质量
    from 表1 right outer join 表2
    on 表1.id=表2.id

    --全外连接
    语法:
    select 要查询的属性
    from 表1 full outer join 表2
    on 表1.id=表2.id

    --交叉连接
    语法:
    select 要查询的习性
    from 表1 Cross join 表2
    where 条件

    --自连接
    select 要查询的品质
    from 表1 , 表2
    where 表1.id=表2.id

    Ø 基本数据类型

    create database School

    追加表空间
    alter tablespace newccs add datafile 'D:/DATA02.DBF' size 40M;

    (4)高档查询实例

    if DB_ID('GoodSystem') is not null
    drop database GoodSystem
    go
    create database GoodSystem on --创制一个商品数据库
    (
    name='GoodSystem',
    filename='E:SQL第二章上机任务GoodSystem.mdf'
    )
    --展开数据库
    use GoodSystem
    --创建商品类别表GoodsType
    if OBJECT_ID('GoodType') is not null
    drop table GoodType
    go
    create table GoodType
    (
    Tid int primary key,
    Type varchar(20)
    )
    --成立商品新闻表Goods
    if OBJECT_ID('Goods') is not null
    drop table Goods
    go
    create table Goods
    (
    id int primary key,
    Tid int ,
    Name varchar(50),
    Price money,
    ProductionDate datetime,
    Amount int
    )
    --给商品连串表GoodsType增加测量检验数据
    insert GoodType select '1','家电' union
    select '2','电子' union
    select '3','食品' union
    select '4','生活用品'

    --给商品音信表Goods增多测量试验数据
    insert Goods select '1','1','冰箱','3344','2017-6-3','100' union
    select '2','1','电视','1777','2016-10-4','100' union
    select '3','1','微波炉','333','2017-2-26','100' union
    select '4','2','手机','4500','2017-5-7','100' union
    select '5','2','显示器','1777','2016-12-4','100' union
    select '6','2','主机','1500','2017-3-9','100' union
    select '7','3','老干妈','9','2017-7-6','100' union
    select '8','3','爽脆榨菜','3.6','2017-6-8','100'

    --查询商消息表中的商品名称,价钱,生产日期。
    select Name 商品名称,Price 价钱,ProductionDate 生产日期
    from Goods
    --查询商品体系、商品名称、价钱、生产日期
    select gt.Type 商品等级次序,gs.Name 商品名称 , gs.Price商品价位,gs.ProductionDate 生产日期
    from GoodType gt inner join Goods gs
    on gt.Tid=gs.Tid
    --查询生产日期为2017的货色档案的次序、商品名称、价钱、生产日期
    select gt.Type 商品品种,gs.Name 商品名称 , gs.Price价钱,gs.ProductionDate 生产日期
    from GoodType gt inner join Goods gs
    on gt.Tid=gs.Tid and year(gs.ProductionDate) like '2017%'
    --查询商品品种为“电子”的货品档案的次序、商品名称、价钱、生产日期,数据按价钱降序排列
    select gt.Type 商品品种,gs.Name 商品名称,gs.Price 价钱 ,gs.ProductionDate 生产日期
    from GoodType gt inner join GoodS gs
    on gt.Tid=gs.Tid and gt.Type='电子'
    order by Price desc

    --总计每一个商品类别的商品数量
    select gt.Type 商品类别, COUNT(gs.Amount) 商品数量
    from GoodType gt inner join Goods gs
    on gt.Tid=gs.Tid
    group by gt.Type

    --查询全部商品档期的顺序对应的享有商品音讯
    select gt.Type 商品品种,gs.Name 商品名称 , gs.Price商品价位,gs.ProductionDate 生产日期
    from GoodType gt left join Goods gs
    on gt.Tid=gs.Tid

    --查询价钱是333、1500、4500的商品音信
    select Type 商品种类,Name 商品名称,Price 商品价位,ProductionDate 生产日期
    from GoodType gt ,Goods gs
    where Price in(333,1500,4500)
    and (gs.Tid=gt.Tid)

    --查询未有对应商品音讯的物品类型消息(类型编号,类型名称)
    select Tid 编号,Type 类型 from GoodType
    where Tid not in
    (select Tid from Goods)

    --查询全部商品的平分价格
    select AVG(普赖斯) 平均价格 from Goods

    --查询价钱大于平均价格的商品音讯
    select Type 商品档案的次序,Name 商品名称,Price 商品价位,ProductionDate 生产日期
    from GoodType gt , Goods gs
    where gs.Tid=gt.Tid
    and Price>
    (select AVG(Price) 平均价格 from Goods)

    --查询各种商品品种平均价格超越总平均价格的品类名称、平均价格
    select gt.Type 类型名称,AVG(Price) 价钱
    from Goods gs,GoodType gt
    where gs.Tid=gt.Tid
    and
    gs.Tid in
    (select gs.Tid
    from Goods
    group by Tid
    having AVG(Price)>
    (select AVG(Price) 平均价格 from Goods))
    group by gt.Type
    --查询全数商品总金额超20万的货品连串、名称、总金额
    select Type 商品类型 ,Name 名称 ,Price*Amount 总金额
    from GoodS gs , GoodType gt
    where gs.Tid=gt.Tid
    and Price*Amount>200000
    --仓库储存报告警察方(低10)

    --延迟到14:03:00 试行查询
    waitfor time '14:03:00'
    select*from Goods
    --延迟两秒实行操作
    waitfor delay '00:00:02'
    select *from Goods

    on primary

    翻看数据库文件
    select * from dba_table_files;
     
    询问当前存在的表空间
    select * from v$tablespace;

    (5)变量函数

    --常用的数学函数
    --1、ABS 求相对值 交易在此之前-交易之后
    --2、POWER 求次方
    select POWER(2,10),POWER(2.0000,0.5) --1kb 1024
    select POWER(2.0000000,1.000000/3)
    --3、求圆周率
    select PI()
    --4、Rount() --四舍五入函数
    select ROUND(315.4567,2),Round(315.4567,0),Round(345.4567,-2)
    --5、ceiling --取比原数大的偏分头
    --6、floor --取比原数小的大背头
    select CEILING(3.00000000001),FLOOR(3.99999999)
    --7、ASCII 再次来到一个字符的ASCII码值
    select ASCII('A')
    --8、Rand() 重回二个0-1以内的人身自由数
    --select nCHAR(214) nCHAR(208)
    select RAND()
    select RAND(DATEPART(ss,GetDate())*2)--那样打变化频率小
    go

    --爆发二个信用卡号,前8位为'6225 3800' 后8位为私自数字,
    --请用T-SQL编码实现
    --select RAND()
    declare @rand numeric(20,8)
    select @rand=RAND()
    print @rand
    declare @s varchar(16)
    set @s=SUBSTRING(STR(@rand,10,8),3,8)
    print @s
    set @s='62253800' @s
    print '你的新银行卡号为:' @s

    --日期函数
    --1、getdate():再次来到服务器上的脚下时光
    select GETDATE()
    --2、datepart:重返二个日子的一局地值(整形)
    --3、datename:重返一个日期的一有的值(字符串)
    --再次回到七日的第几天(周六是第一天)
    select DATEPART(DW,GETDATE()),DATENAME(DW,GETDATE())
    --再次来到一年的第几周
    select DATEPART(WEEK,GETDATE()),DATENAME(WEEK,GETDATE())
    --4、datediff 日期比较函数
    --重返种种交易已经产生了多少天
    select DATEDIFF(DD,transdate,GETDATE()) from TransInfo

    --字符串函数
    --1、LEN:重回一个字符串的字符数
    select LEN('中国'),LEN('abc123!')
    select LEN('abc '),LEN(' abc')--数据类型为varchar类型,会自行清除没字符连接的空格

    --2、dataLength:重临四个字符串的字节数
    select dataLength('中国'),dataLength('abc123!')
    select RIGHT('abcdef',3),LEFT('abcdef',3)
    --4、substring:字符串截取函数
    select SUBSTRING('abcdef',2,3)--和C#不均等,下标从一齐首
    --5、charIndex:字符串查找函数
    select charIndex('a','bcad',1)
    --6、upper:字母大写调换函数
    --7、lower:字母小写转变函数
    select UPPER('abc123'),LOWER('abCCC123中!')
    --8、space:产生空格函数
    select len('abc' SPACE(10) '123') ,'abc' SPACE(10) '123' --len是测定总省长度
    --9、replicate:字符串重复函数
    select REPLICATE('abc',3)
    --10、replace:字符替换函数
    select REPLACE('11111111','1','o')--将1替换为o
    select REPLACE('o0o0o0o0000oo','0','o'),'00000000'--将0替换为o
    select REPLACE( REPLACE('0o0oil0oillil10ol1','l','1'),'0','o')
    --11、stuff:字符替换函数
    select STUFF('贵州弗罗茨瓦夫',2,1,'北')
    select STUFF('中华夏族民共和国巴尔的摩',3,0,'江苏')--输出中夏族民共和国福建杜阿拉
    --12、ltrim和rtrim:去掉字符串左边或左侧的凡事空格
    select len(ltrim(' a bc'))
    --13、str:将数值调换为字符串函数
    select STR(12345.65,8,2)
    --14、char:将贰个ASCII码值转换为一个字符
    select CHAR(97),ASCII('a')

     

    (

    表空间意况
    select tablespace_name,sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;

    (6)数据库变量格式

    use StuDB
    select*from StuInfo
    select*from Exam
    --总学生人数 参照他事他说加以考察人数 及格人数 未及格人数 及格率
    declare @total int,@sum int,@pass int
    select @total=COUNT(*) from StuInfo --计算总人数
    select @sum=COUNT(*) from Exam --总括参谋人数
    select @pass=COUNT(*) from Exam
    where WriteExam>=60 and LadExam>=60 --计算及格人数

    select @total 总人数,@sum 参照他事他说加以考察人数,@pass 及格人数 ,
    @total-@pass 未及格人数,CONVERT(varchar(20),
    ceiling( @pass*1.0/@total*10000)/100) '%' 及格率

    select*from StuInfo
    --查看上三个不当的编号
    select @@ERROR

    select*from StuInfo
    select*from Class
    select @@IDENTITY
    insert Class values('s149')

    --获得上二回SQL指令影响的授命行数
    select @@ROWCOUNT

    --剖断删除是或不是成功
    --1、直接删除
    --2、先查询,然后再删除,再查询

    --当前SQL服务器名称,当前劳动名称
    select @@SERVERNAME ,@@SERVICENAME

    --突显当前开发的事务数
    select @@TRANCOUNT

    --显示当前服务器允许的最第Billy斯接数
    select @@MAX_CONNECTIONS

    --呈现当前接纳的言语
    select @@LANGUAGE

    print '当前服务器名称:' @@servername
    print '当前服务名称:' @@servicename
    print '错误编号:' convert(varchar(6), @@error)

    --展现笔试平均战表,再依附平均成绩突显相应音信
    declare @avg float
    select @avg=AVG(writeExam) from Exam
    print ' ------战绩消息如下:--------'
    print'全校平均战绩:' convert(varchar(20),@avg)
    if @avg>=70
    begin
    print'成绩能够!'
    --展现前三名的学生音信
    select top 3 StuName,si.StuId,WriteExam,LadExam
    from StuInfo si,Exam e
    where si.StuId=e.StuId
    order by WriteExam desc --笔试降序
    end
    else
    begin
    print'成绩相当差!'
    --显示后三名的学习者音讯
    select top 3 StuName,si.StuId,WriteExam,LadExam
    from StuInfo si,Exam e
    where si.StuId=e.StuId
    order by WriteExam asc --笔试降序
    end

    --对全班学生开展提分,保险每位同学的笔试战表全体通过
    while(1=1) --永真循环
    begin
    declare @count int --保存未经过的人头
    --总计为经过的食指
    select @count=Count(*) from Exam where writeExam<60
    if (@count=0)
    begin
    break --终止循环
    end
    --进行加分
    update Exam set WriteExam=100 where writeExam>=98
    update Exam set WriteExam=WriteExam 2 where WriteExam<98

    end
    print'----------加分后的学生成绩如下:--------------'
    select*from Exam

    --突显学员笔试战绩的品级制
    --90以上:优秀,80-90:良好,70-80:中等,60-69 :一般
    --60以下:不及格
    select ExamNo 考号,StuId 学号,WriteExam 笔试成绩 ,LadExam 机试成绩,
    等级=
    case
    when writeExam>=90 then '优秀'
    when writeExam>=80 then '良好'
    when writeExam>=70 then '中等'
    when writeExam>=60 then '一般'
    else '不及格'
    end
    from Exam

    --彰显全数学员打地铁全名,性别,年龄,笔试成绩,机试战绩
    --未有实际业绩的学员展现缺考
    select stuName,sex,Age,WriteExam=
    case
    when WriteExam IS null then '缺考'
    else CONVERT(varchar(20),writeExam)
    end,
    LadExam=
    case
    when LadExam IS null then '缺考'
    else CONVERT(varchar(20),ladexam)
    end
    from StuInfo si left join Exam e
    on si.StuId=e.StuId

    --未参与考试的学习者成绩为0
    select stuName ,sex ,ISNULL(age,18),
    ISNULL(WriteExam,0),
    ladexam=
    case
    when ladexam IS null then 0
    else ladexam
    end
    from StuInfo si left join Exam e
    on si.StuId=e.StuId

    (7)索引、视图、事务

    --成立索引
    语法:
    if exists(select*from sys.indexes
    where name='IX_stuinfo_AgeName')
    drop index stuinfo.IX_stuinfo_AgeName
    go
    create nonclustered index 索引名
    on 表名(按某列升序或降序)
    例子:
    create nonclustered index IX_stuinfo_AgeName
    on stuinfo(age,stuname desc)
    备注:列名后加 desc 是降序的意味,不加默许升序
    备注2:nonclustered表示创造非聚焦索引 还就好像:unique表示创立独一性索引,clustered 代表成立聚焦索引

    --使用索引
    语法:
    select*from 有该索引的表名
    with (index=索引名)
    例子:
    行使索引IX_stuinfo_AgeName 查询学员消息
    select*From StuInfo
    with(index=IX_Stuinfo_AgeName)

    --索引的优点和短处
    优点:
    1、加速访谈速度
    2、抓好行的独一性
    缺点:
    1、带索引的表在数据库中须要越来越多的存储空间
    2、更新数据的命令必要越来越长的拍卖时间,因为它们须求对索引实行翻新

    --创制视图
    语法:
    create view 视图名
    as
    select 列名 from 表1,表2
    where 表1.id =表2.id order by 条件
    例子:
    成立三个视图:获取学员的真名、性别、年龄、笔试成绩、机试战表、况兼按笔试战表降序排序
    if exists(select*from sys.views
    where name='VW_Stu')
    drop view VW_Stu --有同等视图则删除原视图
    go
    create view VW_Stu
    as
    select top 100 stuName,Sex,Age,WriteExam,LadExam
    from StuInfo si,Exam e
    where si.StuId=e.StuId
    order by WriteExam Desc
    go
    --视图的使用
    select *from VW_Stu

    --事务
    事务的ACID属性
    1、原子性
    二个事务对数据库的享有操作,是多少个不可分割的干活单元。那一个操作依旧全体实施,要么什么也不做。保证原子性是数据库系统自个儿的天职,由DBMS的专门的工作管理子系统来兑现。

    2、一致性
    四个专门的学问独立实践的结果应维持数据库的一致性,即数据不会因为业务的进行而遭到破坏。确定保证险单个事务的一致性是编写职业的使用技士的天职。在系统运作时,由DBMS的全部个性系统施行义务。

    3、隔离性
    在多少个事情并发推行时,系统应保险这个职业前后相继单独试行时的结果一律,此时称职业达到了隔开分离性的供给,相当于在多个冒出事务试行时,保障实行结果是不错的,就好像单客户状况一致。隔开分离性是由DBMS的并发调节子系统完毕的。
    4、持久性

    语法:
    --开启事务
    begin transaction
    declare @error int --定义变量,记录错误
    set @error=0 --默许无错
    Update bank set Blance=Blance 5000 where Bname='join'
    set @error=@errror @@ERROR
    Update bank set Blance=Blance-5000 where Bname='jack'
    set @error=@errror @@ERROR
    if(@error<>0) --假使错误号不为零,表达有操作失误
    begin
    raiserror('转账进程出错',10,1)
    rollback --回滚全体操作
    end

    else
    begin
    print '恭喜您,转账成功!'
    commit --提交全数操作
    end

    实例:
    --转账业务,转账900
    begin tran
    declare @err int=0 --声Bellamy个变量,初值为0
    update Bank set Cmoney=Cmoney-900 where Cname='张三'
    set @err=@err @@ERROR
    update Bank set Cmoney=Cmoney 900 where Cname='李四'
    set @err=@err @@ERROR
    if @err>0 --条件
    begin
    print'交易战败,事务回滚!'
    rollback
    end
    else
    begin
    print'交易得逞,事务提交'
    commit tran
    end

    Ø 推断表或其它对象及列是还是不是存在

    name='School',

    查询表空间剩余空间
    select tablespace_name,sum(bytes)/1024/1024 from dba_free_space group by tablespace_name;

    (8)存款和储蓄进程

    --实践dos命令的存款和储蓄进程CMDShell
    --在d盘根目录下创办五个文本夹
    execute xp_cmdshell 'md D:DB'
    --查看D盘下的保有音信
    exec xp_cmdshell 'dir d:'
    --查看视图VW_Stu的源代码
    exec sp_helptext 'VW_Stu'
    --查看叁个表的目录
    exec sp_helpindex 'stuInfo'
    --查看一个数据库中的存款和储蓄进度
    exec sp_stored_procedures
    --实行数据库的逻辑名称改名(呈现名称)
    exec sp_renamedb BankDBs,BankDB--主文件名是不会变的
    --查看当前数据库中的表和视图情状
    exec sp_tables

    --将网格展现改为文本格式呈现

    use StuDB
    --创立叁个囤积进程
    --展现机试和笔试的平分成绩,并且出示本次试验的大成景况
    --还要来得未通过的学生音讯
    if exists(select*from sys.procedures
    where name='ScoreCountl')
    drop procedure ScoreCountl
    go
    create procedure ScoreCountl
    as
    declare @write decimal,@lab decimal
    select @write=AVG(writeExam),@lab=AVG(LadExam)
    from Exam
    print '笔试成绩:' convert(varchar(20),@write)
    print '机试成绩:' convert(varchar(20),@lab)
    if @write>=70 and @lab>=70
    print'本班考试战表优良!'
    else
    print'本班考试成绩一般!'

    print'-------------------------------------------------'
    print'----------插手此番试验未有经过的上学的小孩子名单-----------'
    select stuname 姓名,si.StuId 学号,WriteExam 笔试战表,LadExam 机试战表
    from StuInfo si,Exam e
    SQLserver高端编制程序,Oralce常用命令。where si.StuId=e.StuId and ( WriteExam<60 or LadExam<60)

    go
    exec ScoreCountl

    --自由调节及格线
    if exists(select*from sys.procedures
    where name='ScoreCount2')
    drop procedure ScoreCount2
    go
    create procedure ScoreCount2
    @w decimal=60,--笔试及格线
    @l decimal=60 --机试及格线,加了暗许值60
    as
    declare @write decimal,@lab decimal
    select @write=AVG(writeExam),@lab=AVG(LadExam)
    from Exam
    print '笔试战表:' convert(varchar(20),@write)
    print '机试成绩:' convert(varchar(20),@lab)
    if @write>=70 and @lab>=70
    print'本班考试成绩杰出!'
    else
    print'本班考试战表一般!'

    print'-------------------------------------------------'
    print'----------本次笔试及格线:' convert(varchar(20),@w)
    '----------此番机试及格线:' convert(varchar(20),@l)
    print'----------参预此番考试未有通过的学习者名单-----------'
    select stuname 姓名,si.StuId 学号,WriteExam 笔试战绩,LadExam 机试成绩
    from StuInfo si,Exam e
    where si.StuId=e.StuId and ( WriteExam<@w or LadExam<@l)
    go
    exec ScoreCount2 @l=40,@w=60 --分别为机试和笔试的及格线
    exec ScoreCount2 --有暗许值的景观下

    use GoodSystem
    --创设贰个仓库储存进度:查询生产日期为某年的
    --商品名称,类型,生产日期,仓库储存
    if exists(select*from sys.procedures
    where name='ScoreCount3')
    drop procedure ScoreCount3
    go
    create procedure ScoreCount3
    @d decimal
    as
    select Name 商品名称,gt.Type 类型,ProductionDate 生产日期,Amount 仓库储存
    from GoodS gs,GoodType gt
    where gs.Tid=gt.Tid and year(ProductionDate)=@d
    --查询二零一七年的商品新闻
    go
    exec ScoreCount3 2017

    --创建三个积攒进程:查询类型为‘食物’的商品新闻
    if exists(select*from sys.procedures
    where name='ScoreCount4')
    drop procedure ScoreCount4
    go
    create procedure ScoreCount4
    @s varchar(20)
    as
    select Name 商品名称,gt.Type 类型,ProductionDate 生产日期,Amount 仓库储存
    from GoodS gs,GoodType gt
    where gs.Tid=gt.Tid and gt.Type=@s

    go
    exec ScoreCount4 '食品'

    --判定有个别表或对象是否留存
    if (exists (select * from sys.objects where name = 'classes'))
    print 'Exist';
    go
    if (exists (select * from sys.objects where object_id = object_id('student')))
    print 'Exist';
    go
    if (object_id('student', 'U') is not null)
    print 'Exist';
    go

    filename='D:Desktop置心一处,无事不成。二、编程(四)笔记始料比不上程序猿.NET摄像教程-Time第课-数据库开采及ado.netSchool.mdf',

    查看表结构
    desc table;

    (9)带输出参数的蕴藏进程

    --创立八个存款和储蓄进度:增多四个学员成绩消息
    if OBJECT_ID('InsertExam') is not null
    drop proc InsertExam
    go
    create proc InsertExam
    @ExamNo int,
    @stuid varchar(50),
    @writeExam decimal(10,2),
    @ladExam decimal(10,2),
    @n int output
    as
    insert Exam(ExamNo,StuId,WriteExam,LadExam)
    values(@ExamNo,@stuid,@writeExam,@ladExam)
    select @n=@@ROWCOUNT

    go
    select*from Exam
    --调用丰硕存款和储蓄进程
    declare @n int
    exec InsertExam '8','1006',70,80,@n output
    if @n>0
    print'增加成功'
    else
    print'增加失败'

    use MySchool
    select*from Teacher
    --引用到C#案例MySchool_Proc
    --加多名师
    if OBJECT_ID('InsertTeacher') is not null
    drop proc InsertTeacher
    go
    create proc InsertTeacher
    @LoginId varchar(50),
    @LoginPwd varchar(50),
    @TeacherName varchar(50),
    @Sex varchar(50),
    @UserStateId int,
    @Birthday dateTime,
    @n int output
    as
    insert Teacher(LoginId,LoginPwd,TeacherName,Sex,UserStateId,Birthday)
    values(@LoginId,@LoginPwd,@TeacherName,@Sex,@UserStateId,@Birthday)
    select @n=@@ROWCOUNT
    go

    --修改教员
    if OBJECT_ID('UpdateTeacher') is not null
    drop proc UpdateTeacher
    go
    create proc UpdateTeacher
    @LoginId varchar(50),
    @LoginPwd varchar(50),
    @TeacherName varchar(50),
    @Sex varchar(50),
    @UserStateId int,
    @Birthday dateTime,
    @n int output
    as
    update Teacher set LoginPwd=@LoginPwd, TeacherName=@TeacherName,
    Sex=@Sex,UserStateId=@UserStateId,Birthday=@Birthday
    where LoginId=@LoginId
    select @n=@@ROWCOUNT
    go
    --删除教员
    if OBJECT_ID('DeleteTeacher') is not null
    drop proc DeleteTeacher
    go
    create proc DeleteTeacher
    @LoginId varchar(50),
    @n int output
    as
    delete from Teacher where LoginId=@LoginId
    select @n=@@ROWCOUNT
    --自己掌握
    --增多、修改、删除存款和储蓄进度都以为了采纳到C#程序中能够越来越快的实行,且占系统运作内部存款和储蓄器非常少。
    --C#中的调用其实正是一个三层架构

    --推断该列名是不是留存,要是存在就删除
    if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
    alter table student drop column idCard
    go
    if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
    alter table student drop column tel
    go

    size=5mb,

    自律管理

     

    --filegrowth=10mb,

    非空约束
    创设非空约束
    create table test(id number(6) not null);

    Ø 创建、删除表

    filegrowth=一成,--根据文件的比例增进

    充分非空约束
    alter table 表名 modify 列名 not null

    --决断是不是留存当前table
    if (exists (select * from sys.objects where name = 'classes'))
    drop table classes
    go
    create table classes(
    id int primary key identity(1, 2),
    name varchar(22) not null,
    createDate datetime default getDate()
    )
    go
    if (exists (select * from sys.objects where object_id = object_id('student')))
    drop table student
    go

    maxsize=100mb

    剔除表中的非空约束
    alter table 表名 modify 列名 null

    --创建table
    create table student(
    id int identity(1, 1) not null,
    name varchar(20),
    age int,
    sex bit,
    cid int
    )
    go

    )

    主键约束 primary key

     

    log on

    创建primary key 约束
     create table test (id number(6) primary key);

    Ø 给表增加字段、修改字段、删除字段

    (

    添加primary key 约束
     alter table 表名 add constraint 自定义约束名 primary key (列名)

    --加多字段
    alter table student add address varchar(50) not null;
    --修改字段
    alter table student alter column address varchar(20);
    --删除字段
    alter table student drop column number;

    name='School_log',

    删去约束

    --添加七个字段
    alter table student
    add address varchar(22),
    tel varchar(11),
    idCard varchar(3);

    filename='D:Desktop置心一处,无事不成。二、编程(四)笔记爆冷门程序猿.NET摄像教程-Time第课-数据库开垦及ado.netSchool_log.ldf',

    alter table 表名 drop constraint 约束名

    --推断该列名是不是留存,假设存在就删除
    if (exists (select * from sys.columns where object_id = object_id('student') and name = 'idCard'))
    alter table student drop column idCard
    go
    if (exists (select * from information_schema.columns where table_name = 'student' and column_name = 'tel'))
    alter table student drop column tel
    go

    size=3mb,

    独一约束 unique

     

    filegrowth=3%,

    始建表时
    create table users(
     id number(6) primary key not null,
     name varchar2(20) unique);
    )

    Ø 增多、删除约束

    maxsize=20mb

    添加unique约束
    alter table 表名 add unique(列名)

    --加多新列、约束
    alter table student
    add number varchar(20) null constraint no_uk unique;
    --扩充主键
    alter table student
    add constraint pk_id primary key(id);
    --增添外键约束
    alter table student
    add constraint fk_cid foreign key (cid) references classes(id)
    go
    --增添独一约束
    alter table student
    add constraint name_uk unique(name);
    --添加check约束
    alter table student with nocheck
    add constraint check_age check (age > 1);
    alter table student
    add constraint ck_age check (age >= 15 and age <= 50)
    --增多暗中同意约束
    alter table student
    add constraint sex_def default 1 for sex;
    --加多二个含有默许值可感到空的列
    alter table student
    add createDate smalldatetime null
    constraint createDate_def default getDate() with values;

    )

    反省约束 check

    ----- 三个列、约束共同开创--------
    alter table student add
    /*添加id主键、自增*/
    id int identity constraint id primary key,
    /* 增添外键约束*/
    number int null
    constraint uNumber references classes(number),
    /*暗中认可约束*/
    createDate decimal(3, 3)
    constraint createDate default 2010-6-1
    go

     

    创建表时
    create table users(
      id number(6) primary key not null,
      sex varchar2(2) check(sex='男' or sex='女') default '男';
    )

    --删除约束
    alter table student drop constraint no_uk;

    --切换数据库

    添加check约束
    alter table users addsex varchar2(2) check(sex = '男' or sex = '女') default '男';

     

    use School;

    外键约束 foreign key

    Ø 插入数据

    --在School数据库中开创三个学生表.TableStudent

    先成立一个班级表
    create  table class(
      classId number(6) not null primary key,
      className varchar2(10),
      count number(100)
    );

    insert into classes(name) values('1班');
    insert into classes values('2班', '2011-06-15');

    Create table TblStudent

    再次创下设多个学员表
    create table student(
      studentId number(6) not null primary key,
      studentName varchar2(20),
      studentClass number(6) references class(classId)
    );

    insert into student
    select 'bulise' name, age, sex, cid
    from student
    where name = 'tony';

    (

    丰硕外键约束
    alter table student add constraint fk_student_class referenc class (classId);

    --多条记下同期插入
    insert into student
    select 'jack', 23, 1, 5 union
    select 'tom', 24, 0, 3 union
    select 'wendy', 25, 1, 3 union
    select 'tony', 26, 0, 5;

       --表中列的定义在这对小刮号中

    级联删除约束
    增加外键时在外键前面加
    alter table student add constraint fk_student_class referenc class (classId) on delete cascade;

     

       tSId int identity(1,1)  primary key,

    去除此之外键时增添级联删除约束
    alter table 表名 drop primary key cascade;

    Ø 查询、修改、删除数据

       tSName nvarchar(10) not null ,

    查看表的具备约束以下二种方法都得以
    select table_name,constraint_name,constraint_type from user_constraints
    where table_name='大写的表名'

    --查询数据
    select * from student;
    select id, 'bulise' name, age, sex, cid from student
    where name = 'tony';
    select *, (select max(age) from student) from student
    where name = 'tony';

       tSGender bit not null,

    select table_name,constraint_name,constraint_type from dba_constraints
    where table_name='大写的表名'

    --修改数据
    update student set name = 'hoho', sex = 1 where id = 1;

       tSAddress nvarchar(300),

    --删除数据(from可粗略)
    delete from student where id = 1;

       tSPhone varchar(100),

     

       tSAge int,

    Ø 备份数据、表

       tSBirthday datetime,

    --备份、复制student表到stu
    select * into stu from student;
    select * into stu1 from (select * from stu) t;

       tSCardId varchar(18),

     

       tsClassId int not null--最终一行不加“,”

    Ø 利用存款和储蓄进程查询表音信

    )

    --查询student相关信息
    exec sp_help student;
    exec sp_help classes;

    go

     

    --创造三个班级表

     

    create table TblClass

     

    (

    转载自 

    tclassId int identity(1,1) primary key,

     

    tclassName nvarchar(50) not null,

    tclassDesc nvarchar(100)

    )

    介绍生成脚本工具

    数据库→右键→义务→生成脚本

    可挑选生成怎么样的本子

    1. 选择生成的数据库版本
    2. 是还是不是带有某个脚本等
    3. 是不是生成带数据的台本(2007、二〇〇八都有该成效Express未有。)

    一句话来讲多少插入INSERT

    --使用insert语句向数据库的表中插入数据

    select * from TblClass

    --1.insert向表中插入一条数据

    insert into TblClass(tclassName ,tclassDesc ) values('Time第三期','珍惜时光')

    --向活动编号列插入数据

    set identity_insert tblClass on

    insert into TblClass(tclassId ,tclassName ,tclassDesc ) values(101,'Time第三期','珍重时光')

    set identity_insert tblClass off

    --Ctrl R 快捷键

    --假使要向该表中的除了活动编号以外的任何具备列都插入数据,则足以差十分的少列名

    insert into TblClass values('Time第四期','时光不老,你本人不散')

     

    select * from TblStudent

     

    --向TblStudent表中插入数据

    ----表中列的定义在那对小刮号中

    --   tSId int identity(1,1)  primary key,

    --   tSName nvarchar(10) not null ,

    --   tSGender bit not null,

    --   tSAddress nvarchar(300),

    --   tSPhone varchar(100),

    --   tSAge int,

    --   tSBirthday datetime,

    --   tSCardId varchar(18),

    --   tsClassId int not null--最后一行不加“,”

     

    insert into TblStudent(tSName,tSGender,tSAddress,tSPhone,tSAge,tSBirthday,tSCardId,tsClassId)

    values('Time001',0,'上海区','1778918281',18,'1989-10-11','78267287282819829X',1)

     

    insert into TblStudent

    values('Time001',0,'上海区','1778918281',18,'1989-10-11','78267287282819829X',1)

     

    --insert语句向表中那多少个差异意为空的列插入数据(tsClassId 不允许为空,必需插入数据)

    insert into TblStudent(tSName,tSGender ,tSAddress ,tsClassId )

    values('Time002',0,'上海''郊区',2)

    --null值正是表示空值

     

    --insert into语句二遍只好向表中插入一条记下,假如经过一条语句向表中插入多条记下,

    --则须求选用别的形式insert语句。

     

    select * from TblClass

    --通过一条sql语句向表中插入多条sql语句

    insert into TblClass(tclassName ,tclassDesc)

    select 'Time第五期','体贴时间,岁月不老' union

    select 'Time第五期','珍贵时间,岁月不老' union

    select 'Time第五期','尊崇时间,岁月不老' union

    select 'Time第五期','珍重时间,岁月不老' union

    select 'Time第五期','爱惜时间,岁月不老' --最后一行无需union

     

    create table TblClassBak

    (

    ClsId int identity(1,1) primary key,

    ClsName nvarchar(50) not null,

    ClsDesc nvarchar(50) null

    )

     

    select * from TblClassBak

    --将TblClass表中的数据导入(复制)到TblClassBak表中

    --也是选择Insert语句

    --insert into表(列) select 列,列from 表

    insert into TblClassBak (ClsName ,ClsDesc )

    select tclassName,tclassDesc from TblClass

    --N前缀,在存款和储蓄国语字符时候,必需加大写字母N。

    大约多少更新(数据修改)

    use School

     

    select * from TblClass

    --更新语句

    update 表名 set 列名=值,列名=值 where 条件

    --在编制更新语句的时候,若无where条件则表示将表中的具备数据都更新为钦点的多少。

    --全数学员年龄加

    update Student set sAge=sAge 1

    --这么写tclassName='▲',表示那列的值变为一个‘▲’

    --而笔者辈的渴求是在本来的列的根底上丰硕‘▲’

    update TblClass set tclassName=tclassName '▲' where tclassId <100

    --更新多列

    update TblClass set tclassName=tclassName '▲',tclassDesc =tclassDesc '★' where tclassId =100

    --where中得以应用别的的运算符:(||)or ,<>(!=), (&&)and,(!)not

    简易多少删除(DELETE)

    删去表中全部数据:delete from Student

    Delete 只是去除数据,表还在,和Drop Table分歧

    Delete 也足以带whre子句删除一部分数码:例:delete from student where sAage >20

    Truncate table student 的功力跟delete from student 同样

    都是剔除student表中的全体数码,分化在于:

    1.  Truncate语句非常的火速。由于truncate操作使用根据最小情势记录日志,所以功用相比较高。对于数百万条数据应用truncate删除只要几秒钟,而利用delete要求多少个时辰。

    2.  Truncate语句会把表中的全自动编号复位为默许值(苏醒到种子的职务),而由此delete删除表中的数额后,依然从在此之前的多少持续累加。

    3.  Truncate语句不触发delete触发器。

    4.  Truncate 只可以将表中全体数据删除,不能增添where,不可能依据典型来删除。

    --复习

    insert into 表(列) values(值)

    update 表 set 列=值,列=值 where ...

    --删除语句

    delete from 表名  where ...

    select * from TblClass

    --删除tclassId为偶数的数目

    DELETE FROM TblClass where tclassId%2=0

    --删除表中全体数据

    delete from TblClass

    truncate table TblClass

    --删除表

    drop table TblClass

    通过设计器扩展约束(截止.保证数据完整性)

    --通过设计器增加约束

    --为EmapEmail增多二个独一约束

    --设计→右键→索引/键(已存在EmpId主键索引)→增添→设置(类型:独一键;选拔相应的列)

     

    --为性别增加多个暗许约束,默许为'男'

    --设计→选中该列→在江湖属性中→暗中认可值或绑定(输入:男)

     

    1.主键约束

    2.外键约束

    3.独一约束

    4.暗中认可约束

    5.检查约束

    6.非空羁绊

    7.增多外键时,设置级联更新,级联删除

    透过SQL加多约束

    --删除表

    drop table Employees

    drop table Department

    --创建表

    create table Employees

    (

        EmpId int identity(1,1),

        EmpName varchar(50),

        EmpGender char(2),

        EmpAge int,

        EmpEmail varchar(100),

        EmpAddress varchar(500)

    )

    create table Department

    (

        DepId int identity(1,1),

        DepName varchar(50)

    )

    -============手动扩展约束==========

    --手动删除一列(删除EmpAddress列)

    alter table Employees drop column EmpAddress --删除、修改时候要求加关键字column,增加时候则无需。

     

    --手动扩展一列(扩张一列EmpAddr varchar(一千))

    alter table Employees add  EmpAddr varchar(1000) not null

     

    --手动修改一下EmpEmail的数据类型(varchar(200))

    alter table Employees alter column EmpEmail varchar(200) not null

     

    --为EmpId增加一个主键约束

    alter table Employees add

    constraint PK_Employees_EmpId primary key(EmpId)

     

    --非空约束,为EmpName扩张贰个非空约束

    alter table Employees alter column EmpName varchar(50) not null

     

    --为EmpName扩张七个独一约束

    alter table Employees add constraint

    UQ_Employees_EmpName unique(EmpName)

     

    --为性别扩张三个默许约束,默以为'男'

    alter table Employees add constraint

    DF_Empyloyees_EmpGender default('男') for EmpGender

     

    --为年龄扩张贰个检查约束:年龄必得在-120岁之间,含岁与岁。

    alter table Employees add constraint

    CK_Employees_MepAge check(EmpAge>=1 and EmpAge<=120)

     

     

    --创设叁个单位表,然后为Employee表扩展一个DepId列。

    alter table Employees add DepId varchar(50) not null

     

    --为Department表扩大三个主键约束

    alter table Department add constraint

    PK_Department_DepId primary key(DepId)

     

    --为DepName列增添一个非空约束与独一约束

    --非空约束

    alter table Department alter column DepName varchar(50) not null

    alter table Department add constraint UQ_Department primary key(EepName)

     

    --为Employee表扩张三个DepId列。

    alter table Employees add DepId int not null

     

    --扩充外键约束

    alter table Employees add constraint

    FK_Emolopyees_DepId foreign key(DepId) references Department(DepId)

     

     

    --删除Employee

    drop table Employees

    drop table Department

    truncate table TblClass

     

    --通过sql代码删除约束

    alter table Employees drop constraint CK_Employees_EmpAge

     

    --用一句话来删除相应的羁绊

    alter table Employees drop constraint

    CK_Employees_EmpAge,

    CK_Employees_MepAge,

    DF_Empyloyees_EmpGender

     

    --通过一句代码来创设全数约束

    alter table Employees add

    constraint UQ_Employees_Empname unique(Empname)

    constraint CK_Employees_EmpAge check(EmpAge>=1 and EmpAge<=120),

    onnstraint DF_Employees_EmpGender default('男') for EmpGender,

    constraint FK_Employees_Dempartment foreign key(DepId)

    references Department(DepId) on delete cascade on update cascade

    数据检索:数据查询

    --查询全数数据:表中的有着列的装有行。

    select 

    from TblStudent

    --查询钦赐的列的数额,由于尚未加where条件所以这里也是要回来全体行的多少。

    select tsname,tsgender,tsage

    from TblStudent

    --as 能够设置展现的列名

    select '黄林' as 姓名,18 年龄,'huanglin@yahoo.com' 邮箱

    select 1 1 as '1 1的结果'

    --获得当前系统时间(网格型)

    select getdate() as 时间

    --输出时间(文本型)

    print getDATE()

    TOP、Distinct

    TOP/Distinct

    --查询前多少个

    select top 5 * from Employees

    --查询ID最大值前五条,降序排序

    select top 5 * from Employees order by EmployeeId desc

    --查询部分数据前五条

    select top 5

      Lastname,

      FirstName,

      [Address]--因为Address是第一,则需加上[]

      from Employees

    --查询前百分之十(向上取整)

    select top 10 percent * from Employees

     

    --得到年级最小的多少个学生

    select top 5 * from TblStudent order by tsage asc

    --得到年纪最大的%的学习者

    select top 10 * from TblStudent order by tsage desc

     

    --distinct是对查询出的凡事结果集实行数量再一次处理的,并非针对某一列

    select

        distinct

        tsname,

        tsgender,

        tsaddress

    from TblStudent

    聚合函数                                        

    SQL聚合函数:

    MAX(最大值)、MIN(最小值)、AVG(平均值)、SUM(和)、COUNT(数量:记录的条数)

    本文由新葡亰496net发布于网络数据库,转载请注明出处:SQLserver高端编制程序,Oralce常用命令

    关键词:

上一篇:新葡亰496net分区简要介绍

下一篇:没有了