暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL基础之数据库表创建,数据库的分离、附加(SQL脚本版)

SQL数据库运维 2023-04-19
666

点击蓝色字关注“SQL数据库运维”,回复“SQL”获取2TB学习资源!

本篇文章总结的是在SQL Server 2012数据库环境下,使用SQL语句创建数据库与创建表,并分离数据库后在进行附加操作,内容比较基础,适合数据库初学者参考学习,希望对大家有所帮助!当然,基础知识掌握不牢的记得点赞收藏,以备不时之需!

下一篇文章将介绍在使用SQL Sever Management Studio管理工具时,图形界面下,进行数据库的创建、分离、附加、数据表的创建等操作。

一、通过SQL语句实现

1.1 创建数据库

创建数据库基础语法结构

    create database 数据库名称        --创建数据库
    on primary
    (
    name --数据库数据文件的逻辑名称
    filename
    --物理存放位置及物理文件名称(Student_info.mdf就是在磁盘上显示的名称)
    size --设置数据文件初始大小
    maxsize --主文件的最大增长值,unlimited是无限制
    filegrowth --设置主数据文件增长幅度
    )
    log on --定义事务日志文件
    (
    name --数据库日志文件的逻辑名称
    filename --物理存放位置及物理文件名称
    size= --设置事务日志文件初始大小
    maxsize --设置最大限制为
    filegrowth --设置事务日志增长幅度
    )

    举个例子,创建一个Student数据库,SQL脚本如下:

      create database Student--创建数据库
      on primary
      (
      name= Student,--数据库的逻辑名称
      filename='D:\学生信息管理系统\Student.mdf',--物理存放位置及物理文件名称(Student.mdf就是在磁盘上显示的名称)
      size=20,--初始大小20MB
      maxsize=300,--最大限制300MB
      filegrowth=5--主数据文件增长幅度为5MB
      )
      log on--定义事务日志文件
      (
      name =Student_log,--逻辑名称
      filename='D:\学生信息管理系统\Student_log.ldf',--物理存放位置及物理文件名称(Student_log.Ldf就是在磁盘上显示的名称)
      size=5,--初始大小为5MB
      maxsize=50,--最大限制为50MB
      filegrowth=1--事务日志增长幅度为1MB
      )

      1.2 查看、验证创建的数据库属性是否符合要求

      执行sp_helpdb系统存储过程查看Student数据库的信息。 

        sp_helpdb Student

        查询结果如下:

        1.3 修改数据库的属性

        假如,我们发现数据库的属性,创建的时候不小心写错了或者因为别的原因需要修改数据属性的时候应该怎么办呢?下边介绍给你怎么进行修改

        例如:

        将刚刚创建的数据库Student数据文件的初始值大小 改为50MB, 最大值 改为400MB, 数据增长量 改为5%, 日志文件初始值 改为30MB, 最大值 改为60MB, 数据增长量 为6%

          --修改数据文件属性
          ALTER DATABASE Student
          MODIFY FILE
          (
          NAME = Student,--要修改属性的数据库mdf文件名称
          SIZE = 50,--修改初始大小为30mb
          maxsize=400,--修改最大限制为300mb
          filegrowth=5%--修改事务日志增长幅度为5%
          )
          --修改事务日志文件属性
          ALTER DATABASE Student
          MODIFY FILE
          (
          NAME =Student_log,--要修改属性日志的ldf文件名称
          size=30,--修改初始大小为20mb
          maxsize=60,--修改最大限制为60mb
          filegrowth=6%--修改事务日志增长幅度为6%
          )

          修改后数据库属性信息查询

          1.4 数据库的分离与附加

          数据库分离是指将数据库文件从数据库服务器实例中分离出来,相当于关闭了数据库。数据库分离后,应用程序不能连接到该数据库,数据库文件可以被其它进程访问。通常分离数据库用于快速地将数据库迁移到另一个SQL Server实例。数据库分离后,还可以附加到SQL Server实例。

          一般默认情况下数据库在联机状态下我们不能对数据库文件进行任何复制删除等操作,如果将数据库分离的话就可以对数据文件进行复制、剪切、删除等操作了。一般想直接备份数据文件,就先分离数据库,之后把数据文件复制到别的地方,再把数据文件附加回去就可以了。备份数据库是将数据库中全部对象以特定格式导成为备份文件,至于格式全部是数据库引擎来使用,用户无需关心。导出数据库是将数据库中某些对象导出为其他格式的文件,一般都是行集的形式。

          数据库分离、附加SQL语法如下:
            --声明数据库引用
            use master;
            go
            --分离
            exec sp_detach_db @dbname=N'数据库名'
            --附加
            exec sp_attach_db @dbname=N'数据库名',@filename1=N'.mdf的文件路径',@filename2=N'.ldf的文件路径'

            值得注意的事,直接分离可能会报错,就像这样“无法分离 数据库“Student”,因为它当前正在使用。

            如果我们遇到这种情况,可以先这样进行操作

              --根据查询出的DBID,得到用户连接的spid
              SELECT * FROM sysprocesses WHERE dbid=DB_ID('Student')
              --然后杀掉它,这个是上边语句的查询结果,我的显示是四个进程
              KILL 81
              KILL 82
              KILL 84
              KILL 107

              实,分离不了数据库的根本原因是有用户连接操作,首先我们要终止用户连接,终止连接就必须要干掉进程

              再次执行分离数据库命令就OK了

                --声明数据库引用
                use master;
                go
                ----将数据库Student分离
                exec sys.sp_detach_db @dbname='Student'
                go

                分离之后在进行附加操作如下

                  --附加Student数据库
                  exec sp_attach_db @dbname='Student',@filename1='D:\学生信息管理系统\Student.mdf',@filename2='D:\学生信息管理系统\Student_log.ldf'

                  1.5 创建数据表

                  基本语法:

                    create table 表名(
                    属性名1 类型,
                    属性名2 类型,
                    属性名3 类型 --注意最后一条语句不用','
                      )

                    举例,在Student数据库下,创建三张数据表

                      use Student;
                      go
                      --创建Student表
                      create table Student(
                      Sno char(8) primary key not null, --学号,并设置为主键(primary key)和非空(not null)
                      Sname varchar(8) not null, --学生姓名
                      Sex char(2) default '男' not null, --性别,设置默认值(default)为'男'
                      Birth smalldatetime not null, --出生年月
                      Classno char(3) not null, --班级号
                      Entrance_date smalldatetime not null, --入学时间
                      Home_addr varchar(40) --家庭住址(可以为空)
                      )


                      --创建Course表
                      create table Course(
                      Cno char(3) primary key not null, --课程号
                      Cname varchar(20) not null, --课程名称
                      Toal_perior smallint, --总学时
                      Gredit tinyint check(Gredit>0 and Gredit<=6) --学分,这里要使用check约束
                      )


                      --创建sc表
                      create table Sc(
                      Sno char(8) not null, --学号
                      Cno char(3) not null, --课程号
                      primary key(sno,cno), --设置sno和cno的属性组为主键
                      foreign key(sno)references student(sno), --设置外键
                      foreign key(cno)references course(cno), --设置外键
                      Grade tinyint check( Grade>=0 and Grade<=100) --成绩
                      )

                      点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。


                      动动小手点击加关注呦☟☟☟

                      文章转载自SQL数据库运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                      评论