SQL基础(1):约束

来源:互联网 发布:外网端口telnet不通 编辑:程序博客网 时间:2024/05/20 19:28

以下只针对SQL Server,其它数据库类型可能不支持某些操作或操作名不同。

create table用来创建表。

 not null:非空约束

该列值不能为空。

create table person([ID] int not null, --ID列中值不能为空值  [name] varchar(20),           [city] varchar(30));

unique:值唯一约束

该列不能有重复的数值,空值会作为相同的值来处理。

constraint用来定义有名约束。

create table person([ID] int not null unique,--无名值唯一约束  [name] varchar(20) ,  [city] varchar(30),   );  create table person([ID] int not null constraint uq1_person unique,--有名值唯一约束  [name] varchar(20) constraint uq2_person unique,--有名值唯一约束  [city] varchar(30),   );alter table person add constraint uq1_person unique([ID]), constraint uq2_person unique([name]);--在表已经存在的情况下创建有名值唯一约束alter table person drop constraint uq1_person, uq2_person;--撤消值唯一约束<span style="font-size:14px;"></span>

identity:标识列属性
当插入新的数据时,该列的字段会自动填充一个数字,数值默认起始值是1,逐渐递增。

create table test_table1([ID] int not null identity,//起始值为1,逐渐递增1       [name] varchar(20),       [city] varchar(30));create table test_table2([ID] int not null identity(10, 2),//起始值为10,逐渐递增2       [name] varchar(20),       [city] varchar(30));

然后可以像下面一样插入一条记录:

create table person(             [ID] int primary key identity, [name] varchar(20), [city] varchar(20));insert person values('张三', '北京');insert person([name], [city]) values('李四', '上海');insert person values('王五', '广州');insert person([name], [city]) values('赵六', '深圳');select * from person;

输出为:

ID name city
1 张三 北京
2 李四 上海
3 王五 广州
4 赵六 深圳

primary key:主键约束

我们把表中的列称为“字段”,也叫做“属性”,一行数据叫做一个“记录”,又称“元组”。存放在表中行列交叉处的数据叫做“值”,它的位置要由这个表中的字段和记录来定义。

主键是表里用于表示记录唯一性的字段,故主键的键值不能重复,且不能为空值;主键可以由一个或多个字段组成,表中每一行都由它的主键来唯一标识;每个表都应有一个主键,且表只能有一个主键。

primary key自动拥有unique约束和not null约束,故不能有重复的值和空值。一般为了方便还人工将主键添加identity属性。

create table person(    [ID] int not null primary key,--无名主键约束    [name] varchar(20),    [city] varchar(30)    );create table person([ID] int not null constraint pk_person primary key,--有名主键约束[name] varchar(20) not null,  [city] varchar(30)          );alter table person add constraint pk_person primary key([ID]);--在表已经存在的情况下创建有名主键alter table person drop constraint pk_person;--撤销主键约束

主键可以由多个字段组成,即组合主键,如:

create table persons([ID] int,[name] varchar(10),[city] varchar(10),constraint pk_persons primary key([ID], [name])//有名组合主键 );

一般用数字表示主键,不建议用字符串来表示主键。

主键的值通常都不允许修改,如果会改动主键的值,那么就是主键定义有误。

一般将主键定义成"表名_ID",如persons_ID。

foreign key references:外键约束

外键通常来自另一个表里的主键,即一个表中的 foreign key指向另一个表中的 primary key,通过设置外键来体现表和表之间关系。需要注意的是外键的值也有可能来自本表的主键。

外键可以有重复的值,也可以为空值,如以下表order_的外键customer_ID来自表customer的主键ID:

customer

ID name  age  city
1 张三 25    北京
2 李四 30   上海
3 王五 28   上海
4 赵六 32   广州
孙七 30   重庆

order_

order_number    time                                  customer_ID
10001            2014-10-10 13:05:56.233    3
10002            2014-10-10 13:20:05.120    3
10003            2014-10-10 13:40:13.653    3
10004            2014-10-10 14:20:05.120    1

一个表中可以有两个(或多个)外键,所以这个表可以体现另外两个表之间的关系,可以将这两个外键字段设置为这张表的组合主键,如果两个外键组合没有重复值的话。

create table books(    [ID] int not null,    [name] varchar(20),    [city] varchar(30),    [ID_p1] char(3) not null foreign key references titles([title_id])--无名外键约束   );   create table books(       [ID] int not null,                  [name] varchar(20),                  [city] varchar(30),                  [ID_p1] int not null constraint fk1_books foreign key references person1([ID]),--有名外键约束                 [ID_p2] int not null constraint fk2_books foreign key references person2([ID])--有名外键约束              );  alter table books add constraint fk1_books foreign key([ID_p1]) references person1([ID]),    constraint fk2_books foreign key([ID_p2]) references person2([ID]);  --在表已存在的情况下创建两个有名外键   alter table books drop constraint fk1_books, fk2_books;--撤销外键约束

数据库中有一个数据库关系图选项,右击选择新建数据库关系图,选择要查看的有关的表,就可以得到一张图,这个图里面显示了各个表的外键来自哪个表中的主键,右击表还可以手动向这个表添加和删除约束、索引等。

含有外键的表叫外键表,外键字段来自的那张表叫主键表。

在删除表时如果出错,可能是因为其它表的外键引用了本表中的主键。

check():值范围约束

create table persom( [ID] int not null constraint ck_persom primary key check ([ID]>0 and [ID]<1000),--无名值范围约束 [name] varchar(20), [city] varchar(30));create table persom(                     [ID] int not null constraint pk_persom primary key constraint ck1_persom check([ID]>0 and [ID]<1000),--有名值范围约束                       [name] varchar(20),                       [city] varchar(30) constraint ck2_persom check([city]='beijing')--有名值范围约束                      );alter table persom add constraint ck1_persom check([ID]>0 and [city]='beijing'),                       constraint ck2_persom check([city]='北京');--在表已经存在的情况下创建值范围约束alter table persom drop constraint ck1_persom, ck2_persom;--撤销值范围约束

default:默认值约束

create table person( [ID] int not null constraint pk_person primary key, [name] varchar(20), [time] datetime default getdate()--无名默认值约束);create table person( [ID] int not null constraint pk_person primary key, [name] varchar(20), [city] varchar(30) constraint df1_person default 'beijing',--有名默认值约束  [time] datetime constraint df2_person default getdate()--有名默认值约束);alter table person add constraint df1_person default 'beijing' for [city],   constraint df2_person default getdate() for [time];--在表已经存在的情况下创建多个有名默认值约束   alter table person drop constraint df1_person, df2_person;--撤销默认值约束

带默认值的字段插入数据示例:

create table person( [ID] int not null constraint pk_person primary key, [name] varchar(20), [city] varchar(30) constraint df1_person default 'beijing',--有名默认值约束  [time] datetime constraint df2_person default getdate()--有名默认值约束);insert into person([ID], [name]) values(1001, 'leon'); insert into person([ID], [name], [city]) values(1002, 'leon', 'beijing'); insert into person values(1003, 'leon', 'hangzhou', '2000-01-01 01:01:01'); 


 

0 0