(先简单说一下什么是表,表是一种结构化的文件,能够用来存储特定类型的数据。另外,在一个数据库中,表的名称是惟一的,不能重复。)前端
①主键约束 (primary key):主键能够由一个字段或多个字段构成,可是设置为主键的字段在表中一般是惟一的值,而且不能随便修改也不能为空。 ②惟一约束(unique) :该列的值是唯一的,且能够为空 ③检查约束 (check): 规定该列的取值范围,格式限制等,好比年龄的取值范围,邮件的格式等等 ④默认约束(default): 设置该列的默认值 ⑤外键约束(foreign key) :用于两个表之间创建关系,须要规定引用主表的那列,定义外键的那张表称之为子表,另外一张表称之为主表,在表的建立过程当中,应该先建立主表,后建立子表。sql
说完了表约束,万事俱备,只欠一张表了。 语法格式:数据库
create table 表名(
列名称 类型 约束,
列名称 类型 约束,
.........
)
复制代码
例如咱们建一张学生表,再加上约束:bash
create table Student(
studentid int primary key, --主键
name varchar(20) not null, --不能为空
age int check(age between 1 and 120), --检查约束(年龄在1-120之间)
gender varchar(2) check(gender='男' or gender='女'), --检查约束
address varchar(50) default 青岛市, --默认约束
idcard char(18) unique, --惟一约束
classid int foreign key references Class(classid) --外键约束
)
复制代码
上面这种方式是在建立表时直接给字段添加约束,固然还能够在表建立好了以后再添加约束:学习
主键:
alter table 表名 add constraint PK_字段名 primary key (字段名)
惟一:
alter table 表名 add constraint UQ_字段名 unique (字段名)
检查:
alter table 表名 add constraint CK_字段名 check (条件表达式)
默认:
alter table 表名 add constraint DF_字段名 default '默认值' for 字段名
外键:
alter table 表名 add constraint FK_字段名
foreign key(字段名) references 关联的表名(关联的字段名)
复制代码
已上就是建立表的一些操做,既然能建立这些约束,那也确定能够删除 alter table 表名 drop constraint 约束名(约束名就是在前面建立的,如 “PK_字段”)
注:若是约束是在建立表时建立的,则不能用这种命令删除,只能在企业管理器里面删除大数据
添加字段: Alter table [表名] add [列名] 类型
修改字段类型: Alter table [表名] alter column [列名] 类型
##2、临时表和表变量 ####一、先说说如何声明和插入数据 表变量:ui
声明:
DECLARE @tb_table TABLE(
........
........
)
插入:
insert into @tb_table
select name from Student
复制代码
临时表:spa
声明:
create table #tb_table ((
........
........
)
插入:
insert into #tb_table
select name from Student
复制代码
平时用的最多的地方就是在存储过程里,简单说一下他俩的区别。临时表是利用了硬盘(tempdb数据库) ,表变量是占用内存,所以小数据量固然是内存中的表变量更快。当大数据量时,就不能用表变量了,太耗内存了。大数据量时适合用临时表。表变量在执行完批处理语句后就会自动清理,而临时表须要手动删除。code
前面既然提到了外键约束,那咱们就来讲说如何查询多张存在关联的表cdn
先直接上sql语句吧:
select a.name,a.age,b.classname from Student a
inner join Class b on a.classid=b.classid where studentid=0001
复制代码
这是关联学生和班级表,查询出学号为0001的学生的姓名、年龄、班级。这两张表是经过classid这个字段关联的,因此用a和b来区分这两张表(a,b至关于一个代号),在select后查询的字段最好是加上这个代号,由于若是查询的字段在两张表中都存在时,它没法区分你查的是哪张表里的,因此会报错。
它所链接的两张表是主表与次表的关系,主表的数据,必须所有显示,次表的数据,只在与主表中的数据有关联的才能显示。 ①左外连接:左边的表是主表,必须所有显示,右边的表是次表,关联上才能够显示。
select a.name,a.age,b.classname from Student a
left outer join Class b on a.classid=b.classid where studentid=0001
复制代码
①右外连接:右边的表是主表,必须所有显示,左边的表是次表,关联上才能够显示。
select a.name,a.age,b.classname from Student a
right outer join Class b on a.classid=b.classid where studentid=0001
复制代码
③彻底外连接:两张表都是主表,不论是否关联上,都要显示
select a.name,a.age,b.classname from Student a
full outer join Class b on a.classid=b.classid where studentid=0001
复制代码
我是一个18年应届生,最近和朋友们维护了一个公众号,内容是咱们在从应届生过渡到开发这一路所踩过的坑,以及咱们一步步学习的记录,这里有前端、安卓、Java、C#,若是感兴趣的朋友能够关注一下,一同加油~