SQLSever创建表和约束

2023-11-14

表的基本概念

概念:由数据按一定的顺序和格式构成的数据集合,是数据库的主要对象。每一行代表一个记录,每一列代表一个属性。
设计表:创建前考虑如下特征:

  • 表中要包含数据类型
  • 表中列数,每一列中的数据类型
  • 那些列允许空值
  • 是否使用以及何时约束
  • 那些是主键,那些是外键

数据类型

Bigint(大整型8字节)
int:常用的整型(4字节)
smallint:小整型2字节
tinyint :微整型(1字节)
Bit:位类型,1字节,只能存储0和1
decimal(3,2):总位数为3,小数位数为2
Datetime:长度为8字节,存储日期范围为1753.1.1-9999.12.31
smalldatatime:1900.1.10-2079.12.31
char:定义形式Char(n)n表示所有字符所占的空间取值1-8000,若输入小于n系统补空格,若输入大于n自动截断。
varchar:定义形式varchar(n),长度可变,节省空间
二进制字符串 Binary(n)常用于存储图像数据。varbinary(n)
image:存储照片或者图画。

创建表

借助工具点击

  • 点击数据库里面的表–>点击新建–>在弹出窗口输入各种参数

使用语句创建表

--切换数据库的语法   use 数据库名字
use DB5
--创建学生表(学号、姓名、年龄、性别)
create table 学生表
(
学号 varchar(15) not null,
姓名 char(10) not null,
年龄 int null,
性别 char(5)
)

修改表

创建表之后,可以更改最初创建的选项:列和约束。

*添加列

  • alter table 表名
  • add +属性+数据类型[长度][NULL |NOT NULL]
--给student表添加sno属性
alter table student
add sno varchar(15) not null

修改数据类型`

  • alter table 表名
  • alter column +属性+数据类型
--修改name的数据类型为varchar
alter table student
alter column name varcher(10)

删除列

  • alter table 表名
  • drop +column+属性名
--删除age
alter table student
drop column age

修改列名

  • exec sp_rename ‘表名字.列名字’,‘新列名字’
  • exec sp_rename ‘原表名’,‘新表名’
--修改列名  name-->sname
exec sp_rename 'student.name','sname'
--修改表名
exec sp_rename  'student','stu'

创建和删除约束

主键约束(PRIMARY KEY):唯一、不能为空、不能重复
外键约束(FOREING KEYI):用于加强两表的联系
唯一约束(unique):指定一个或者多个列的值具有唯一性,可以为空
检查约束(check):设置检查条件,限制输入值
默认约束(default):没有提供输入值时,自动添加值
创建约束

  • alter table 表名
  • add constraint 约束名 约束类型 具体的约束说明
--五种约束创建方式练习
--对我们表中的学号添加主键约束
alter table 学生表
add constraint PK_学号 primary key (学号)
--姓名添加唯一约束unique
alter table 学生表
add constraint un_姓名 unique (姓名)
--给年龄添加检查约束
alter table 学生表
add constraint ck_年龄 check (年龄>18)
--给性别添加默认约束为男
alter table 学生表
add constraint df_性别 default '男' for 性别
--年龄大于18小于25
alter table 员工信息表
add constraint ck_年龄 check (年龄>18 and 年龄<25)
--给成绩表的学号建立一个外键约束
--引用学生表中的学号(加强学生表和成绩表之间的联系)
alter table 成绩表
add constraint fk_学号 foreign key (学号)
references 学生表(学号) 
--外键约束的前提:两个列中的数据类型必须保持一致,
--引用的列必需为主键约束或者唯一约束,
--两个表的列名尽量保持一致

外键约束的前提:两个列中的数据类型必须保持一致,
–引用的列必需为主键约束或者唯一约束,
–两个表的列名尽量保持一致

删除约束:

  • alter table 表名
  • drop constraint 约束名
--删除默认约束
alter table 学生表
drop constraint df_性别

--删除成绩表的外键约束
alter table 成绩表
drop constraint fk_学号

--删除主键约束(先要删除外键约束)
alter table 学生表
drop constraint pk_学号

在创建表的同时添加约束,参照下图列子
在这里插入图片描述
代码实现:

use tsg1
create table ts
(
书号 char(20) primary key,
书名 char(20),
出版社 char(20),
类别 char(20),
作者 char(20),
出版时间 datetime,
价格 int check (价格>0)
)

create table dz
(
编号 char(20) primary key,
姓名 char(20),
单位 char(20) default '千锋教育',
性别 char(20) check (性别='男' or 性别='女'),
电话 char(20) unique
)

create table jy
(
书号 char(20) foreign key references ts(书号),
编号 char(20) foreign key references dz(编号),
借阅日期 datetime,
还书日期 datetime,
还书标识 char(2)
primary key (书号,编号)--联合主键声明方式,一般写在最后

)

联合主键,把两个列看作一个整体,把这个整体当作主键看待

删除表

语法:drop table 表名

drop table stu
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLSever创建表和约束 的相关文章

  • MySQL解释更新

    作为我大学复习的一部分 我试图回答以下问题 至少在表的一个属性上创建索引 employees 数据库 您可以在其中使用 MySQL EXPLAIN 工具 清楚地显示好处 在条款或检索方面 和负面 在 更新条款 创建相关索引的信息 对于第一部
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • oracle lag 函数与 group by

    我有一个查询忽略从前一个值增加的值 例如 采用下表 col1 col2 col3 5 1 A 4 2 A 6 3 A 9 4 B 8 5 B 10 6 B 现在进行以下查询 select col1 from select col1 lag
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • If Else 条件的 SQLite 语法

    我正在使用 SQLite 数据库 我的表有一个名为 密码 的文本列 早些时候 为了检索我用来执行简单操作的值select from myTable询问 但现在的要求是 如果Password值不是NULL那么我需要将其显示为 是 或 否 它是
  • 如何将此本机 SQL 查询转换为 HQL

    所以我有这个很长的复杂的 Native SQLQuery string hql SELECT FROM SELECT a rownum r FROM select f2 filmid f2 realisateurid f2 titre f2
  • 选择两列中两个日期之间的记录

    如何选择两列中两个日期之间的记录 Select From MyTable Where 2009 09 25 is between ColumnDateFrom to ColumnDateTo 我有一个日期 2009 09 25 我喜欢选择
  • jDBI中如何进行内查询?

    我怎样才能在 jDBI 中执行这样的事情 SqlQuery select id from foo where name in
  • 从 $i 获取值,顺序被打乱

    for i 0 i lt count name i some output ommited td td
  • SQLite 中的累积求和值

    我正在尝试在 SQLite 中执行值的累积和 我最初只需要对一列求和并获得代码 SELECT t MyColumn SELECT Sum r KeyColumn1 FROM MyTable as r WHERE r Date lt t Da
  • Capistrano 部署擦除数据库?

    我已成功使用 Capistrano 将我的应用程序部署到生产环境 但我不明白如何处理我的数据库 我正在使用颠覆和乘客 当我运行 cap 部署时 新部署会重新启动一切 它会清除添加到数据库中的数据 显然 必须有一个解决方案 但我很惊讶没有在网
  • 从两个表中搜索然后删除

    我有两个包含成员数据的表 与 member id 列链接 我需要搜索所有记录email列以 pl 结尾 然后 我需要为此删除两个表中的所有记录 基于 member id 是否可以通过一条 SQL 语句完成此操作 SELECT member
  • 静态时序数据的数据库解决方案

    我们拥有一个庞大且不断增长的实验数据集 该数据集取自约 30 000 名受试者 对于每个主题 都有多个数据记录 在每个记录中 收集了多个生理数据时间序列 每个时间序列约 90 秒长 并以 250Hz 采样 我应该注意到 时间序列的任何给定实
  • SQL Server 之间

    我有一个表 其中有年 月和一些数字列 Year Month Total 2011 10 100 2011 11 150 2011 12 100 2012 01 50 2012 02 200 现在 我想要SELECT2011 年 11 月至
  • sql 查询的权限被拒绝

    我正在尝试通过经典的 asp 记录集执行以下查询 SQL Select P Name as P Name P Description as P Description from L PagePermission inner join A P
  • 插入后触发更新表列?

    在同一个表中添加任何记录后 我需要更新表中的列 这是我的sql代码 CREATE TRIGGER dbo EmployeeInsert ON dbo APP Employees AFTER INSERT AS BEGIN SET NOCOU
  • SQL 用新值替换旧值

    我有一个名为tbl Products 其中有一列名为articlenumber并且充满了像这样的数字s401 s402 etc 我生成了一个包含新商品编号的列表 它将替换旧的商品编号 s401 I00010 s402 I00020 s403
  • 如何在数据库中找到实际的联系表7结构?

    我想找到我所有表单的实际代码 有很多 例如 cf7 代码如下所示
  • CAP 定理 - 可用性和分区容错性

    当我尝试理解CAP中的 可用性 A 和 分区容错性 P 时 我发现很难理解各种文章的解释 我感觉A和P可以在一起 我知道事实并非如此 这就是为什么我无法理解 简单解释一下 A和P是什么以及它们之间的区别 一致性意味着整个集群中的数据是相同的

随机推荐

  • 从零到熟练编写LaTex数学公式,这两篇就够了

    第一篇 LaTex公式编辑方法 快速手敲一遍 熟悉常用操作 第二篇 CSDN官方参考文档 有不清楚的 随手查阅 在线公式编辑 实在打不出 就在线编辑吧
  • R语言系统教程(一):向量及其相关操作

    R语言系统教程 一 向量及其相关操作 前言 1 1 向量 Vector 赋值 1 10 4 5 6 3 1 6 4 21 7 运算 常用函数 1 2 Generate常用向量 Vector 等差数列 等间隔函数 重复函数 1 3 逻辑向量
  • coco 输出格式,MPII 输出格式,标注

    pose 1 数据集 coco 输出格式 MPII 输出格式 代码 详解 1 2 blobFromImage函数 1 数据集 BODY25 COCO MPI coco 输出格式 鼻子 0 颈部 1 右肩 2 右肘 3 右手腕 4 左肩 5
  • 阿里无影云电脑 试用评测

    总有些一些项目需要在家里和公司两头做 不管是用 svn git 云盘同步 还是U盘拷贝都是很麻烦的 背笔记本更累 以前一直想买个挂机宝 但那玩意的配置实在是低 又想说买个云电脑 玩游戏的那种 但价格贵的离谱 一直用vps将就 那性能大家都知
  • Java Collections.list()方法具有什么功能呢?

    转自 Java Collections list 方法具有什么功能呢 下文笔者讲述Collections list 方法的功能简介说明 如下所示 Collections list 方法的功能 将参数中的值转换为一个list对象 Collec
  • 主成分分析(PCA)方法原理介绍

    原文链接 http blog codinglabs org articles pca tutorial html
  • ElasticSearch 设置(一)发现和集群形成

    文章目录 发现和集群形成 发现 种子节点提供者 基于配置的种子主机提供者 基于文件的种子主机提供者 基于法定人数的选举 主节点的选举 投票配置 偶数个符合主节点的节点 设置初始投票配置 引导一个集群 选择集群名称 发布集群状态 集群故障检测
  • 分库分表ShardingSphere<三> _ 分布式事务

    目录 一 分布式事务 1 LOCAL事务 2 XA事务 3 BASE事务 柔性事务 二 示例 1 依赖jar包 2 配置XA事务 3 使用XA事务 三 参考资料 一 分布式事务 ShardingSphere提供三种事务类型 LOCAL 默认
  • MySQL之DML操作

    MySQL之DML操作 1 什么是DML操作 2 插入记录 insert 3 更新记录 update 4 删除记录 delete 1 什么是DML操作 DML是指数据操作语言 英文全称是Data Manipulation Language
  • 最难以理解的排序算法 - 堆排序(超详解)

    堆排序基本介绍 堆排序是利用堆这种数据结构而设计的一种排序算法 堆排序是一种选择排序 它的最坏 最好 平均时间复杂度均为O nlogn 它也是不稳定排序 要理解堆排序 必须先要理解堆这种数据结构 堆是具有以下性质的完全二叉树 每个结点的值都
  • Java 数据结构之双向链表

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net lovoo article details 51771321 一 概述 1 什么时双向链表 链表中的每个节点即指向前面一个节点 也指向后面一个节点
  • 解决Mysql (1064) 错误: 1064 - You have an error in your SQL syntax;

    我在给数据库中的表添加数据的时候 写的语句是 INSERT INTO order VALUES 2 编号B 表结构 出现了错误 INSERT INTO order VALUES 2 编号B 1064 You have an error in
  • Spring AOP (二)

    下面介绍 AspectJ语法基础 一 切点表达式函数 AspectJ的切点表达式由关键字和操作参数组成 如execution greetTo 的切点表达式 execution为关键字 而 greetTo 为操作参数 两者联合起来表示目标类g
  • cv2.VideoCapture()

    一 语法 cap cv2 VideoCapture 0 说明 参数0表示默认为笔记本的内置第一个摄像头 如果需要读取已有的视频则参数改为视频所在路径路径 例如 cap cv2 VideoCapture video mp4 二 语法 cap
  • el-tab 切换时添加动画

    需求 在点击切换页面的时候添加动画 解决 用的是 Animate css 1 安装依赖 npm install animate css save 2 在main js里面引入 import animate css 3 在页面中使用 第一步
  • 断开的管道 java.io.IOException: Broken pipe

    此类报错首次接触 在阅览一些文章后 总结如下 pipe是管道的意思 管道里面是数据流 通常是从文件或网络套接字读取的数据 当该管道从另一端突然关闭时 会发生数据突然中断 即是broken 对于文件File来说 这可能是文件安装在已断开连接的
  • VM ware14在win10系统出现虚拟机繁忙/无法正常启动、关闭虚拟机

    VM版本 VM warestation14 windows版本 Windows10 Linux版本 CentOS 7 出现的一些问题 1 无法正常关闭虚拟机 关机界面最后的单词显示为 halting 并一直呈该状态 2 强制关闭虚拟机电源后
  • 【C语言进阶】重新认识字符型变量

    引例 首先我们看一个简单的例子 include
  • 再谈递归——直接法 vs 递归法

    直接法就是有一个直接的思路 算法来解决问题 什么样的数据结构 第一步干什么 然后干什么 最后干什么 递归法的感觉是 好像也没想出什么具体的算法 莫名其妙的就把题解了 解完也没什么深刻的印象怎么解的 因为递归就是base case 递推 而b
  • SQLSever创建表和约束

    表的基本概念 概念 由数据按一定的顺序和格式构成的数据集合 是数据库的主要对象 每一行代表一个记录 每一列代表一个属性 设计表 创建前考虑如下特征 表中要包含数据类型 表中列数 每一列中的数据类型 那些列允许空值 是否使用以及何时约束 那些