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)又是主键(保证每行数据的唯一性并且不允许空值)。然而,并非所有主键都是标识列。你可以有一个主键而没有自动递增的特性,特别是当主键为复合主键时,由多个列组合成时,通常不会使用标识列。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UDS诊断(ISO14229-1) 36服务

文章目录 功能简介应用场景请求和响应1、请求2、子功能3、肯定响应4、否定响应 NRC 判断优先级顺序报文示例1、下载数据到服务器 UDS中常用 NRC 功能简介 36服务,即 TransferData(传输数据)服务,客户端利用 TransferData&#xf…

十、Qt 操作PDF文件

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …

数学建模.皮尔逊相关系数

一.前言 皮尔逊相关系数说白了就是一次函数中的斜率k,反应两个变量之间的关系,与斜率不同的地方在于其数值在1和-1之间,越接近于1,则说明两个变量之间是完全正向的线性关系;越接近于-1,说明两个变量之间是完…

RTMP对接腾讯云问题记录

RTMP对接腾讯云问题分析报告 问题现象及原因分析 1. 连不上腾讯云RTMP服务器 连不上腾讯云RTMP服务器,抓包显示服务器在握手完成后,主动断开了当前TCP链接。问题原因可能是connect中的tcUrl不能把域名转为IP,导致在握手不久服务器主动断开…

yum仓库详解(命令+搭建)

目录 一、初步了解yum 1、yum简介 2、yum实现过程 二、yum配置文件及命令 1、 yum配置文件 1.1 主配置文件 1.2 仓库设置文件 1.3 日志文件 2、yum命令详解 三、搭建仓库的方法 1、搭建本地yum仓库 2、搭建阿里云仓库(http方式外网环境) 3、f…

CSDN 年度总结|知识改变命运,学习成就未来

欢迎来到英杰社区: https://bbs.csdn.net/topics/617804998 欢迎来到阿Q社区: https://bbs.csdn.net/topics/617897397 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步&#xff…

目标检测开源数据集——道路坑洼

一、危害 对车辆的影响:道路坑洼会导致车辆行驶不稳,增加车辆的颠簸,不仅影响乘坐舒适度,还可能对车辆的悬挂系统、轮胎等造成损害。长期在坑洼路面上行驶,车辆的减震系统、悬挂系统等关键部件容易受损,进…

C语言第一弹---C语言基本概念(上)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 C语言基本概念 1、C语言是什么?2、C语言的历史和辉煌3、编译器的选择VS20223.1、编译和链接3.2、编译器对比3.3、VS2022优缺点 4、VS项目和源文件、头…

IDEA 在本地启动多个 SpringBoot 后端服务模拟集群

目录 方式一:使用 IDEA 界面在多个后端端口运行同一个项目 方式二:通过控制台在运行项目 jar 包时传入端口配置 方式一:使用 IDEA 界面在多个后端端口运行同一个项目 1. 点击 Run / Debug 在默认端口启动项目 2. 点击 Services&#xff0…

Android中的SPI实现

Android中的SPI实现 SPI是JVM世界中的标准API,但在Android应用程序中并不常用。然而,它可以非常有用地实现插件架构。让我们探讨一下如何在Android中利用SPI。 问题 在Android中,不同的提供者为推送功能提供服务,而在大型项目中…

『C++成长记』内存管理

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、C/C内存分布 二、内存管理方式 📒2.1C语言内存管理方式 &#x…

vue2使用 element表格展开功能渲染子表格

默认样式 修改后 样式2 <el-table :data"needDataFollow" border style"width: 100%"><el-table-column align"center" label"序号" type"index" width"80" /><el-table-column align"cent…

CTF CRYPTO 密码学-3

题目名称&#xff1a;反编译 题目描述&#xff1a; 分析 题目给出一个pyc后缀的文件&#xff0c;需要使用uncompyle6模块去还原成py文件 uncompyle6简介 uncompyle6 是一个 Python 反编译器&#xff0c;它能够将 Python 字节码&#xff08;.pyc 文件&#xff09;转换回源代码&…

定制键盘设计

方案1 stm32方案 参考 智辉君的键盘 方案2 沁恒方案 CH9328与ch9329区别&#xff1a;一个是单向&#xff0c;一个是双向。 ch9329是ch9328的升级款。 原理篇4、CH9328使用-CSDN博客https://blog.csdn.net/qq_44817843/article/details/112124822

容器部署的nextcloud配置onlyoffice时开启密钥

容器部署的nextcloud配置onlyoffice时开启密钥 配置 进入onlyoffice容器 docker exec -it 容器id bash编辑配置vi /etc/onlyoffice/documentserver/local.json enable设置为true&#xff0c;并配置secret 重启容器&#xff0c;并将配置的密钥填入nextcloud密钥页面 docker r…

力扣hot100 零钱兑换 背包 滚动数组

Problem: 322. 零钱兑换 文章目录 &#x1f388; 思路&#x1f496; Code &#x1f388; 思路 &#x1f468;‍&#x1f3eb; 大佬题解 &#x1f496; Code ⏰ 时间复杂度: O ( n ) O(n) O(n) class Solution {public int coinChange(int[] coins, int amount){int INF …

「爱下馆子」真的会寿命更短吗?

​“爱下馆子”真的会寿命更短吗&#xff1f; 随着现代生活节奏的加快&#xff0c;越来越多的人选择在外就餐&#xff0c;也就是我们常说的“下馆子”。然而&#xff0c;最近的一项研究发现&#xff0c;每天至少两顿在外就餐的人&#xff0c;全因死亡率增加了49%。这一发现引发…

Python图像处理【18】边缘检测详解

边缘检测详解 0. 前言1. 图像导数2. LoG/zero-crossing2.1 Marr-Hildteth 算法 3. Canny 与 holistically-nested 算法3.1 Canny 边缘检测3.2 holistically-nested 边缘检测 小结系列链接 0. 前言 边缘是图像中两个区域之间具有相对不同灰级特性的边界&#xff0c;或者说是亮度…

Configure Virtual Serial Port Driver串口模拟器VSPD

背景 串口通讯想必做硬件开发和软件的人来说都相当了解&#xff0c;以前的电脑&#xff0c;基本标配都包含一个串口。但现在的电脑&#xff0c;基本都没有配置串口了&#xff0c;如果要使用串口的功能&#xff0c;基本就要用一个USB转串口的硬件模块。 虚拟串口&#xff08;虚…

不同打包工具下的环境变量配置方式对比

本文作者为 360 奇舞团前端开发工程师 天明 前言 在现代的JavaScript应用程序开发中&#xff0c;环境变量的配置是至关重要的。不同的应用场景和部署环境可能需要不同的配置&#xff0c;例如开发、测试和生产环境。最常见的需求是根据不同的环境&#xff0c;配置如是否开启sour…