数据库,培养计划中学习过,自考中学习过,软考中学习过,项目中用过。这次的实践课,上手一操作,图形化操作比较熟练,sql语句来操作还是有些不熟练哒,不过没关系,知识是需要反复的,技能也是需要反复操练的。这次实践课是一次操练的机会。三道数据库的题,新建库、表和索引;插入数据;修改表结构;查询特定数据。
知识网是通过找联系把知识联系起来的。我把今天的理解与之前的两篇文章联系一下:
新建库、表和索引,修改表结构属于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)
这次在完成实践考试的过程中,真的体会到了,自己看代码看半天,也找不到问题在哪儿,转移一下注意力,请同学过来看看,伸个懒腰之后,突然就悟了!通了!所以我们遇到问题卡着的时候不要放弃,只要是问题,总有解决的办法。越是摸不着头脑的错误,出错的原因越是简单。