第五单元 表数据操作

1. SSMS 方式

在数据库中选择“编辑前200行”选项,然后就可以手动直接输入数据到表行中了。

手动输入的数据是确定的,而且只能一点点输入,遇到大量的数据的时候,操作会变得很繁重,而且它不满足大多数业务的需求,而且不利于更新。

  1. 在对象资源管理器中,右键点击你要打开的表,然后选择 “Edit Top 200 Rows(编辑前200行)” :

     

  2. 然后就可以将数据直接输入到表中了

     

2. T-SQL 方式

1. 添加数据

数字不需要加单引号(加了也不会报错,但不建议这么干),字符类型要加单引号(C#是双引号表示字符串)。

自增

create table Student
(
    Id int primary key identity,  -- 每添加一条数据,Id从1开始,每次自增1
    NickName nvarchar(15), -- unicode
    StudentNo char(11) , -- 学号
    Sex nchar(2),
    Account varchar(20),   -- 账号
    [Password] varchar(50) -- 密码 
);
create table Student
(
    Id int primary key identity(2,2),  -- 每添加一条数据,Id从2开始,每次自增2
    NickName nvarchar(15), -- unicode
    StudentNo char(11) , -- 学号
    Sex nchar(2),
    Account varchar(20),   -- 账号
    [Password] varchar(50) -- 密码 
);
insert into Student values 
('娜娜','2002','','user3','123456'),
('娜娜','2002','','user3','123456'),
('娜娜','2002','','user3','123456');
 

 

完整写法

-- insert into 表名(字段1,字段2,...) values(字段值1,字段值2,...)
insert into UserInfo(UserName,DeptId,Sex,Age) values('任我行码农场','6','未知','18')
insert into UserInfo(UserName,DeptId,Sex,Age,CreateTime) values('刘大侠','6','未知','18','2020-04-20')

 

  1. Id 如果 是自增,不需要手动的添加值

  2. 左边列的数目必须与右边列的数目要一样

  3. insert 添加数据时,括号中的字段必须要有,字段名不能随便写

 

当表中其他字段可以为空时,其他字段可以不用赋值,即

insert into UserInfo(UserName,Sex) values('家宝','男')

简写添加

insert into UserInfo values('谢大侠','7','保密','25','2012-02-25')

这种方式不需要指定字段名称,但是需要指定所有字段的值(除了自增的主键不需要),并且默认值也需要手动加上,不可省略。

使用简写的方式,如果我不想给所有字段都赋值,怎么办?(把不想赋值的字段赋null(前提是这个字段可以允许为空))

insert into UserInfo values('高大侠','7','保密',null,null)

批量添加

insert into UserInfo values
('张大侠','7','保密',null,null),
('胡大侠','7','男',null,null),
('翟大侠','6','男',68,'2020-02-10'),
('杨大侠','3','女',18,'2020-03-10') ;

2. 修改数据

-- 1.将密码修改为 666666
-- 修改的语法结构:update 表 set 要修改的字段1= 字段1值,字段2 = 字段2值
update UserInfo set Pwd='666666' -- 这样修改会把所有的数据都修改了

-- 现在将 编号为3,2 的用户姓名 分别修改为 张三,李四
 -- 语法结构: update 表 set 要修改的字段1= 字段1值,字段2 = 字段2值  where 条件字段=条件值
update UserInfo set UserName='张三'  where  Id=3
update UserInfo set UserName='李四'  where  Id=2

-- 将密码为 666666 并且姓张的同学的 年龄 修改为 25  
-- %:0-n 个任意字符
update UserInfo set Age=25 where Pwd='666666' and UserName like '张%'
-- 将性别为男并且姓黄的同学的角色 修改为 超级管理员
-- 0:男  1:女  2:未知  3:保密
update UserInfo set RoleId='853d469f-7906-4eb6-9034-e4e1314db331' where Sex=0 and UserName like '黄%'

 



-- 将 账号包含了 admin 并且 年龄大于30岁的同学的 密码修改为 1qaz2wsx  年龄 修改为 25岁
update UserInfo set Pwd='1qaz2wsx',Age=25 where Account like '%admin%' and Age>30

 

3. 删除数据

-- 删除用户表中的数据
delete from Userinfo


select * from UserInfo   -- 查询用户表
-- 删除张三,李四两位用户
Delete from UserInfo where UserName='张三' or UserName= '李四'
 -- in:在...里面
delete from UserInfo where UserName in('张三','李四')

-- 删除用户编号为:4,5,6 并且 性别 =3 的用户信息
delete from UserInfo where Id in('4','5','6') and Sex='3'
或者
delete from UserInfo where Id in(4,5,6) and Sex=3

 

什么情况下,一定需要加引号?

  • 字符串,一定需要加引号,还有日期,时间,中文

  • 数字:可加可不加, 建议不要加

4. 清空数据

-- 如何清空数据
delete from RoleInfo

-- 删除用户表中的数据
delete from Userinfo

select * from UserInfo   -- 查询用户表

 -- 清空数据
truncate table UserInfo ;

 

truncate 与 delete 的区别

  • truncate 是真正意义上的清空, 不能加任何查询条件,自增id 会重置

  • delete 只是删除数据,如果Id是自增,则自增种子不会从头开始。

5. 联级删除,联级更新

-- 角色表
 create table RoleInfo
 (
    Id uniqueidentifier primary key,
    RoleName varchar(50) not null ,
    CreateTime datetime not null  default getdate()
 );
 go
 -- 用户表
 create table UserInfo
 (
    Id int primary key identity,
    UserName varchar(50) not null,
    -- 联级删除:on delete cascade,联级更新
    RoleId uniqueidentifier not null 
    foreign key references RoleInfo(Id)  on delete cascade on update cascade,
    Account varchar(50) not null,
    Pwd varchar(50) not null ,
    Sex tinyint not null ,
    Age tinyint not null 
 );
 go

 

配套视频链接:【阶段二】 - SQLServer 基础(超级详细,口碑爆盆)_哔哩哔哩_bilibili

 

热门相关:青莲剑说   离婚合约:前妻的秘密   觅仙道   跟总裁假结婚的日子   青莲剑说