自考实践课——数据库


        数据库,培养计划中学习过,自考中学习过,软考中学习过,项目中用过。这次的实践课,上手一操作,图形化操作比较熟练,sql语句来操作还是有些不熟练哒,不过没关系,知识是需要反复的,技能也是需要反复操练的。这次实践课是一次操练的机会。三道数据库的题,新建库、表和索引;插入数据;修改表结构;查询特定数据。

        知识网是通过找联系把知识联系起来的。我把今天的理解与之前的两篇文章联系一下:

SQL DML-数据查询

SQl DDL-数据库的创建

        新建库、表和索引,修改表结构属于DDL,插入数据、查询特定数据,属于DML。

【旧知识】

--创建名称为“某某考生实践考试”的数据库
create database  某某考生实践考试   

--创建表
use  某某考生实践考试
create table 考生基本信息
(
准考证号 char(12),
姓名 char(8) not null,
年龄 smallint,
性别 char(2),
地区 char(10),
工作单位 char(20),
联系电话 char(12),
电子邮件地址 char(20),
primary key (准考证号)
)

select * from Employees where City='London'

        其中最最熟悉,最先接触的就是查询语句。

【新东西】

 

--修改“考生基本信息”的“工作学习单位”列名为“工作单位”,应用系统自带触发器sp_rename
exec sp_rename'考生基本信息.[工作学习单位]','工作单位'

--创建索引
create index 索引姓名 on 考生基本信息(姓名)

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

--插入个人信息真实数据
insert into 考生基本信息
values (123456789001,'李某某',24,'女','某某地区','某某单位',01234567890,'[email protected]')
insert into 考核科目
values (02375,'运筹学基础'),(02628,'管理经济学'),(04735,'数据库系统原理')

        存在即更新,不存在即插入——这个是在网上查到东西,理了好久才理清楚的。当表的非自增长属性开的时候,才可以插入或删除记录。

--判断数据是否存在,存在即更新,不存在即插入
if exists(select CategoryID from dbo.Categories Where CategoryID='7'  )                        
    ---- 存在记录才更新
    Update dbo.Categories
    set CategoryName ='software',
        Description ='Delphi,Office',
        picture=''
    Where CategoryID=7
else
    --设置表Categories的主键为非自增长
    set identity_insert Categories on
    
    --不存在记录才插入
    Insert into dbo.Categories(CategoryID ,CategoryName ,Description,Picture)     
    Select 7,'software' ,'Delphi,Office',null
go
    
Insert into dbo.Categories(CategoryID ,CategoryName ,Description,Picture)     
    select 9,'Condiments','sauces,relishes',null union
    select 13,'books','SQL,Programs',null union
    select 15,'Dairy Products','Cheeses,Milks',null    
    
--设置表Categories的主键为自增长
    set identity_insert Categories off

        本来在网上搜索insert into ...select 与insert into ...values的区别。却发现它们是两回事。

insert into...values是插入语句,insert into...select是表复制语句。而表复制语句有两种,一种要求第二张表也就是目标表必须存在,一种要求第二张表不存在。

        详情请戳:SELECT INTO 和 INSERT INTO SELECT 两种表复制语句

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

--查找与表Categories有外键关联表Products的外键
select name  
from  sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id
where
f.parent_object_id=object_id('Products')

--删除与表Categories关联的外键
alter table Products drop constraint FK_Products_Categories

--删除查出的记录
delete from Categories where ( CategoryName ='Produce' or CategoryName ='Confections')

        数据库的约束这一项,对于我来说比较陌生。主键/外键约束。

--设置表Categories的主键不是自增长
set identity_insert Categories on

--删除主键约束
alter table categories drop constraint PK_Categories

--修改表结构
alter table Categories alter column CategoryID char(20) not null

--添加主键约束
alter table categories add constraint PK_Categories primary key( CategoryID)

【总结】

         这次在完成实践考试的过程中,真的体会到了,自己看代码看半天,也找不到问题在哪儿,转移一下注意力,请同学过来看看,伸个懒腰之后,突然就悟了!通了!所以我们遇到问题卡着的时候不要放弃,只要是问题,总有解决的办法。越是摸不着头脑的错误,出错的原因越是简单。



你可能感兴趣的:(数据库)