【SQL server】基础入门2——表

█ 数据类型

字符型的选择是一个重要的知识点:

对 char(n),nchar(n),varchar(n),nvarchar(n) 进行辨析 :

❶ 不带n的是ASCII编码(英文、字符、数字占1个字节汉字占2个字节),
  带n的是unicode编码(所有字符都占2个字节;即牺牲了存储空间而优化了兼容性);

不带var的是固定长度的,不足n补空格,超出则截断
带var的是可变长度的(自适应的),存储大小为实际长度,超出则截断

如何进行选择?

数据含有汉字,使用带n的unicode编码(考虑到兼容性);数据是字母、符号、数字的组合,使用不带n的ASCII编码(考虑到存储空间)

数据长度不定,使用带var的(可变当然要带var,原则上优先不可变);长度固定,使用不带var的(效率较高,且var需要多出一位类存储长度信息)

列个表 :

数据类型数据标识
整型int, bigint, smallint, tinyint, bit
精确数值型decimal, numeric
浮点型float, real
ASCII字符型char, varchar, text
unicode字符型nchar, nvarchar, ntext
图像型image
二进制型binary, varbinary
日期时间型date, time, datetime
特殊数据类型

 
 
 

█ 约束(constraint)

主键  右键→设置主键

非空  勾选"允许NULL值"

唯一  右键→索引/键→添加→常规(类型、列)→"唯一键"

默认  下方属性→直接添加默认值

检查  右键→CHECK约束→表达式

外键  右键→关系→常规(表和列范式)→设置主键表、外键表及其需要对应的列

 
 

█ 脚本命令的建表及约束

相关约束的脚本命令表达 :

主键    primary key

非空    not null

唯一    unique

默认    default()

检查    check()

外键    foreign key(列名) references 表名(列名)

 

demo :

use dbtest
go 

create table ClassInfo										-- ClassInfo表
(
	cId		int	primary key identity(1,1),					-- 主键,identity表示自动生成唯一标识,且(种子,步长)
	cName	nvarchar(10) not null							-- 非空约束
)

create table StudentInfo									-- StudentInfo表
(
	sId		int	primary key identity(1,1),					-- 主键自动 not null	,其余自动允许null			
	sName	nvarchar(10) not null,
	sPhone	char(11)				
	sGender	bit default(1),									-- 默认约束
	sGrade	tinyint check(sGrade>=1 and sGrade<=4),			-- 检查约束
	sEmail	varchar(20) not null unique,					-- 唯一约束
	cId		int not null ,									-- 外键约束之前先建立关系							
	foreign key(cId) references ClassInfo(cId)				-- 外键约束(注意格式)
)

 
 
 

█ 操作表的属性(列)

界面修改不必多言;直接看脚本命令 :

alter table StudentInfo
alter column Sname nvarchar(12)								-- 修改(注意:原本not nll的Sname现在允许NULL了) 

alter table StudentInfo
add sTeacher nvarchar(10) 									-- 添加属性(列)

alter table StudentInfo
drop column sPhone											-- 删除(注意:当该列存在约束时,无法drop掉,需要先删除约束条件)										

 
 
 

█ 操作表的约束

create table Score
(
	Sno		int,
	Cno		int,
	score	decimal(4,1),
	constraint pk_cs primary key(Sno,Cno)					-- 创建时设置约束,其实这句写在上面也一样,就是给约束命名而不使用默认名而已
)

alter table Score
add constraint uk_ss unique(Sno)							-- 修改时添加约束

alter table Score
drop constraint pk_cs										-- 修改时删除约束

 
 
 

█ 操作表的数据

 
简单查询select

select * from 表名

 

插入insert [into]…values…

-- 假设表UserInfo的列为:UserId, UserName, UserPwd
-- 其中UserId的唯一标识作用自动实现

insert into UserInfo(UserName, UserPwd)
values('Loli', '123456')							-- 最完整写法

insert UserInfo
values('DMX', '112358')								-- 为所有的列,按照默认顺序(对应)赋值

insert UserInfo(UserName)
values('cocoa')										-- 为某些列赋值,而不是所有列(未被赋值的列不能有非空约束)	

insert UserInfo										-- 批量插入数据(值得注意的是,数据库只受到了一次影响)
values('stranger1', '321aaa123'),('stranger2', '987654321')

 

修改(更新)(update…set…

-- ↑ 接上表

update UserInfo 
set UserPwd='5c4cafcf959b534f'						-- 为所有行的指定列进行修改

update UserInfo 
set UserPwd = '123456' where UserName = 'DMX'		-- 为指定行进行修改列(where筛选条件)

 

删除delete [from]…

-- ↑ 接上表

delete UserInfo 
where UserId>4										-- 唯一标示未重置

清空truncate table…)

truncate table 表名									-- 唯一标识重置;注意被清空的表不能被设置为外键

 
 
 

 
 
 

 

 

█ 知识点拾遗

① 设为主键后,可以由SQL Server自动帮我们维护这个唯一标识的值:
  设置为int型→下方列属性→表设计器→表示规范→"是表示" 置 “是”

外键约束极其重要。依据是关系的数量模式(1对1?1对多?多对多?)和 谁起决定作用

  ★☆★ demo : 学生(编号,姓名,班级编号),班级(编号,名称)

  思路 :班级与学生是一对多的关系,因此在学生关系()中进行外键约束

      学生关系中对班级编号的填写,依赖于班级关系中所拥有的编号取值,即后者起决定作用,因而班级关系为主键表学生关系为外键表

③ 精确数值型decimal和numeric,唯一的区别在于decimal不能用于带有identity关键字的列

  例如 decimal(4,1)表示共4位,其中小数1位;小数位数严格且优先的原则下,进行截断
 

 

 

 

 

 

 
 
 

 
 

  
> _ <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值