SQL高级 第二章 数据库的实现

来源:互联网 发布:深入浅出数据分析pdf 编辑:程序博客网 时间:2024/06/10 00:22
--建立数据库 Libraryuse masterif exists (select * from sysdatabases  where name='Library')drop database LibraryCreate database Libraryon primary --主文件的标志(name='Library_data',--逻辑名称filename='D:\\Library_data.mdf',--物理名称size=5mb,maxsize=50mb,filegrowth=15%)log on(name='Library_log',--逻辑名称filename='D:\\Library_log.ldf',--物理名称size=2mb,maxsize=50mb,filegrowth=1)--建立Book表use LibraryCREATE TABLE Book (  BID varchar(50) Not null,       --图书编号 BName varchar(50) ,             --图书名称Author varchar(50) ,            --作者PubComp varchar(50) ,           --出版社PubDate datetime,               --出版日期BCount int ,                    --现存数量Price money,                    --单位)--建立信息表use LibraryCREATE TABLE Reader(  RID varchar(50) Not null,        --读者编号RName varchar(50) Not null,      --读者姓名LendNum int,                     --已借书数量RAddress varchar(50)             --联系地址      )--建立图书借阅表use LibraryCREATE TABLE Borrow(  RID varchar(25) Not null,        --读者编号, 读者信息表的外键BID varchar(25) Not null,        --图书编号,图书信息表的外键LendDate datetime Not null,      --借阅日期,默认为当前日期WillDate datetime,               --归还日期,大于等于借阅日期 借阅期+1ReturnDate datetime,             --实际归还日期 默认值为空)--罚款记录表use Library CREATE TABLE Penalty(RID varchar(25) Not null,        --读者编号, 读者信息表的外键BID varchar(25) Not null,        --图书编号,图书信息表的外键PDate datetime Not null,         --罚款日期,默认为当前日期PType int Not null,              --罚款类型,1-延期 2-损坏 3-丢失Amount money ,)--为 Book表中的 BID 添加主键约束alter table Book add constraint PK_BID primary key(BID)--为 Book表中的 BID 添加检查约束alter table Bookadd constraint JC_BID check (BID like 'ISBN%')--为 Book表中的 PubDate 添加检查约束 小于当前日期alter table Bookadd constraint JJ_PubDate check (PubDate<getDate())--为 Book表中的 BCount 添加检查约束 alter table Bookadd constraint JH_BCount check (BCount>=1)--为 Book表中的 Price 添加检查约束 alter table Bookadd constraint Js_Price check(Price>0)
 
--为 Reader表中的 LendNum 添加检查约束alter table Readeradd constraint Jd_LendNum check(LendNum>0)--为 Reader表中的 RID 添加主键约束alter table Reader add constraint PP_RID primary key(RID)--为 Borrow表 中的RID 添加 复合主键alter table Borrowadd constraint nn_RID foreign key (RID) references Reader(RID)--为 Borrow表 中的BID 添加 复合主键alter table Borrowadd constraint mn_BID foreign key (BID) references Book(BID)--为 Borrow表 中的LendDate 添加 复合主键alter table Borrowadd constraint mm_LendDate default(getDate()) for LendDate--为 Borrow表 中的WillDate 添加默认约束alter table Borrow add constraint ll_WillDate default(DateADD(mm,1,getDate())) for WillDate--为 Borrow表 中的ReturnDate 添加检查约束alter table Borrow add constraint kq_willdate check(WillDate >=getDate())--为 Penalty 中的RID 复合主键 alter table Penalty add constraint fk_penaltyrid foreign key(RID) references Reader(RID)--为 Penalty 中的BID 复合主键 alter table Penalty add constraint fk_penaltybid foreign key(BID) references Book(BID)--为 Borrow表 中的PDate 添加默认约束alter table Penalty add constraint dk_pdate default(getDate()) for PDate --为 Borrow表 中的 PType 添加约束alter table Penalty add constraint ck_ptype check(PType LIKE '[1-3]')--为 Borrow表 中的 Amount 添加约束alter table Penalty add constraint ck_amount check (Amount >0)
 --*******************************1.创建一个名称为S2224的数据库*****************************     --创建一个名称为S2224的数据库   数据名称    路径(D:\)--先将数据库切换到masteruse masterif exists (select * from sysdatabases  where name='S2222')drop database S2222Create database S2222on primary   --主文件的标志(name='S2222_data',      --逻辑名称filename='D:\\S2222_data.mdf',  --物理名称size=2mb,   --初始大小        maxsize=50mb,  --最大容量filegrowth=15%   --增长率)log on(name='S2222_log',   --逻辑名称filename='D:\\S2222_log.ldf',  --物理名称size=2mb,maxsize=50mb,filegrowth=1) --**************************************************************************************************      --*******************************2.创建一个学生表Student**************************************                      --Student(Sid,Sname,Sage,Sremark,Cid)         use S2222         CREATE TABLE Student  --表名         (   Sid   int  NOT NULL, Sname varchar(10)NOT NULL, Sage int NOT NULL, Sremark varchar(50) NULL, Cid int NOT NULL         )           --*********************************3.创建一个年级表Grade(Cid,cname)************************           use S2222       go        CREATE TABLE Grade       (       GradeID int identity(1,1),       GRadename varchar(20)       )                   --**************4.代码方式给Student,Grade表中添加3条数据**************************************************************        INSERT INTO Student (Sid,Sname,Sage,Sremark,Cid) VALUES (1,'王1',20,'xxxxx',1)--向学生表中添加单行数据   INSERT INTO Student (Sid,Sname,Sage,Sremark,Cid) VALUES (2,'王2',20,'xxxxx',1)   INSERT INTO Student (Sid,Sname,Sage,Sremark,Cid) VALUES (3,'王3',20,'xxxxx',1)              INSERT INTO Grade (GRadename) SELECT ('S1') UNION       SELECT ('S2') UNION       SELECT ('Y2')               --方案三       INSERT INTO Grade (GRadename)        values('S11'),('S22'),('S333')                     --主键 和自增列是不是一回事儿?   主键未必是自增列,自增列也不一定是主键       --他们两者之间是没有联系         --他们两者没有必然关系        --主键用途:为了唯一标识表中的一条记录        --自增:程序员不用手动给该列赋值。           --********************************************************************************************************             --****************************************5.添加主键约束****************************************************************         -- 添加主键约束  (GradeID)          ALTER TABLE Student      ADD CONSTRAINT PK_Sid primary key (Sid)               ALTER TABLE Grade     ADD CONSTRAINT PK_GradeID primary key (GradeID)           --********************************************************************************************************                    --******************************** 6.添加外键约束***************************************************       /*常见的约束:          1:主键约束          2:唯一约束          3:检查约束          4:外键约束          5:默认约束          6:非空约束       */     --添加外键约束     ALTER TABLE Student     ADD CONSTRAINT FK_Grade_Student_Cid FOREIGN key (Cid)     REFERENCES Grade (GradeID)                    --*******************7.添加唯一约束,保证学生姓名唯一****************************           --添加唯一约束       alter table Student       add constraint UQ_IdentityCard unique (IdentityCard)                 --********************8.添加默认约束(备注默认值为:无备注)*******************           --添加默认约束      alter table Student       add constraint DF_Address default ('地址不详') for Address                 --**********************9.添加检查约束学生年龄>=18岁****************************       --检查约束       alter table Grade       add constraint JK_BornDate check (BornDate>='1980-1-1')        --10.删除数据库,删除表,删除约束                    drop table student --从表或者叫子表               --删除约束                --delete 表中的记录              --drop  结构                    --问题:请说出delete  truncate 和drop 区别?站在不同维度      -- 1.delete 和 truncate删除 表中的记录,表结构还在 ,  drop删除的是表结构              --2.delete 可以删除部分数据,可以跟where ,但是Truncate只能删除该表中所有记录,,不能和where连用             --3.Truncate 删除速度快,delete 快            --4.都可以删除数据            --5.delete占用资源大,Truncate占用资源小            --6 delete 删除后,编号在下一次insert时候继续+1  Truncate 从1开始            --7.delete删除的时候,需要记录日志,所以速度慢!Truncate不需要记录日志!!



0 0
原创粉丝点击