IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> sql server系列_01表和约束 -> 正文阅读

[大数据]sql server系列_01表和约束

一、通过sql命令建表和主外键约束

	create table dept
	(	
		dept_id int primary key,
		dept_name nvarchar(100) not null,
		dept_address nvarchar(100)
	)
	create table tmp
	( --不能写成{
		emp_id int constraint pk_id_haha primary key,
		-- 可以在定义主键的同时指定主键的名字,任何一个约束都有一个名字,不指定的话会有一个默认的名字
		--C语言是先写类型再写名字,这里刚好相反,因为数据库不是源自于C语言
		emp_name nvarchar(20) not null,
		-- 关于nvarchar类型:n表示国际化的编码,var表示的是变量,char表示字符类型
		-- 整体表示:可以支持汉字的,字符长度是随着输入的字符长度变化的类型。
		-- 后面的20表示字符长度最大为20个。
		-- 如果存储的类型是汉字,就必须加上n,否则可能会出问题
		-- 不允许为空,因此写not null
		emp_sex nchar(1),
		-- 由于性别只有男和女,因此只需要1个字符
		-- 同时由于是汉字,因此前面加上n
		dept_id int constraint fk_dept_id_heihei foreign key references dept(dept_id),
		-- 注:在SQL Server里面逗号写不写都可以,但是在oracle里面最后不能写逗号,否则报错
    )

【1】关于主键与类型写法

  • 可以在定义主键的同时指定主键的名字,任何一个约束都有一个名字,不指定的话会有一个默认的名字
  • C语言是先写类型再写名字,这里刚好相反,因为数据库不是源自于C语言

【2】关于nvarchar(20) not null

  • n表示国际化的编码,var表示的是变量,char表示字符类型
  • 整体表示:可以支持汉字的,字符长度是随着输入的字符长度变化的类型。
  • 后面的20表示字符长度最大为20个。
  • 如果存储的类型是汉字,就必须加上n,否则可能会出问题
  • 如果不允许为空,则写not null

【3】关于nchar(1)

  • 由于性别只有男和女,因此只需要1个字符
  • 同时由于是汉字,因此前面加上n

【4】关于最后一个变量后面是否可以加逗号:

  • 注:在SQL Server里面逗号写不写都可以,但是在oracle里面最后不能写逗号,否则报错

在这里插入图片描述
在这里插入图片描述
删除banji表

drop table banji

二、详细阐述主外键约束的作用

什么是约束:
【1】定义:对一个表中的属性操作的限制叫做约束
【2】分类:

  • 主键约束:不允许重复元素,避免了数据的冗余
  • 外键约束:通过外键约束,从语法上面保证了本事物所关联的其他事物一定是存在的。
  • 事物和事物之间的关系是通过外键来体现的

三、check约束及其作用

check约束:保证事物的取值在合法的范围之内。

	create table student
	(
		stu_id int primary key,
		stu_sal int check (stu_sal>1000 and stu_sal<8000)
	)

在这里插入图片描述

向student表添加数据:

	insert into student values(1,500)

在这里插入图片描述

四、default约束及其作用

【1】default

default约束:保证事物的属性一定会有一个值。

	create table student1
	(
		stu_id int primary key,
		stu_sal int check (stu_sal>=1000 and stu_sal<=8000),
		stu_sex nchar(1) default('男')
		-- ()括号可以省略,并且在数据库当中,字符串必须使用''括起来的
	)

插入一条数据,但是没有对性别赋值,由于default的作用,因此会自动赋值为男

	insert into student1(stu_id,stu_sal) values(1,5000)

在这里插入图片描述
数据库里面的单引号和双引号的区别:

  • 单引号:用来标识字符串
  • 双引号:用来模拟一个对象的名字,比如表,约束等的名字
  • 如果为某一个事物起名字,则使用双引号,表示字符串则使用单引号
	insert into student1(stu_id,stu_sal) values(1,5000)

	insert into student1 values (2,6000,'女')

	insert into student1 values (3,6000) # 报错,因为不指定则默认是向所有的列插入数据

在这里插入图片描述

【1】null与default的区别

【1】相同点:都允许用户不赋值
【2】不同点:

  • null修饰的字段如果用户不赋值,则默认为NULL
  • default修饰的字段如果用户不赋值则默认为default指定的那个值

【3】null表示空,与0不同

五、唯一约束及其作用

唯一约束:保证了事物属性的取值不允许重复,但允许为空值

		create table student2
	(
		stu_id int primary key,
		stu_sal int check (stu_sal>=1000 and stu_sal<=8000),
		stu_sex nchar(1) default('男'),
		stu_name nvarchar(200) unique --表示姓名是唯一值,不能重复
	)

	insert into student2 values (1,6000,'女','张三')
	insert into student2 values (2,6000,'女','张三')

在这里插入图片描述
主键和唯一约束的区别:
【1】主键不能有空值,唯一键可以有空值,但只能有唯一一个空值

在这里插入图片描述
unique和not null可以一起使用,这样就保证了唯一且不为空值

【1】not null

not null

【1】表示非空,则必须为属性赋值

【2】如果一个字段没有写not null也没有写null,则默认该属性能够为空,不会报错

【3】如果没有写not null,也没有为该字段赋值,则该字段默认值为NULL
在这里插入图片描述

【2】identity

关于identity:
identity表示该字段的值会自动更新,不需要我们维护,通常情况下我们不可以直接给identity修饰的字符赋值,否则编译时会报错

create table student2
(
	sid int primary key identity(20,5),
	sname nchar(8) not null,
	ssex nchar(1)
)
insert into student2(sname,ssex) values ('张三','男');
insert into student2 values ('李四','女');--可以省略列名
insert into student2 values ('王五','女');

在这里插入图片描述

六、表,约束和关系

  1. 表和约束的区别:

【1】数据库是通过表来解决事物的存储问题

【2】数据库通过约束来解决事物取值的有效性和合法性问题

【3】建表的过程就是指定事物属性及其事物属性各种约束的过程

  1. 什么是关系

【1】定义:表与表之间的联系

【2】实现方式:通过设置不同形式的外键来体现表和表之间的不同关系

  1. 分类

【1】一对一

既可以把表A的主键当成表B的外键
也可以把表B的主键当成表A的外键

【2】一对多

把表A的主键充当表B的外键(在多的一方添加外键)

【3】多对多

一对一或者一对多可以在某一张表上面添加外键的方式来实现,而多对多则必须通过一张表来实现。即多对多必须通过C表来体现A表和B表的关系。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
创建上面图中显示的三张表:

	create table banji
	(
		banji_id int primary key,
		banji_num int not null,
		banji_name nvarchar(100)
	)

	create table jiaoshi
	(
		jiaoshi_id int primary key,
		jiaoshi_name nvarchar(100)
	)

	--第三张表 用来模拟班级和教师的关系
	create table jiaoshi_banji_mapping
	(
		-- 创建复合主键
		banji_id int constraint fk_banji_id foreign key references banji(banji_id),
		jiaoshi_id int  foreign key references jiaoshi(jiaoshi_id),
		kecheng nvarchar(20),
		constraint pk_banji_id_jiaoshi_id primary key (banji_id,jiaoshi_id)
	)	

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-09 12:46:25  更:2022-05-09 12:47:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:19:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码