您的位置:68399皇家赌场 > 虚拟主机 > SQLServer之DEFAULT约束

SQLServer之DEFAULT约束

发布时间:2019-07-14 02:56编辑:虚拟主机浏览(163)

    动用SSMS数据库管理工具增多外键约束

    本示例演示当表结构已存在时加多外键约束,成立表时加上海外国语大学键约束步骤和表结构存在时增多外键步骤一样。示例演示如下:

    1、连接数据库,展开要增添外键的多少表-》右键点击-》选拔设计。

    澳门皇家赌场55533网址 1

    2、在表设计窗口-》选取要加多外键的多少行-》右键点击-》选取事关。

    澳门皇家赌场55533网址 2

    3、在外键关系窗口中-》点击增加。

    澳门皇家赌场55533网址 3

    4、增加实现后-》首先修改表和列标准。

    澳门皇家赌场55533网址 4

    5、在表和列窗口中-》输入外键名-》在侧面选拔主表和关联的列-》在左边选择从表和作为外键的列-》点击分明。

    澳门皇家赌场55533网址 5

    6、在外键关系窗口中-》可挑选丰盛可能不加多外键描述-》可选择充裕只怕不增添修改恐怕去除数据时级联操作-》可拔取丰盛大概不添抓实制外键约束-》可挑选丰盛可能不添抓实制用于复制-》点击关闭。

    澳门皇家赌场55533网址 6

    7、点击保存按键(ctrl s)-》此时表会弹出警告窗口,点击是-》刷新查看外键是还是不是丰硕成功。

    澳门皇家赌场55533网址 7

    澳门皇家赌场55533网址 8

    开创表时加多默许约束

    第一剖断表是或不是选在,借使存在则先删除表再加多,若是不设有则平素助长。

    语法:

    --成立新表时增添暗中同意约束
    --数据库注明
    use 数据库名
    go
    --如果表已存在则先删除表再次创下造,假诺表不设有则平昔开立
    if exists(select * from sysobjects where name=表名 and type ='U')
    drop table 表名;
    go
    --建表语法评释
    create table 表名
    (
    --字段注明
    列名 列类型 identity(1,1) not null,
    列名 列类型) null,
    列名 列类型 null,
    列名 列类型 null,
    列名 列类型,
    列名 列类型 constraint 约束名 default 默认值,
    primary key clustered(列名 asc) with(ignore_dup_key=off) on [primary] --主键索引注脚
    )on [primary]

    --字段注释评释
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    go

    示例:

    --创制新表时增多私下认可约束
    --数据库评释
    use testss
    go
    --要是表已存在则先删除表再次创下造,固然表一纸空文则直接成立
    if exists(select * from sysobjects where name='test1' and type ='U')
    drop table test1;
    go
    --建表语法注解
    create table test1
    (
    --字段证明
    id int identity(1,1) not null,
    name nvarchar(50) null,
    sex nvarchar(50) null,
    age nvarchar(50) null,
    classid int,
    height int constraint default_he default 166,
    primary key clustered(id asc) with(ignore_dup_key=off) on [primary] --主键索引申明
    )on [primary]

    --字段注释表明
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';

    go

    澳门皇家赌场55533网址 9

    澳门皇家赌场55533网址 10

    行使T-SQL脚本加多CHECK约束

    exec sp_rename '[原表名]','[新表名]'

    当表结构已存在时

    一经要抬高约束的表已存在外键约束,必要先删除此而外键约束再增多外键约束。假诺空头支票外键约束能够增加外键约束。

    语法:

    if exists(select * from sysobjects where name=约束名)
    alter table 数据库名.[dbo].表名 drop constraint 约束名;
    alter table 数据库名.[dbo].表名 with check add constraint 约束名 foreign key(列名)
    references 数据库名.[dbo].表名(列名)

    on delete cascade
    on update cascade;
    go

    示例:

    if exists(select * from sysobjects where name='t1_t2')
    alter table [testss].[dbo].[test1] drop constraint t1_t2;
    alter table [testss].[dbo].[test1] with check add constraint t1_t2 foreign key(classid)
    references [testss].[dbo].[test2](id)
    on delete cascade
    on update cascade;
    go

    澳门皇家赌场55533网址 11

    当表结构已存在时

    第一剖断表中是或不是留存暗许约束,假如存在则先删除默许约束再增加,要是空头支票则一贯抬高。

    语法:

    use 数据库
    go
    --决断暗中认可约束是或不是存在,假如存在则先删除,倘若不设有则一贯助长
    if exists(select * from sysobjects where name=约束名)
    alter table 表名 drop constraint 约束名;
    go
    --给钦赐列增加私下认可约束
    alter table 表名 add constraint 约束名 default(约束值) for 列名;
    go

    示例:

    use [testss]
    go
    --判别私下认可约束是还是不是存在,假设存在则先删除,假使官样文章则一向抬高
    if exists(select * from sysobjects where name='defalut_height')
    alter table [testss].[dbo].[test1] drop constraint defalut_height;
    go
    --给内定列增加暗中认可约束
    alter table [testss].[dbo].[test1] add constraint defalut_height default(160) for height;
    go

    澳门皇家赌场55533网址 12

    澳门皇家赌场55533网址 13

    动用SSMS数据库管理工科具增多CHECK约束

    1、连接数据库,选用数据库,采纳数据表-》右键点击(可能直接点击约束,右键点击,选取丰裕约束,前边步骤同样)-》选取设计。

    澳门皇家赌场55533网址 14

    2、选取要拉长约束的数量列-》右键点击-》选用CHECK约束。

    澳门皇家赌场55533网址 15

    3、在CHECK约束弹出框中式点心击增多。

    澳门皇家赌场55533网址 16

    4、在CHECK约束弹出框中-》输入CHECK约束表明式-》输入CHECK约束名-》输入CHECK约束描述-》其余能够挑选暗中同意。

    澳门皇家赌场55533网址 17

    5、点击关闭-》点击保存开关(大概ctrl s)-》刷新表查看结果。

    澳门皇家赌场55533网址 18

    9:删除约束

    在新表中开创外键

     语法:

    if exists( select * from sysobjects where name=表名 and type ='U')
    drop table 表名;
    go

    --当表结构一纸空文时
    --建表语法注明
    create table 表名
    (
    --字段注脚
    列名 int identity(1,1) not null,
    列名 int,
    primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引注明
    constraint 外键名 foreign key(列名)

    references 主表名(列名)
    on update cascade--是或不是级联操作
    on delete cascade
    )on [primary]

    --字段注释表明
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列说明' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    go

    示例:

    if exists( select * from sysobjects where name='test1'and type ='U')
    drop table test1;
    go

    --当表结构不设有的时候
    --建表语法表明
    create table test1
    (
    --字段评释
    id int identity(1,1) not null,
    name nvarchar(50) null,
    sex nvarchar(50) null,
    age nvarchar(50) null,
    classid int,
    primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引申明
    constraint t3_t4 foreign key(classid)

    references test2 (id)
    on update cascade
    on delete cascade
    )on [primary]

    --字段注释注解
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'性别' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';

    go

    澳门皇家赌场55533网址 19

    接纳T-SQL脚本加多DEFAULT约束

    当表结构海市蜃楼时

    假如表结构荒诞不经,可以一直抬高约束,能够同有的时候候充足多少个恐怕多个约束。

    语法:

    --假使表结构不设有的时候增添check约束
    use 数据库名;
    go
    --借使已存在表则删除
    if exists(select * from sysobjects where name=表名 and xtype='U')
    drop table 表名;
    go
    --创建表
    create table 表名
    (
    --字段证明
    列名 int identity(1,1) not null,
    列名 nvarchar(50) null,
    列名 nvarchar(50) null constraint 约束名 check(约束准则),
    列名 nvarchar(50) null,
    列名 int,
    列名 int constraint 约束名 check(约束准绳)
    primary key clustered(列名 asc) with(ignore_dup_key=off) on [primary], --主键索引申明
    )on [primary]

    --字段注释评释
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'列描述' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'表名', @level2type=N'COLUMN',@level2name=N'列名';

    go

    示例:

    --假诺表结构一纸空文时加多check约束
    use testss;
    go
    --借使已存在表则删除
    if exists(select * from sysobjects where name='test1' and xtype='U')
    drop table test1;
    go
    --创建表
    create table test1
    (
    --字段评释
    id int identity(1,1) not null,
    name nvarchar(50) null,
    sex nvarchar(50) null constraint check1 check(sex='男' or sex='女'),
    age nvarchar(50) null,
    classid int,
    height int constraint check2 check(height>=110 and height<=120)
    primary key clustered(id asc) with(ignore_dup_key=off) on [primary], --主键索引注解
    )on [primary]

    --字段注释注明
    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'id主键' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'id';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'姓名' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'name';

    exec sys.sp_addextendedproperty @name=N'MS_澳门皇家赌场55533网址,Description', @value=N'性别' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'sex';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'年龄' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'age';

    exec sys.sp_addextendedproperty @name=N'MS_Description', @value=N'班级id' , @level0type=N'SCHEMA',
    @level0name=N'dbo', @level1type=N'TABLE',@level1name=N'test1', @level2type=N'COLUMN',@level2name=N'classid';

    go

     澳门皇家赌场55533网址 20

    澳门皇家赌场55533网址 21

    澳门皇家赌场55533网址 22

    Alter table [表名] add constraint [ 约束名] primary key( [列名])

    FOREIGN KEY约束增加准绳

    1、外键约束并不止能够与另一表的主键约束相链接,它还足以定义为引用另三个表中 UNIQUE 约束的列。

    2、倘若在 FOREIGN KEY 约束的列中输入非 NULL 值,则此值必须在被援用列中留存;不然,将赶回违反外键约束的错误消息。 若要力保验证了整合外键约束的具有值,请对富有加入列钦赐NOT NULL。

    3、FOREIGN KEY 约束仅能援引位于同一服务器上的一致数据库中的表。 跨数据库的援用完整性必须通过触发器实现。

    4、FOREIGN KEY 约束可引用同一表中的其余列。 此行为称为自援用。

    5、在列级内定的 FOREIGN KEY 约束只可以列出多个援引列。 此列的数据类型必须与概念约束的列的数据类型同样。

    6、在表级钦赐的 FOREIGN KEY 约束所全部的引用列数目必须与约束列列表中的列数一样。 每种援用列的数据类型也不能不与列表中相应列的数据类型一样。

    7、对于表可饱含的援引其余表的 FOREIGN KEY 约束的多寡或别的表所具有的援引特定表的 FOREIGN KEY 约束的数据, 数据库引擎 都并未有预订义的界定。 即使如此,可选用的 FOREIGN KEY 约束的实际上数目还是受硬件配备以及数据库和应用程序设计的限量。 表最多能够将 2五10个其余表和列作为外键援用(传出引用)。 SQL Server 二零一六 (13.x) 将可在独立的表中引用的另外表和列(传入援用)的数据限制从 253 提升至 10,000。 (包容性等第至少必须为 130。)数量限制的压实带来了下列约束:

    DELETE 和 UPDATE DML 操作支持胜出 253 个外键引用。 不帮衬MERubiconGE 操作。

    对自己进行外键援用的表仍只好实行 254个外键援引。

    列存款和储蓄索引、内部存款和储蓄器优化表和 Stretch Database 暂不匡助开始展览超越 253 个外键引用。

    8、对于有的时候表不强制 FOREIGN KEY 约束。

    9、即使在 CL汉兰达用户定义类型的列上定义外键,则该项目标兑现必须支持二进制排序。

    10、仅当 FOREIGN KEY 约束援引的主键也定义为项目 varchar(max) 时,技术在此约束中选用项目为varchar(max) 的列。

    DEFAULT约束加多准则

    1、若在表中定义了默许值约束,用户在插入新的数量行时,假诺该行未有一点名数量,那么系统将私下认可值赋给该列,如若大家不安装暗中认可值,系统默以为NULL。

    2、要是“暗许值”字段中的项替换绑定的私下认可值(以不带圆括号的款型显得),则将唤起您拨冗对默许值的绑定,并将其替换为新的暗中认可值。

    3、若要输入文本字符串,请用单引号 (') 将值括起来;不要选择双引号 ("),因为双引号已封存用于带引号的标记符。

    4、若要输入数值暗中认可值,请输入数值而且毫不用引号将值括起来。

    5、若要输入对象/函数,请输入对象/函数的名目而且不要用引号将名称括起来。

    CHECK约束优劣点

    优点:

    1、保险列数据正式和界定,能够约束数据完整性

    2、有Check约束的列能够提须要查询优化器新闻之所以升高品质

    缺点:

    1、插入也许涂改时数据不适合约束法规,不可能修改成功。

    exec sp_rename '[表名].[列名]','[表名].[新列名]'

    FOREIGN KEY约束优劣点

    优点:

    1、有限协助数据的一致性,完整性,更牢靠。

    2、关联查询时,能够用到FK 的总括音讯。

    3、有主外键的数据库设计能够追加EEscort图的可读性。

    缺点:

    1、删队或更新关联数据时索要做检查,效能会好低。

    2、手工业调数据时,会存在主从表校验,会相比麻烦。

    3、批量导入数据时,会设有外键校验,供给先关闭外键约束,导入完成再展开外键约束,操作相比较麻烦。

     

    DEFAULT约束优劣势

    优点:

    1、使用私下认可值能够削减代码量,新增扩充少时方可不用写新扩展暗中同意值列,实行新扩大操作时时暗中同意填充。

    2、较有利开始展览总括和剖判,以及方便程序逻辑操作。

    缺点:

    1、使用不为NULL的暗中同意值,占用了越来越多的存款和储蓄空间。

     

    CHECK约束增多准则

    1、CHECK 约束用于限制列中的值的限量。

    2、Check约束通过逻辑表明式来判定数据的管事,用来界定输入一列或多列的值的限定,在列中更新数据时,所要输入的从头到尾的经过必须满意Check约束的准则,否则将不能够准确输入。

    3、若是对单个列定义 CHECK 约束,那么该列只同意特定的值。

    4、假诺对二个表定义 CHECK 约束,那么此约束会在一定的列中对值进行限制。

    11:重命名列名

    选用T-SQL脚本增加外键约束

    应用SSMS数据库处理工科具加多DEFAULT约束

    1、连接数据库,采用数据表-》右键点击-》选取设计。

    澳门皇家赌场55533网址 23

    2、在表设计窗口中-》选取数据列-》在列属性窗口中找到暗中同意值或绑定-》输入私下认可值(注意私下认可值的数据类型和输入格式)。

    澳门皇家赌场55533网址 24

    3、点击保存开关(或然ctrl s)-》刷新表-》再度展开表查看结果。

    澳门皇家赌场55533网址 25

    当表结构存在时

    增加CHECK约束时首先校验约束是或不是已存在,要是存在应该是先删除再加多,要是不设有则一贯助长。

    语法:

    -- 增多五个暗许约束
    use 数据库名;
    go

    if exists(select * from sysobjects where name=约束名)
    alter table 表名 drop constraint 约束名;
    go

    alter table 表名 add constraint 约束名 check(约束法规),constraint 约束名 check(约束准绳);
    go

    示例:

    -- 增添一个私下认可约束
    use testss;
    go

    if exists(select * from sysobjects where name='check1')
    alter table test1 drop constraint check1;
    go

    alter table test1 add constraint check1 check(height>=170 and height<=175);
    go

     澳门皇家赌场55533网址 26

    澳门皇家赌场55533网址 27

     

    15:更新表中列UserName的陈诉属性:
    EXEC sp_updateextendedproperty 'MS_Description','新的姓名','user',dbo,'TABLE','表名','column','UserName'

    本文由68399皇家赌场发布于虚拟主机,转载请注明出处:SQLServer之DEFAULT约束

    关键词: 68399皇家赌场 SQL

上一篇:MYSQL情状变量设置方法

下一篇:没有了