SQL Server建库-建表-建约束

----------------------------------------SQL Server建库-建表-建约束创建School数据库--------------------------------------

--创建School数据库之前:首先判断数据库是否存在,若存在则删除后再创建,若不存在则创建--
--exists关键字:括号里边能查询到数据则返回‘true’ 否则返回‘false’
if exists(select * from sysdatabases where name = ‘School‘)
--exists返回‘true’则执行删除数据库操作--
drop database School

--exists返回‘false’则表明数据库不存在,直接创建
create database School
on primary
(
--主数据库文件--
name = ‘School‘, --主数据文件逻辑名
fileName = ‘D:\project\School.mdf‘, --主数据文件物理逻辑名
size = 5MB, --初始值大小
maxsize = 100MB, --最大大小
filegrowth = 15% --数据文件增长量
)
log on
(
--日志文件--
name = ‘School_log‘,
filename = ‘D:\project\School_log.ldf‘,
size = 2MB,
filegrowth = 1MB
)
go

----------------------------------------使用T-SQL创建employee数据库------------------------------------
create database employee
on primary
(
--主要数据文件--
name = ‘employee1‘,
filename = ‘D:\project\employee1.mdf‘,
size = 10MB,
filegrowth = 10%
),
(
--次要数据文件--
name = ‘employee2‘,
filename = ‘D:\project\employee2.ndf‘,
size = 20MB,
maxsize = 100MB,
filegrowth = 1MB
)
log on
(
--第一个日志文件--
name = ‘employee_log1‘,
filename = ‘D:\project\employee_log1.ldf‘,
size = 10MB,
filegrowth = 1MB
),
(
--第二个日志文件--
name = ‘employee_log2‘,
filename = ‘D:\project\employee_log2.ldf‘,
size = 10MB,
maxsize = 50MB,
filegrowth = 1MB
)

---------------------------------查询已存在的数据库信息---------------------------
select * from sysdatabases

---------------------------------删除数据库------------------------------------
drop database School

---------------------------------创建Student数据库表----------------------------
--1、选择操作的数据库--
use School
go

--判断表是否存在--
if exists(select * from sysobjects where name = ‘Student‘)
drop table Student

--2、创建表---
create table Student
(
--具体的列名 数据类型 列的特征(是否为空)--
StudentNo int identity(2,1) not null,
LoginPwd nvarchar(20) not null,
StudentName nvarchar(20) not null,
Sex int not null,
GradeId int not null,
phone nvarchar(50) not null,
BornDate datetime not null,
Address nvarchar(255),
Email nvarchar(50),
IDENTITYcard varchar(18)
)
go

---查看所有数据库对象(数据库表)---
select * from sysobjects

drop table Student

----------------------创建subject课程表-------------------
-----1、判断表是否存在;若存在则删除再创建,若不存在则直接创建--------
if exists(select * from sysobjects where name = ‘subject‘)
drop table subject

use School
go

---创建subject课程表--
create table subject
(
SubjectNo int not null identity(1,1),
SubjectName nvarchar(50),
ClassHour int,
GradeID int
)

----------------------------------------创建Result成绩表-------------------
-----1、判断表是否存在;若存在则删除再创建,若不存在则直接创建--------
if exists(select * from sysobjects where name = ‘Result‘)
drop table Result

use School
go

---创建Result成绩表--
create table Result
(
StudentNo int not null,
SubjectNo int not null,
ExamDate Datetime not null,
StudentResult int not null
)

-----------------------------------------创建Grande年级表-------------------
-----1、判断表是否存在;若存在则删除再创建,若不存在则直接创建--------
if exists(select * from sysobjects where name = ‘Grade‘)
drop table Grade

use School
go

---创建Grande年级表--
create table Grade
(
GradeId int not null,
GrandeName nvarchar(50)
)

-----------------------------------------T-SQL添加约束-------------------------
--给StudentNo添加主键约束---
alter table Student
add constraint pk_StuNo primary key(StudentNo)

--给身份证添加唯一约束--
alter table Student
add constraint uq_StuIdcard unique(IDENTITYcard)

---给地址address添加默认约束--
alter table Student
add constraint df_stuaddress default(‘地址不详‘) for Address

---删除地址address默认约束---
alter table Student
drop constraint df_stuaddress

----------出生日期添加检查约束--------
alter table Student
add constraint ck_stuBorndate check(Borndate > ‘1980-01-01‘)

---------与Grand(年级表)建立主外键关系--------

--1、添加Grade主键(操作Grade)---
alter table Grade
add constraint pk_graid primary key(GradeId)

--2、添加Grade外键(操作Student)--
alter table Student
add constraint fk_stuGradeID foreign key(GradeId) references Grade(GradeId)

-------------------给subject课程表添加约束-----------------------

----给subjectNo列添加主键约束------
alter table subject
add constraint pk_SubID primary key(SubjectNo)

------给课程名称subjectName添加非空约束;-----
-----with nocheck:已经存在数据不通过check约束-------
alter table subject with nocheck
add constraint ck_subName check(SubjectName is not null)

-----学时必须大于0-----
alter table subject with nocheck
add constraint ck_ClassHour check(ClassHour > 0)

-----与Grade年级表添加主外键约束----
alter table subject with nocheck
add constraint fk_GradeID foreign key(GradeID)
references Grade(GradeID)

----------给result成绩表添加约束------------

-------添加多个约束---------
alter table Result
add
constraint pk_No_subID_date primary key(StudentNo,SubjectNo,ExamDate),
constraint df_examdate default(getdate()) for ExamDate,
constraint ck_StudentResult check(StudentResult between 0 and 100),
constraint fk_StuNo foreign key(StudentNo) references Student(StudentNo),
constraint fk_subNo foreign key(SubjectNo) references Subject(SubjectNo)

--删除多个约束--
alter table Result
drop constraint pk_No_subID_date,fk_subNo,fk_StuNo,ck_StudentResult,df_examdate

--------更改列的数据类型----------
alter table Result
alter column StudentResult int

时间: 2024-10-14 09:43:03

SQL Server建库-建表-建约束的相关文章

SQL Server 2012入门图解:建表、备份、还原

SQL Server 2012入门图解:建表.备份.还原_.NET教程网——简单专业的.NET技术网站 http://www.soaspx.com/dotnet/sql/sql2012/sqlserver212_20120504_9079.html 作者:汪宇杰 一.建立你的第一个数据库和表 例:建立一个用于描述一个学校学生情况的数据库.把它命名为School.并且要在School数据库下建立保存学生信息的表Student.在可视化界面下,我们通常这样操作.(本文是入门教程,不介绍如何用SQL语

清空SQL Server数据库中所有表数据的方法

其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入死循环,二是这里使用了微软未正式公开的sp_MSForEachTable存储过程. 也许很多读者朋友都经历过这样的事情:要在开发数据库基础上清理一个空库,但由于对数据库结构缺乏整体了解,在删除一个表的记录时,删除不了,因为可能有外键约束,一个常见的数据库结构是一个主表,一个子表,这种情况下一般都得先删除子表记录,再删除主表记录. 说道删除数据记录,

SQL Server中临时表与表变量的区别

2009年02月20日 星期五  19:31 我 们在数据库中使用表的时候,经常会遇到两种使用表的方法,分别就是使用临时表及表变量.在实际使用的时候,我们如何灵活的在存储过程中运用它们,虽然它们 实现的功能基本上是一样的,可如何在一个存储过程中有时候去使用临时表而不使用表变量,有时候去使用表变量而不使用临时表呢? 临时表 临时表与永久表相似,只是它的创建是在Tempdb中,它只有在一个数据库连接结束后或者由SQL命令DROP掉,才会消失,否则就会一直存在.临时表在创建的时候都会产生SQL Ser

SQL Server跨库访问

MSSQLServer不同服务器数据库之间的数据操作 方法1: --创建链接服务器 exec sp_addlinkedserver   'ITSV ', ' ', 'SQLOLEDB ', '远程服务器名或ip地址' exec sp_addlinkedsrvlogin  'ITSV ', 'false ',null, '用户名', '密码' --查询示例 select * from ITSV.数据库名.dbo.表名 --导入示例 select * into 表 from ITSV.数据库名.db

SQL Server迁移本机表数据信息

SQL Server将本机表数据信息通过媒介迁移到另外机器上 由于sql 只支持库的分离和附加  引用:https://blog.csdn.net/baicp3/article/details/46622293,并且通过导入导出的形式,insert的语法,少量数据还好,SQL server100万以上的数据就会出现及其慢的情况 所以本人采用转成包括表结构与数据的sql文件,在另一台机器上通过媒介进行数据覆盖传输:暂时对大数据量的迁移没啥好办法(如果有,拜托留下链接). 分享支援  造福人间 原文

获得sql server的table的表结构 -- 转到word中

SQL语句: select syscolumns.name,systypes.name,syscolumns.length from syscolumns join sysobjects on syscolumns.id=sysobjects.id and sysobjects.xtype='U' join systypes on systypes.xtype=syscolumns.xtype where sysobjects.name='master_location' order by sy

在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题

原文:在 SQL Server 中查询EXCEL 表中的数据遇到的各种问题 SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source="D:\KK.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...[Sheet1$] 问题: 消息 15281,级别 16,状态 1,第 1 行 SQL Server 阻止了对组件 'Ad Hoc Di

oracle 、sql server 、mysql 复制表数据

我们知道在oracle 中复制表数据的方式是使用 create table table_name as select * from table_name 而在sql server  中是不能这么使用的 语句如下: select * into table_name from table_name; 而在 mysql 中有两种方式 1. create table a like b 2. 类似oracle的方式 create table table_name as select * from tabl

Sql Server 在已知表中插入、删除、修改某一列操作

--1.向已有表中增加一列 ALTER TABLE TableName ADD ColumnName VARCHAR(20) NULL --2.删除表中的某一列 ALTER TABLE TableName DROP COLUMN ColumnName --3.修改某一列的数据类型 ALTER TABLE TableName ALTER COLUMN ColumnName INT 2.查询当年或者当月的数据 1.查询当年的数据 SELECT * FROM UserInfo WHERE YEAR(R

SQL Server 2008重新保存表时出错

在使用SQL Server 2008时,修改了表的字段名和类型名之后,点击保存按钮之后出现如下对话框: 解决方法: 点击Tools-->Options,在出现的对话框中点击Designers-->Table and Dababase Designers,出现如下画面,将右边的“Prevent saving changes that require table re-creation” 前的勾选去掉即可,然后点击OK按钮 SQL Server 2008重新保存表时出错,布布扣,bubuko.co