SQLServer脚本建库表

2023-02-20 00:00:00 创建 数据库 删除 记录 添加

建库

什么是系统数据库

master : 主数据库,创建数据库时 需要选中它   如何选择master数据库:

use master

model :模版数据库,创建的新数据库以其模板创建, msdb :保存SQLServer代理作业和执行计划的配置信息, tempdb :保存系统运行过程中产生的临时表、存储过程、全局或局部临时表及索引、表变量

系统数据库里面有哪些常见的表

1 sysdatabases 表:记录当前SQLServer里面的所有数据库

select * from sysdatabases
-- 查询 crm 数据库的保存位置
select filename from sysdatabases where name='crm'

2  sysobjects 表 :记录表关系、数据表、存储过程、视图

select *  from sysobjects
-- 查询 crm数据库的crm_contact表的记录
select * from sysobjects where name='crm_contact'

如何判断已经存在某张表

1 系统函数:exists 表示是否存在,如果存在则true,不存在false2 if语句:         

-- 格式:
-- if (条件)  
--     语句1  
-- else
--     语句2

-- 判断是否存在crm_contact数据表
if exists(select * from sysobjects where name='crm_contact')
  print 'crm_contact表已经存在'   print 打印输出
else
  print '该表不存在,可以创建'

如何判断已经存在某个数据库

if exists(select * from sysdatabases where name='crm ')
print '该数据库已有'
else
print '该库未创建'

如何创建数据库

简单格式:create database 数据库名称 参数格式:

create database 数据库名称 on (      name = 逻辑名称1,      filename = 物理路径名称      size = 建库的初始大小(单位:m)      filegrowth= 超过初始大小后的增长大小(单位:m) ) log on (      name = 逻辑名称2,      filename = 物理路径名称      size = 建库的初始大小(单位:m)      filegrowth= 超过初始大小后的增长大小(单位:m) )

注意: SQLServer的数据库文件分为:数据文件 与 日志文件 两种 数据文件后缀名:.mdf(主数据文件)、.ndf(次数据文件), 记录数据表的所有内容 日志文件后缀名:.ldf,记录操作员对该库的各种增删改查的操作

例如:

使用完整版建库语法,创建SchoolDatabase数据库,数据库文件位于D:\SDB.mdf 和 D:\SDB.ldf,初始大小10m,每次增长10m

create database SchoolDatabase
on
(
  name=sdb_mdf,
filename='D:\SDB.mdf',   主数据文件
size=10,
filegrowth=10
)
log on
(
name=sdb_ldf,
filename='D:\SDB.ldf', 日志文件
size=10,
filegrowth=10
)

如何删除数据库

格式:drop database 数据库名称 例如:删除已经创建的SchoolDatabase数据库

use master
go  
if exists(select * from sysdatabases where name='SchoolDatabase')
drop database SchoolDatabase
go
Create database SchoolDatabase  
go

注意:

创建与删除数据库都需要使用master数据库,否则没有相应的权限

go是批处理脚本中要使用的执行语句

创建数据表

格式: create table 表名 (   字段名  数据类型  约束   )

注意:当数据库表很多的时候,要先创建 主表 , 再创建 从表 如:创建 学生表(主表)、 成绩表(从表)、 科目表(主表)

use SchoolDatabase   数据表将创建到Student数据库,所以使用use先调用Studentgo  

如:创建学生表

if exists(select * from sysobjects where name='student')
 drop table student
go

create table student
(
  s_id char(5) primary key,               -- 学号 :如:ST001
  s_name nvarchar(10) not null,           -- 姓名
  s_icn char(18) unique not null ,        -- 身份证
  s_sex nchar(1),                         -- 性别
  s_class nvarchar(5) not null,           -- 班级
  s_regDate datetime default(getdate()),  -- 入学日期
  s_pwd varchar(50)                       -- 密码
)
go

解释: char(5) : 定长的字符串,不管输入多少个字符,其始终保持5个字符的长度。一个中文占两个字符 nchar(1) :定长的字符串,一个中文占一个字符 nvarchar(10) : 变长字符串,每个中文或字母占一个字符。可以保留10个中文字符 varchar(10) :变长字符串, 每个中文占两个字符。可以保留5个中文字符 datetime :日期与时间类型 int : 整数 decimal : 小数 primary key : 主键 not null :非空 unique : check :检查 foreign key :外键

创建课程表

if exists(select * from sysobjects where name='course')
 drop table course
go

create table Course
(
  c_id int identity(1,1) primary key,   -- 课程ID
  c_name nvarchar(50) not null         -- 课程名称
)
go

注意:          整数类型可以使用标识列自增 identity(1,1) ,从1开始每次增涨1个的自动编号

创建成绩表

if exists(select * from sysobjects where name='score')
drop table score
go
create table Score
(
    s_id char(5),                         -- 学号
 c_id  int,                            -- 课程号
 sc_score int check (sc_score>= and sc_score<=100),  -- 分数
 primary key(s_id,c_id),               -- 复合主键
 foreign key(s_id) references student, -- 外键 :foreign key , 引用 :references
 foreign key(c_id) references course   -- 外键
)
go

表数据的基本操作

1 添加

格式:

      insert into 表(字段1,字段2,...) values(值1,值2,...)         insert into 表 values(值1,值2,...)

注意:

     自增标识列不需要添加      有默认值的列可以不添加

给学生表,课程表,成绩表添加测试数据

-- 添加学生记录完整字段
insert into student values('ST001','张三','547896325415874589','男','一班','2021-12-6','123')
-- 添加学生记录部分字段
insert into student(s_id,s_name,s_icn,s_class)  values('ST002','李四','896547856321452635','二班')
-- 添加课程记录 含有自增标识列的字段,不需要添加c_id
insert into course values('语文')
insert into course values('数学')
-- 添加成绩记录 向从表添加数据,需要关联主表的值
insert into score values('ST001',1,60)
insert into score values('ST001',2,70)

2 编辑

格式:update 表 set 字段1=值1, 字段2=值2,  ..... where 主键=主键值

-- 修改张三的性别
update student set s_sex='女' where s_id='ST001'
-- 修改李四的空值记录
update student set s_sex='男', s_regDate='2016-9-10', s_pwd='123'  where s_id='ST002'
-- 修改李四的语文课成绩为85
update score set sc_score = 85  where s_id='ST002' and c_id=1  -- 复合主键都要写入

3 删除

语法:delete from 表 where  主键=主键值

-- 删除所有的学生成绩记录
delete from score
-- 删除张三的记录
delete from student where s_id='ST001'

注意:         删除的顺序:先删除从表再删除主表 区别:         删除表:drop table 表名

相关文章