SQL 数据库分类 代码建库、代码修改属性 代码建表 代码修改数据表属性 代码为数据表插入信息 数据的修改与删除

数据库基础

  1. 系统数据库:master、model、tempdb、madb
  2. 数据库文件的组成:【数据文件可以放在不同的文件组里】
  • 主数据文件:*.mdf 主数据文件只能有一个
  • 次要数据文件:*.ndf
  • 日志文件:*.ldf 日志文件不属于任何文件组

数据库的拷贝

  1. 数据库分离和附加:右击——>任务——>分离【分离后数据库是与服务器分离,SQL界面的数据库就会消失,此时就可以剪切文件到U盘】 下次要用:又剪切到原文件夹,然后右击数据库——>附加——>选主数据文件所在文件夹。单机确定就会显示出来。

  2. 数据库的脱机与联机

    右击此数据库——>任务——>脱机。脱机后数据库还显示在SQL界面。

    【脱机后可完成数据库文件的剪切和复制】

    下次要用:重新剪切到原文件夹——>右击该脱机数据库——>任务——>联机。即可

    【不建议收缩数据库】

代码建库

create database XK--数据库名称
on primary--主文件组
(
name=XK_data,--主数据文件
filename='D:\project\XK_data.mdf',--主数据文件路径
size=10mb,--文件初始大小
maxsize=500mb,--文件增长最大容量限制
filegrowth=10mb--文件的增量
),
(
name=XK_data1,--辅数据文件
filename='D:\project\XK_data1.ndf',--辅数据文件路径
size=5mb,
maxsize=100mb,
filegrowth=1mb
),
filegroup client--新建的文件组
(
name=XK_data2,
filename='C:\project\XK_data2.ndf',
size=4mb,
maxsize=10mb,
filegrowth=1mb
)
log on--日志文件
(
name=XK_log,
filename='D:\project\XK_log.ldf',
size=5mb,
maxsize=unlimited,
filegrowth=1mb
),
(
name=XK_log1,
filename='D:\project\XK_log1.ldf',
size=5mb,
maxsize=unlimited,
filegrowth=10%
)
go



exec sp_detach_db 'XK'--分离XK数据库
exec sp_attach_db 'XK' , 'D:\project\XK_data.mdf'--附加XK数据库

exec sp_dboption  'XK' , 'read only' , 'false'--设置数据库只读为关闭
exec sp_dboption  'XK' , 'single user' , 'false'--设置数据库单用户访问(限制访问)为关闭
exec sp_dboption  'XK' , 'autoshrink' , 'false'--设置自动收缩为关闭
exec sp_dboption  'XK' , 'autoclose' , 'false'--设置自动关闭为关闭
exec sp_dboption  'XK' , 'auto create statistics' , 'true'--自动创建统计信息为开启
exec sp_dboption  'XK' , 'auto update statistics' , 'true'--自更新统计信息为开启

exec sp_renamedb 'XK' , 'XK1'--数据库重命名

alter database XK1 --修改数据库
modify name=XK  --修改数据库名称   modify是修改

drop database XK  --删除XK数据库


--------------------------------------------------------------------------------
alter database XK
add file   
(
name=XK_data3,
filename='C:\project\XK_data3.ndf',
size=5mb,
maxsize=unlimited,
filegrowth=1mb
) to filegroup client
----添加数据文件到client文件组

----------------------------------------------------------------------------------
alter database XK
add log file
(
name=XK_log2,
filename='c:\project\XK_log2.ldf',
size=10mb,
maxsize=20mb,
filegrowth=1mb
)
--添加日志文件


-------------------------------------------------------------------------------
alter database XK
remove file XK_log2
--删除文件  后+文件名

---------------------------------------------------
alter database XK
modify file
(
name=XK_data1,
size=6
)
------------修改辅数据文件初始大小

alter database XK
add filegroup mygroup
-----------添加文件组

alter database XK
remove filegroup mygroup
--------------删除文件组

alter database XK
modify filegroup client default
----------------修改client文件组为默认

alter database XK
modify filegroup client readonly
------------修改client文件组为只读

alter database XK
modify filegroup client readwrite
--------------修改client文件组为可写

alter database XK
modify filegroup [primary] default
--------------修改主文件组为默认时,要把主文件组文件名用中括号括起来

数据完整性

  1. 一致性+准确性=数据完整性

  2. 完整性包括:域完整性、实体完整性、引用完整性、自定义完整性

  3. 实体完整性 约束方法:唯一约束、主键约束、标识列 保证数据不重复、唯一

  4. 域完整性 约束方法:限制数据类型、检查约束、外键约束、默认值、非空约束

  5. 引用完整性 外键用的值必须是主键里出现过的值 约束方法:外键约束

    ​ 建表先主后从 删除信息先从后主

  6. 自定义完整性 触发器:检查信用值 约束方法:规则、存储过程、触发器

  7. 约束的目的:确保表中数据的完整性

    常用的约束类型:

    主键约束 要求主键列数据唯一,并且不允许为空

    唯一约束 要求该列唯一,允许为空,但只能出现一个空值

    检查约束 某列取值范围限制、格式限制、如有关年龄的约束

    默认约束 某列的默认值,如班级男生较多,默认性别为男

    外键约束 用于两表间建立关系时指定引用主表的那一刻

    非空约束

  8. 选择主键的原则:

    量少性:尽量选择单个键作为主键

    稳定性:尽量选择数值更新少的作为主键

  9. 删除信息时需要注意的地方:

    • 当主表中没有对应的纪录时,不能将记录添加到子表——成绩表中不能出现在学员信息表中不存在的学号
    • 不能更改主表中的值导致子表中的记录孤立——把学员信息表中的学号改变了,学员成绩表中的学号也应当随之改变。
    • 子表存在与主表对应的记录,不能从主表中删除该行——不能把有成绩的学员删除了。
    • 删除主表前,先删子表——先删除学员成绩表,后删除学员信息表。

SQL 数据库分类 代码建库、代码修改属性 代码建表 代码修改数据表属性 代码为数据表插入信息 数据的修改与删除_第1张图片

代码建表

  1. 代码建表,修改属性

    use XK		--打开数据库
    
    create table Employees			--创建数据表
    (
    编号 char(6) not null constraint pk_编号 primary key,			--not null 不为空     primary key 主键
    姓名 char(8) not null ,
    性别 bit not null constraint df_性别 default 1 constraint ck_性别 check(性别=0 or 性别=1),	--default 1 默认约束为1  check检查约束
    部门 varchar(16) null,
    电话 varchar(20) null,
    地址 varchar(50) null
    )
    go
    
    --也可以把约束写在最后面,比如上面三个约束还可以这样写:
    use XK
    create table Employees--创建数据表
    (
    编号 char(6) not null ,	--not null 不为空     primary key 主键
    姓名 char(8) not null ,
    性别 bit not null  ,	    --default 1 默认约束为1  check检查约束
    部门 varchar(16) null,
    电话 varchar(20) null,
    地址 varchar(50) null,
    constraint pk_编号 primary key(编号),
    constraint ck_性别 check(性别=0 or 性别=1)
    )--如果是两个键联合做主键只能用这种表名约束      默认约束不能通过这个方式建立
    go
    
    alter table Empolyees--修改表的默认约束
    add constraint df_性别 default 1 for 性别
    go
    
    
    
    create table Goods
    (
    商品编号 int not null identity(1,1),		--identity(1,1)标识列(1,1)
    进货员工编号 char(6) not null,
    constraint pk_商品号 primary key(商品编号),
    constraint fk_进货员工编号 foreign key(进货员工编号) references Empolyees(编号)
    --				              外键				   引用     其他表(列名) 
    )
    go
    
    
    drop table Employees--删除数据表
    drop table Goods
    
    --修改数据表代码
    alter table  Employees
    drop column 进货时间--删除列
    
    alter table   Employees
    add 部门 int not null--添加列
    
    alter table  Employees
    alter column 部门 varchar(16)--修改列的数据属性
    
    alter table  Employees
    add constraint df_进货时间 default getdate() for 进货时间--添加约束
    --					getdate() 是一个系统函数,系统时间
    
    alter table  Employees
    drop constraint df_进货时间--删除约束
    
    exec sp_help Employees--查看数据表结构
    
    exec sp_rename  Employees, Employees				--重命名数据表
    
    select * from  Employees--数据表数据信息查询
    
    
  2. 两列联合做主键:复合键

    --当一个字段无法确定唯一性的时候,抄需要其他字段来一起形成唯一性。就是说用来组成唯百一性的字段如果有多个就是联合主键
    --如
    --学生成绩(学号,课程号度,成绩)
    --那学号和课程号就可以做为联合主键.
    --因为学号和课程号决定了成绩.也就是说.你要知知道成绩..你就要知道学号道,知道学号,但还不能知-道某一科的成绩.还要知道课程号.
    --所以函数依赖关系是{学号,课程号}->{成绩}
    alter table tb
    add constraint PK_ID primary key(学号,课程号)
    go
    

    为所建的表添加信息

    1. 单行信息插入

      --单行记录添加
      insert into 表名(列名,列名,列名,····) values(列值,列值,列值,······)
      --
      insert into Employees(编号,姓名,性别,部门,电话,地址)
      values('1001','赵飞燕',0,'采购部','12343212343','北京市南京路')
      
      --字符和日期型数据都必须加引号,各个数据之间逗号分隔   不省略列名的话,数据要与列名一一对应
      
      insert into Employees values('1002','赵飞燕',default,'销售部','97653212343','运城市南京路')
      --省略列名时,数据录入要严格按列顺序输入   有几列就给几个值
      
      insert into Goods values ('1001','sdlfjasg')
      --当数据表有标识列时,标识列数据不需要输入,系统自动给
      
      delete from Goods where 商品编号=6--删除插入表的数据信息
      delete from Goods--清空Goods数据表的全部数据信息
      --删除已经插入的标识列信息时,例如删除商品编号为6的数据,再次插入信息此时商品编号为7
      --此时只能把表做删除,然后用代码重新建表
      
      

      注意事项:

      1. 每个数据的数据类型、精度和小数位数必须与相应的列匹配
      2. 不能为标识列指定值,因为它的数字是自动增长的
      3. 如果在设计表的时候就指定了某列不允许为空,则必须插入数据
      4. 插入的数据项,要求符合检查约束的要求
      5. 具有缺省值的列,可以使用default(默认/缺省)关键字类代替插入的数值,且不用加单引号
    2. 多行数据的插入

      --
      --多行记录添加
      -- insert into 表名(列名,列名,列名,······)
      --select 列值.列值,列值,···· union
      --select 列值.列值,列值,···· union
      --select 列值.列值,列值,···· union
      --select 列值.列值,列值,···· union
      --select 列值.列值,列值,···· 
      --go
      --列名可以省略,但是要按照数据表中列的顺序添加列值
      
      insert into Employees(编号,姓名,性别,部门,电话,地址)
      select '1001' , '赵飞燕' , 0 , '采购部' , '01032198454' , '北京市南京东路55号' union
      
      
    3. 数据表的复制,数据的修改与删除

      --一一一
      --数据表的复制    ——利用 现有表 中的 所需列 重新建一个表
      
      --select 列名,列名··· into 新表名 from 原表名
      select 姓名 , 电话 into 通讯录 from Employees
      
      --复制数据表中所有列,含有数据
      select * into Employees1 from Employees    --没有条件复制全部数据
      select * from Employees1
      
      --复制数据表中所有列,不包含数据,但包含约束和数据   一个空表  
      select * into Employees2 from Employees where 1=2    --1!=2,所以只复制结构,不复制数据 满足条件则复制数据 
      select * from Employees2
      
      --数据添加
      --insert into 目标表名 select 各列名(*代表所有列名) from 原表名
      insert into Employees2 select * from Employees where 性别=1    --性别为1的插入到employees2中,要求两个表中的结构相同
      
      
      --二二二二二二二二二二
      --数据的修改
      --update 表名 set  列名=表达式 where 条件表达式
      
      select * from Employees
      update Employees set 部门='采购部' where 部门='销售部'				--把”销售部“改为“采购部”
      
      select * from Goods
      update Goods set 零售价=零售价+200 where 零售价<2000			  --零售价小于2000的+200
      update Goods set 零售价=零售价+200, 进货价=进货价+100 where 零售价<2000			  --零售价小于2000的+200进货价+100
      
      --三三三三三三三三
      --数据的删除
      --delete from 表明 where 条件表达式
      --truncate table 表名
      
      delete from employees2						--不带条件全部删除   清空时有记录,在日志文件中记录了清空数据
      delete from employees1 where 性别=0				--符合条件的删除
       
      truncate table employees1		--	与delete from employees1 效果相同      清空没有记录,数据不能恢复
      
      --在插入有标识列的信息时,因失误而需要删除信息重新插入时的方法
      --1、  用delete from employees2	删除,重新插入信息标识号不连续,只能删除数据表重新插入
      --2、  用truncate table employees2 删除,重新插入信息标识号连续
       
      

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