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表

相关推荐
数数科技的数据干货18 小时前
从爆款到厂牌:解读游戏工业化的业务持续增长道路
运维·数据库·人工智能
熊猫在哪18 小时前
macos安装mysql
数据库·mysql·macos
q***465218 小时前
在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
数据库·django·sqlite
合作小小程序员小小店19 小时前
web开发,在线%超市销售%管理系统,基于idea,html,jsp,java,ssh,sql server数据库。
java·前端·sqlserver·ssh·intellij-idea
不光头强21 小时前
Spring框架的事务管理
数据库·spring·oracle
百***92021 天前
【MySQL】MySQL库的操作
android·数据库·mysql
q***76661 天前
Spring Boot 从 2.7.x 升级到 3.3注意事项
数据库·hive·spring boot
信仰_2739932431 天前
Redis红锁
数据库·redis·缓存
人间打气筒(Ada)1 天前
Centos7 搭建hadoop2.7.2、hbase伪分布式集群
数据库·分布式·hbase
心灵宝贝1 天前
如何在 Mac 上安装 MySQL 8.0.20.dmg(从下载到使用全流程)
数据库·mysql·macos