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,一经查实,立即删除!

相关文章

【ARM 嵌入式 编译系列 2.3 -- GCC 编译参数学习 -Wa,-mimplicit-it=thumb 使用介绍】

请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】 文章目录 问题背景-wa,-mimplicit-itthumb 介绍-wa 选项-mimplicit-itthumb 选项使用 -wa,-mimplicit-itthumb 问题背景 在移植 RT-Thread 时,使用Make 进行编译,结果遇到了下面问题:…

【正点原子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 功能介绍: 汽车维修管理、车辆接待、维修项目登记、维修领料、质检完工、消费结算 配件管理、财务管理、基础数据管理…

自存angular 复制功能 使用angular material design Clipboard cdk

import { Clipboard } from "angular/cdk/clipboard"; 实例化 constructor(private clipboard: Clipboard) {} 使用 参考angular clipboard cdk html&#xff1a; <button mat-button class"withdraw-btn" (click)"copyCode()"><mat-…

Vue3+Ts:使用i18n实现国际化与全局动态下拉框框切换语言

Vue3Ts&#xff1a;使用i18n实现国际化与全局动态下拉框框切换语言 一、下载依赖&#xff1a;二、创建ts文件并配置main.ts三&#xff0c;如何使用1.在<template>中使用2.在setup中使用 四、全局下拉框动态切换 一、下载依赖&#xff1a; npm install vue-i18nnex二、创…

二进制表示(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 项目文件加入两行配置: …

MySQL深入——14

Mysql是如何保证数据不全的&#xff0c;Mysql的数据写入是两阶段提交完成的&#xff0c;即为redo log的prepare阶段和bin log阶段还有redo log的commit阶段&#xff0c;那么数据就和redo log 和bin log 有关。 我们来看看bin log 和redo log的写入机制 bin log bin log的写入…

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

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

商铺对外出租招标标书

随着市场经济的蓬勃发展&#xff0c;商铺对外出租已成为一种普遍的商业模式。对于房东或业主而言&#xff0c;通过招标方式出租商铺不仅可以提高租金收益&#xff0c;更能确保商铺的稳定租户。 一、招标标书的基本要素 1. 项目概述&#xff1a;简要介绍商铺的位置、面积、装修…

2023华数杯国际赛A题核废水40页完整高质量原创论文

大家好&#xff0c;从昨天肝到现在&#xff0c;终于完成了本次华数杯国际赛数学建模A题的完整论文了。 给大家看一下目录吧&#xff1a; 目录 摘 要&#xff1a; 10 一、问题重述 12 二&#xff0e;问题分析 13 2.1问题一 13 2.2问题二 13 2.3问题三 13 2.4问题四 13 …

GetShell的姿势

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

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

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

Beyond Compare ubuntu 安装

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

Java医药WMS进销存系统

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

Git tag使用

tag常被称作里程碑&#xff0c;发版Release时用到。 怎么添加tag&#xff1f; 问 &#xff1a; 刚修改完代码 还未 Commit 可以直接 git tag v2.4.6.1 -m "[Update]更新proxy379ac539"吗&#xff1f; 答&#xff1a; 不可以&#xff0c;git tag 命令是用来给已经存…

windows虚拟主机和linux虚拟主机的区别有哪些?

很多个人站长和中小企业在做网站的时候&#xff0c;会选择虚拟主机。虚拟主机用的操作系统多为Windows系统&#xff0c;很多人一提到操作系统立马联想到Windows系统。其实除了Windows系统外&#xff0c;还有很多的操作系统。其中Linux系统是其中的佼佼者。 1、操作系统 window…

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

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

Python基础数据结构和操作

一、字符串 一. 认识字符串 字符串是 Python 中最常用的数据类型。我们一般使用引号来创建字符串。创建字符串很简单&#xff0c;只要为变量分配一个值即可。 a hello world print(type(a))注意&#xff1a;控制台显示结果为<class str>&#xff0c; 即数据类型为str…