SQL Server 创建表

切换数据库,判断是否存在

sql 复制代码
--切换数据库
use DBTEST

--判断表是否存在
--创建的所有表都可以在sys.boject中找到,所以这里在sys.objects中查找是否有名字为department的表并且type为U 即用户生成的表
if exists(select * from sys.objects where name='department'and type='U') drop table department;

sys.objects中保存了所有表的各种信息,其中name字段保存的表名,type保存的对象类型;具体字段信息请看☞sys.objects (Transact-SQL)

创建部门表

sql 复制代码
--部门表
create table department
(
--部门编号,主键用于唯一标识不同的数据的
--identity定义自增起点和自增步长 
DepartmentId int primary key identity(1,1),
--部门名字
--varchar 代表字符型,长度为50
DepartmentName nvarchar(50),
--部门描述
--描述可能会比较长,这里使用text
DepartmentRemark text
)
  • primary key: 表示的主键,主键可以唯一地辨别事物的属性。通过主键能够查询出表中一条完整的记录,同时使用主键能防止表中出现重复的记录,避免了数据的冗余。
  • identity(1,1):定义了自增的起点和步长,这里从1开始自增,步长为1,即下一个为2

在创建DepartmentName时,使用的nvarchar,简单说下char、varchar、nvarchar的区别

  • char: char(10)可以存储十个字节,无论里面存储的数据是否有十个字节都会占用十个字节
  • varchar: varchar(10)最多占用十个字节,如果里面存储2个字节则占用2个字节,最多存放十个字节
  • nvarchar : char varchar text都可以加一个n,代表unicode,表示对中文友好;例如:varchar(100),可以存储100个字母或者50个汉字
    nvarchar(100),可以存储100个字母或者100个汉字

当文本较长,如几千字节时可以使用text

创建职级表

sql 复制代码
--建职级表
create table [Rank]`在这里插入代码片`
(
RankId int primary key identity(1,1),
RankName nvarchar(50) not null,
RankRemark text
)
  • 当想要创建的表名是关键字,可以使用'[] '扩起来

创建员工表

sql 复制代码
--员工表
create table people
(
PeopleId int primary key identity(1,1),--员工工号
DepartmentID int references department(DepartmentId),--部门编号
RankID int references [Rank](RankId),--员工职级
PeopleName nvarchar(50) not null,--员工姓名
PeopleSex nvarchar(1)default('男') check (PeopleSex='男'or PeopleSex='女'),--员工性别
PeopleBirth smalldatetime not null,--员工生日
PeopleSalary decimal(12,2) check(PeopleSalary >=1000 and PeopleSalary <=10000000),--员工薪水
PeoplePhone varchar(20) not null,--员工电话号码(唯一)
PeopleAddress varchar(300),
PeopleAddTime smalldatetime default(getdate())--自动记录当前时间
)
  • DepaermentID和RankID:使用了References 写外键关系,当添加员工的部门信息的时候,只能填写已经存在的部门,使用外来键对DepartmentID进行约束
  • PeopleSex:限制只能输入(男/女) 其他的输入不进去,使用check进行约束,使用default默认设置为'男'
  • PeopleSalary: sql server中有float但是没有double;这里使用decimal(12,2)去约束PeopleSalary12代表总长度,2代表小数点后两位,使用check对薪水范围进行约束,这里限制在[1000,10000000]
  • PeoplePhone :电话号码是唯一的, 使用Unique(独特的、唯一的) 进行约束
  • PeopleAddTime: 添加此员工信息的时间,这里使用getdate()去自动获取当前的时间

date、datetime、smalldatetime的区别

  • date :存储年月日,存储范围是从1月1日(0001-01-01)到12月31日(9999-12-31)存储格式为YYYY-MM-DD。
  • datetime 可以存储年月日时分秒;存储范围从1753年1月1日到9999年12月31日,精确到毫秒级,存储格式为YYYY-MM-DD HH:MI:SS[.nnn];占用8个字节的存储空间
  • smalldatetime可以表示的范围更小;存储范围从1900年1月1日到2079年6月6日,精确到分钟级,存储格式为YYYY-MM-DD HH:MI:SS。占用4个字节的存储空间

创建完成之后

departme表

people 表

Rank表

相关推荐
AC赳赳老秦25 分钟前
DeepSeek教育科技应用:智能生成个性化学习规划与知识点拆解教程
前端·网络·数据库·人工智能·学习·matplotlib·deepseek
枫叶丹41 小时前
【Qt开发】Qt系统(一)-> 定时器 QTimerEvent 和 QTimer
c语言·开发语言·数据库·c++·qt·系统架构
计算机毕设VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue在线考试系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
ejjdhdjdjdjdjjsl8 小时前
JSON序列化与反序列化实战指南
数据库·microsoft·c#
CC.GG8 小时前
【C++】STL容器----unordered_map和unordered_set的使用
java·数据库·c++
编程小Y9 小时前
如何优化MySQL的查询性能?
数据库·mysql
用户47949283569159 小时前
性能提升 40 倍!实战 PostgreSQL FDW 解决微服务跨库查询难题
数据库·后端
计算机毕设VX:Fegn089510 小时前
计算机毕业设计|基于springboot + vue宠物医院管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
kimi-22210 小时前
LangChain 将数据加载到 Chroma 向量数据库
数据库·langchain
麒qiqi11 小时前
理解 Linux IO 多路复用
开发语言·数据库