进行增删查改的前提需要在指定数据库中创建数据表,对这块不大理解的可以先看看前面几期文章:
创建数据库
创建数据表
use StudentManageDB
go
insert into Students (StudentName,Gender,Birthday,Age,StudentIdNo,PhoneNumber,StudentAddress,ClassId)
values('张三','女','2023-01-02',2,2023222222222,'012-1212121','北京朝阳区',1)
select * from Students
这段代码执行过程:
StudentManageDB
作为当前操作的数据库,大家可以改成自己创建的数据库名称。Students
表插入一名新学生的信息。可以换成自己的表的信息。Students
表并返回表中所有的学生信息。insert into Students (...) values(...)
这条命令用于在Students
表中插入一条新的记录。它指定了要插入数据的列,并为这些列提供了相应的值。具体来说,它向表中插入了一个名为“张三”的女性学生,出生日期为2023年1月02日,年龄为2岁,学生身份证号码为2023222222222,电话号码为012-1212121,住址为北京朝阳区,且分配到ClassID
为1的班级。
select * from Students
这是一个查询命令,用来从Students
表中检索所有的记录(行)和所有的字段(列)。*
代表所有列。此命令执行后会返回Students
表中的所有数据。就是看我们插入数据成功了没。
上面的select * from Students就是查询,不过我们可以选择查询:
use StudentManageDB
go
select StudentName,gender,Age from Students where age<>22
这段SQL代码用于从数据库中检索信息和指定当前操作的数据库:
select StudentName, gender, Age from Students where age<>22
这是一个查询命令,用于从Students
表中选取姓名(StudentName
)、性别(gender
)和年龄(Age
)这三个字段的值,但是有一个条件,即年龄(Age
)不等于22。<>
是SQL中的不等于操作符。这个查询将返回所有年龄不为22岁的学生的名字、性别和年龄信息。
注意:
select
语句经常与where
子句联合使用。select
用来指定从数据库表中检索哪些列的数据,而where
子句用来指定检索条件,以便对结果进行过滤,仅返回满足特定条件的行。这种结合使用可以使得查询结果更加精确,符合用户的特定需求。
例如,有一个名为Employees
的表,我们只想获取年龄大于30岁的员工的姓名和部门,SQL查询语句:
select EmployeeName, Department
from Employees
where Age > 30;
这里,select
语句后面紧跟着from
子句指定了要从哪个表中检索数据,where
子句则定义了过滤条件。
use StudentManageDB
这条命令告诉数据库管理系统后续的操作都将针对名为StudentManageDB
的数据库。这通常是为了确保操作在正确的数据库上执行。
这两个命令的执行顺序应该是先执行use StudentManageDB
来选定数据库,然后执行select
语句来检索数据。
use StudentManageDB
go
update Students set Gender ='男',Age=25 where StudentId=10000
select * from Students
这段代码是用于执行数据库操作的一系列SQL语句,更新特定学生的性别和年龄,同时查询并返回Students
表中所有学生的数据。
use StudentManageDB;
这条语句用于指定后续的数据库操作将在StudentManageDB
数据库上进行。use
语句用来选择或者切换当前的数据库上下文。
go
GO
是SQL Server Management Studio (SSMS) 中使用的一个批处理命令,它告诉SSMS执行前面的所有SQL语句。实际上,它是一个信号,告诉SSMS(数据库管理系统,就是我们的软件)到此为止是一个批次的结束。go
并不是SQL语言的一部分,它在SQL Server工具中用于分割SQL语句。
update Students set Gender ='男', Age=25 where StudentId=10000;
这条update
语句用于修改Students
表中的数据。它将性别Gender
字段更新为’男’,将年龄Age
字段更新为25,条件是StudentId
(学生ID)等于10000的学生。这意味着只有当记录的StudentId
字段的值为10000时,该记录的Gender
和Age
字段才会被更新。
select * from Students;
和上面一样,这是一个select
语句,用来从Students
表中检索所有的列(*
是一个通配符,代表所有列)的所有行的数据。执行这条语句后,会展示Students
表中所有学生的信息。
总结一下,修改的语法:
update <表名> set<列名=更新值>[where <更新条件>]
在了解这个只是之前,我们先了解一下外键的概念:
在SQL中,外键是一个字段(或字段的集合),它用来确保一个表中的数据引用另一个表中的数据,从而维护数据之间的引用完整性。外键对应另一张表中的主键,确保了所引用的数据的存在。
例如,假设我们有两个表:Students
和 Classes
。
Classes
表:
ClassID | ClassName |
---|---|
1 | Math |
2 | Science |
3 | Literature |
在这个例子中,ClassID
是 Classes
表的主键。
Students
表:
StudentID | StudentName | ClassID |
---|---|---|
101 | John Doe | 1 |
102 | Jane Smith | 2 |
103 | Emily Jones | 3 |
在 Students
表中,ClassID
是一个外键,因为它引用了 Classes
表中的主键 ClassID
。这样就确保了每个学生都被分配到了一个有效的班级。如果尝试插入一个引用不存在的 ClassID
的记录到 Students
表中,数据库将会抛出一个错误,因为这将违反外键约束。例如,如果尝试添加一个 ClassID
为 4 的学生(假设 Classes
表中没有 ClassID
为 4 的班级),这将会失败。
接下来是几种删除的方式:
在 SQL Server Management Studio (SSMS) 中,删除数据表中的数据主要有以下几种方式:
delete
语句:用于根据指定的条件删除表中的行。
例如:
delete from table_name where some_condition;
使用delete
时需小心,因为如果不指定条件(where
子句),它会删除表中的所有行。永远确保在delete
语句中使用正确的过滤条件,以避免意外删除额外的数据。
注意: 如果我们删除的数据被外键引用,那么再加新数据的时候标识列会继续增长,像这样:
这个表中,班级被外键引用,我们删除了机械184(第四行),新增了机械185,但是不会再有4了,自动就变成5了。
truncate table
语句:用于删除表中的所有行,但不删除表本身。
例如:
truncate table table_name;
truncate table
通常比delete
无条件语句更快,因为它不记录每行的删除动作。但是它是不可回滚的(在执行后不能恢复数据),并且会重置任何自增的身份列。此外,truncate
无法在有外键引用的表上使用。
drop table
语句:用于完全删除表及其数据。
例如:
drop table table_name;
使用drop table
语句将删除整个表,包括表结构和所有数据,操作是不可逆的。所以在使用之前要十分确定是否真的想要删除整个表。
在操作删除数据的时候,要注意以下几点:
where
子句:在使用delete
语句时,务必使用where
子句指定条件,避免删除不必要的数据。delete
操作,并在确认无误后提交事务。delete
操作可能会因违反外键约束而失败。delete
操作可能会影响数据库性能,应考虑在低峰时段进行操作,或使用批处理删除以减少对性能的影响。回滚:
回滚(Rollback)是数据库事务处理中的一个概念,指的是将数据库从某个状态恢复到之前的某个状态。在执行SQL语句,特别是修改数据的操作时(如insert
、update
、delete
),如果操作过程中发生错误,或者有意识地需要撤销操作所做的更改,可以用回滚来取消这次事务所做的所有操作。
在SQL中,回滚通常使用rollback
关键字来实现,它与begin transaction
和commit
关键字一起使用,来定义一个事务的边界。
例如:
begin taansaction; -- 开始事务
update Account set Balance = Balance - 100 where AccountId = 'A1'; -- 假设从账户A1扣除100
update Account set Balance = Balance + 100 where AccountId = 'A2'; -- 将100添加到账户A2
-- 假设某种检查失败,需要撤销前面的操作
rollback transaction; -- 回滚事务,撤销上面的两个update操作
-- 如果所有操作成功,可以提交事务
commit transaction; -- 提交事务,保存所有更改
使用rollback transation
后,所有在begin taansaction
之后和rollback
命令之前的更改都将被撤销,恢复到事务开始前的状态。而commit tranaaction
用于确认所有更改,将更改永久保存到数据库中。
在进行重要的批量更新操作时,使用事务是一个良好的实践,因为它提供了一种机制来保证操作的原子性:要么所有更改都被执行,要么所有更改都不被执行。