SQL Server Management Studio创建数据表

文章目录

  • 一、建表注意事项
    • 1.1 数据类型
    • 1.2 建立数据表的基本SQL语法
  • 二、实例说明
    • 2.1 创建数据表
    • 2.2 实例2
  • 三、标识列和主键
      • 示例:

一、建表注意事项

1.1 数据类型

可以看这个去了解数据类型:

1.2 建立数据表的基本SQL语法

建立数据表的基本 SQL 语法如下:

creat table table_name (column1 datatype [constraint],column2 datatype [constraint],column3 datatype [constraint],...
);

这里是各部分的详细说明:

  • create table : 这是一个 SQL 命令,用于创建新表。
  • table_name: 所创建的表的名称。
  • column1, column2, column3, … : 这些是你想在表中创建的列的名称。
  • datatype: 每列的数据类型,例如 intvarchardate 等。
  • constraint: 可选项,用于定义列的规则,如 not null、 primary key 、foreing key、uniquecheckdefault 等。

二、实例说明

现在我们通过建立几个数据表来进行详细的说明

2.1 创建数据表

use StudentManageDB
go
if exists(select * from sysobjects where name='Students')
drop table Students 
go
create table Students
(	StudentID int identity(10000,1),--学号StudentName varchar(20)not null,--姓名Gender char(2) not null,--性别Birthday datetime not null,--出生日期StudentIdNo numeric(18,0)not null,--身份证号Age int not null,--年龄PhoneNumber varchar(50),StudentAddress varchar(500),ClassId int not null --班级
)
go

这段SQL语句在SQL Server数据库中创建一个新的数据表名为“Students”,用于存储学生信息。下面是这段SQL语句的详细分析和说明:

  1. use StudentManageDB: 这条命令指示SQL Server使用名为StudentManageDB的数据库,因为建表通常需要在已经存在的数据库内进行。所有接下来的操作都将在这个数据库上进行。创建数据表在第二节

  2. go: GO是一个批处理命令,用于分隔批处理SQL Server语句。SQL Server Management Studio和一些其他SQL界面用它来标识一组一起执行的命令的结束。它不是SQL语句,而是一个命令指令。

  3. if exists(select * from sysobjects where name='Students') drop table Students: 这条语句检查名为“Students”的表是否存在于数据库中。如果存在,它会执行drop table Students命令来删除这个表。这样能确保创建新表时不会因为一个同名的表已经存在而出现错误。

  4. go: 再次使用GO指令来结束上一批命令。

  5. create table Students: 这条命令开始创建一个新的表“Students”。表中包含以下字段:

    • StudentID: 学号,设定为自动增长的整数类型。identity是标识列(后面讲),起始值为10000,每次新增一条记录,ID值增加1。看数据类型点这个
    • StudentName: 学生的姓名,它是一个变长字符串(varchar),最多可包含20个字符,并且不允许为空(not null)。
    • Gender: 性别,设定为固定长度为2的字符类型(char),不允许为空。
    • Birthday: 出生日期,使用datetime类型来存储日期和时间数据,不允许为空。
    • StudentIdNo: 学生的身份证号码,它是一个数值型字段(numeric),最多18位数字,没有小数位,并且不允许为空。
    • Age: 学生的年龄,是一个整数类型的字段,不允许为空。
    • PhoneNumber: 学生的联系电话,是一个变长字符串,最多可以包含50个字符。
    • StudentAddress: 学生的地址,是一个更长的变长字符串,最多可包含500个字符。
    • ClassId: 班级编号,是一个整数类型的字段,不允许为空。它建立了一个关联到另一张表(假设为班级信息表)的外键关系。
  6. go: 这条指令结束了创建表的命令批次。

2.2 实例2

if exists(select * from sysobjects where name='ScoreList')
drop table ScoreList
go
create table ScoreList
(Id int identity(1,1)primary key,StudentId int not null,--学号外键CSharp int null,SQLServer int null,UpdataTime datetime not null  --更新时间)
go

首先,在SQL 脚本中,Id 列被直接定义为主键。

  Id int identity(1,1) primary key,

在这行中,Id 列的定义包含了关键词 primary key,这明确地将 Id 列设置为 ScoreList 表的主键。因此,每当向 ScoreList 表插入新记录时,Id 列将自动增加(从1开始,每次增加1),并且保证每一条记录的 Id 值都是唯一的。

identity(1,1) 部分是 SQL Server 特有的语法,它指定 Id 列是一个自动增长的标识列,起始值为1,每次新增记录时自动增长的步长也是1。

我们可以查看创建的数据表:
在这里插入图片描述
把第一行填完后使用Enter键,自动生成1
在这里插入图片描述

  1. CSharp int null,

    这表示 ScoreList 表中有一个名为 CSharp 的列,它的数据类型是 int(整数)。null 关键字表示这个字段能够存储 NULL 值,即该字段不是必须的,可以没有值。在数据库中,NULL 是一个特殊的标记,表示字段的值是未知的或缺失的。

  2. SQLServer int null,

这表示表中有一个名为 SQLServer 的列,其数据类型也是 int。同样的,null 表示这个字段可以接受 NULL 值,即它也是一个可选的字段,不是强制必填的。

  1. UpdataTime datetime not null --更新时间

    这一行定义了一个名为 UpdataTime 的列,数据类型为 datetime,这意味着该字段将存储日期和时间信息。not null 关键字表示这个字段是必须的,必须要有值,不能存储 NULL
    要注意SQL中的注释,用双减号 -- 表示。

三、标识列和主键

标识列和主键在数据库中有不同的作用:

  1. 自动递增

    • 标识列:通常会有一个自动递增的属性,每当插入新的记录时,标识列的值会自动增加,这个过程是自动的,不需要用户输入。
    • 主键:没有自动递增的属性,除非它被明确定义为标识列。主键的值可以是手动插入的,比如在使用复合主键或者业务逻辑要求使用特定格式的键值时。
  2. 唯一性

    • 标识列:虽然标识列的值是唯一的,因为每次插入都会增加,但是标识列本身并不强制唯一性,除非它也被指定为主键。
    • 主键:保证了表中每一行的唯一性,这是数据库强制的约束,不允许有两行具有相同的主键值。
  3. NULL值

    • 标识列:通常不允许NULL值,因为它旨在为每一行提供一个唯一的标识符。
    • 主键:同样不允许NULL值,因为每行都需要有一个明确的标识符来维护数据完整性。
  4. 显示在查询结果中

    • 标识列:当进行查询操作时,标识列的值会按照插入顺序的递增显示。
    • 主键:查询结果中会显示主键字段的值,不一定是递增的,取决于主键值的插入方式。
  5. 索引

    • 标识列:即使是标识列,也不一定有索引,除非你创建索引或者将其设置为主键。
    • 主键:默认会有一个唯一索引,以加快按主键字段的查询和排序操作。

简而言之,标识列在视觉上通常表现为一个按插入顺序递增的数字序列,而主键则是确保每行唯一且不为空的约束条件。如果主键设置为标识列,那么它就同时具备了上述两种属性。

示例:

假设我们有一个用户信息表,我们希望每个用户都有一个唯一的用户ID,并且我们希望数据库能够在新增用户记录时自动为每个用户生成这个ID。

这是创建这样一个表的SQL语句示例:

create table Users (UserID int identity(1,1) primary key,Username varchar(255) not null ,Email varchar(255) not null
);

在这个例子中:

  • UserID 是一个标识列,因为它具有 identity(1,1) 属性。这意味着每次插入新行时,UserID 会从1开始自动递增。
  • UserID 同时也是主键,如 primary key 关键词所定义的。这确保了 UserID 的值在表中是唯一的,而且每个用户都会有一个唯一的标识符。

在这种情况下,UserID 字段既是标识列(保证每个用户有一个自动分配、递增的唯一ID)又是主键(保证每行数据的唯一性并且不允许空值)。然而,并非所有主键都是标识列。你可以有一个主键而没有自动递增的特性,特别是当主键为复合主键时,由多个列组合成时,通常不会使用标识列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/635376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【正点原子STM32连载】 第四十四章 外部SRAM实验 摘自【正点原子】APM32E103最小系统板使用指南

1)实验平台:正点原子APM32E103最小系统板 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/docs/boards/xiaoxitongban 第四…

【备战蓝桥杯】快来学吧~ 图论巩固,Delia的生物考试

蓝桥杯备赛 | 洛谷做题打卡day12 文章目录 蓝桥杯备赛 | 洛谷做题打卡day12最大食物链计数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解代码总的思路:拓扑排序 我的一些话 最大食物链计数 题目背景 你知道食物链吗?Delia 生…

SSM汽车维修管理系统

工具使用情况: eclipsetomcatmysqljdk 技术架构: 后台:springspring mvcmybatis 前台:easyui 功能介绍: 汽车维修管理、车辆接待、维修项目登记、维修领料、质检完工、消费结算 配件管理、财务管理、基础数据管理…

二进制表示(14)

题目 public class Main {public static String con01(int x,int n) {StringBuffer s new StringBuffer();while(x!0) {s.append(x%n);x/n;}return s.reverse().toString();}public static int con02(int x,int n) {StringBuffer s new StringBuffer();int sum 0;while(x!0…

二、VS2019编译的VTK9.0.0 + Qt 5.14.2 环境测试

1. 使用CMake VS2019 编译vtk 9.0.0 时,需要启用支持Qt开关、如下图 如果不会编译的可以参见我的这篇文章: 一、VTK 9.0.0 编译安装步骤 VS2019 CMake3.26.0-CSDN博客 打开Qt5.14.2 ,创建Qt Widget 项目: 构建设置选择 MSVC2017 64bit pro 项目文件加入两行配置: …

鸿蒙开发系列教程(四)--ArkTS语言:基础知识

1、ArkTS语言介绍 ArkTS是HarmonyOS应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开…

GetShell的姿势

0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…

javaWebssh运动会管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh运动会管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,M…

Beyond Compare ubuntu 安装

文章目录 参考 具体方法请参考【1】、【2】,亲测有效。 参考 【1】deepin深度系统 BeyondCompare 4.3.4破解教程 【2】Beyond-Compare 4 -linux 破解

Java医药WMS进销存系统

技术架构: jdk8 IntelliJ IDEA maven Mysql5.7 有需要的可以私信我。 系统功能与介绍: 医药进销存系统,主要分两种角色:员工、客户。本系统具有进销存系统的通用性,可以修改为其它进销存系统,如家电进…

JUC并发编程-线程和进程、Synchronized 和 Lock、生产者和消费者问题

1、什么是JUC 源码 官方文档 面试高频问! java.util 工具包、包、分类 业务:普通的线程代码 Thread Runnable Runnable 没有返回值、效率相比入 Callable 相对较低! 2、线程和进程 线程、进程,如果不能使用一句话说出来的技术…

创建SERVLET

创建SERVLET 要创建servlet,需要执行以下任务: 编写servlet。编译并封装servlet。将servlet部署为Java EE应用程序。通过浏览器访问servlet。编写servlet 要编写servlet,需要扩展HttpServlet接口的类。编写servlet是,需要合并读取客户机请求和返回响应的功能。 读取和处…

Qt 状态机框架:The State Machine Framework (二)

传送门: Qt 状态机框架:The State Machine Framework (一) Qt 状态机框架:The State Machine Framework (二) 1、利用并行态避免态的组合爆炸 假设您想在单个状态机中对汽车的一组互斥属性进行建模。假设我们感兴趣的属性是干净与肮脏,以及移动与不移动。需要四个相互排斥的…

去掉element-ui的el-table的所有边框+表头+背景颜色

实例: 1.去掉table表头(加上:show-header"false") <el-table:data"tableData":show-header"false"style"width: 100%"> </el-table> 2.去掉table所有边框 ::v-deep .el-table--border th.el-table__cell, ::v-deep .el…

【人工智能平台】ubuntu22.04.3部署cube-studio

简介&#xff1a;本次安装是在虚拟机上进行&#xff0c;需要给虚拟机至少分配16GB&#xff0c;分配8GB时系统会卡死。 一、环境&#xff1a; 主机环境&#xff1a;win11&#xff08;全程科学&#xff09;vm虚拟机 虚拟机&#xff1a;ubuntu22.04.3桌面版&#xff08;新装&…

什么是OSPF?为什么需要OSPF?OSPF基础概念

什么是OSPF&#xff1f; 开放式最短路径优先OSPF&#xff08;Open Shortest Path First&#xff09;是IETF组织开发的一个基于链路状态的内部网关协议&#xff08;Interior Gateway Protocol&#xff09;。 目前针对IPv4协议使用的是OSPF Version 2&#xff08;RFC2328&#x…

多维时序 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆神经网络融合多头注意力机制多变量时间序列预测

多维时序 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆神经网络融合多头注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现CNN-BiLSTM-Mutilhead-Attention卷积双向长短期记忆神经网络融合多头注意力机制多变量时间序列预测效果一览基本介绍程序设计…

layui文本编译器支持多图上传,图片上传排序,删除图片功能

layui编译器支持多图上传&#xff0c;图片上传排序&#xff0c;删除图片功能 效果图如下&#xff1a; <div class"layui-tab-item"><textarea id"content" class"js-ueditor" name"content"></textarea> </di…

Django使用session管理购物车

购物车允许用户选择产品并设置他们想要订购的数量&#xff0c;然后在他们浏览网站时临时存储这些信息&#xff0c;直到最终下订单。购物车必须在会话中持久化&#xff0c;以便在用户访问期间维护购物车项目。 使用Django的session框架来持久化购物车。购物车将保持在session中&…

微软使其AI驱动的阅读导师免费

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…