SQL语法整理[2]——用主外键实现表关联及数据库管理
来源:互联网 发布:h5页面源码 编辑:程序博客网 时间:2024/06/16 21:03
SQL语法整理[2]——用主外键实现表关联及数据库管理
用主外键实现表关联
主键
主键是表中的一列或者多列数据,用来惟一标识一行数据.在表中,不允许有主键相同的行存在.在受主键约束的列中,不能有空值(NULL)出现。为了有效实现数据的管理,每一张表有应该有一个主键,而且只能有一个。主键可能是列的组合。
创建表时创建主键
id INT CONSTRAINT pk_test1_id PRIMARY KEY
查看表格属性
EXECUTE SP_HELP [表名]
有时候需要有多个列的联合,才能惟一标识一条信息
CREATE TABLE book
(
isbn INT, ---图书编号
copy_no INT, ---图书副本号
book_name CHAR(20), ---图书名称
CONSTRAINT pk_book_isbn_copy_no PRIMARY KEY(isbn,copy_no) ---定义表级主键约束
)
创建表后添加主键
ALTER TABLE table
ADD CONSTRAINT constraint_name PRIMARY KEY(column[,…n])
修改列的值,用update。修改列的属性,用alter table…alter column [列名]
外键
外键约束主要是为了维护两个表之间的一致性关系,是建立在主键的基础之上的,其值是参考主键的内容。主键的值是惟一的,不能为空,而外键的值可以是重复的、为空的,外键的数值必须在主键中出现。在同一张表中可以有多个外键,每一个外键的创建都必须有一个主键相对应,外键可以是一个列,也可以是多个列的组合。
在创建表时,定义外键
CREATE TABLE table_name
(
column_name datatype
[CONSTRAINT constraint_name]
{
[FOREIGN KEY]
REFERENCES referenced_table_name[(ref_column)]
}
)
e.g=〉
CREATE TABLE junior_member
(
member_id INT,
adult_member_id INT,
member_name CHAR(10),
member_gender CHAR(2),
CONSTRAINT pk_junior_member_id PRIMARY KEY(member_id),
CONSTRAINT fk_junior_ adult_member_id FOREIGN KEY (adult_member_id)
REFERENCES adult_member(member_id)
)
/*为表格adult_member创建一个外键约束*/
ALTER TABLE adult_member
ADD CONSTRAINT fk_adult_member_id_member_id
FOREIGN KEY(member_id) REFERENCES member(member_id)
表关联种类
表之间(也就是实体之间)有一定的关联种类,实体之间的不同种类,决定着实体或表格之间的对应关系。有的可以拆成1对1的关系,有的可以拆成1对n的关系,有的可以拆成n对n的关系,不同的关系拆成不同数量的表
在关系数据库中有3个要素:
实体(Entity):客观存在的事物。例如:学生,老师,家长。
属性(Attribute):实体所具有的特性。例如:学生的姓名,年龄,性别。
关系(Relation):实体与实体之间的关系。例如:学生和老师,学生与家长。
a.一对一的关系
两个实体中,如果有一个实体的数值确定了,则另一个实体的数值也就惟一确定了, 反之也是如此,那么这种对应关系就是一对一(1:1).
一对一的关系实体在数据库中能够拆分为两张表,为了描述表之间的关联关系,通过 主外键的方式联系起来.
b.一对多的关系
实体A与B是一对多(1:n)的关系,是指当A中的一个值确定以后,可以对应到B中的 多个值;反过来,当B中的一个值确定以后,惟一地能够对应A中的一个值.
一对多的关系可以拆分成两张表,通过主外键的方式联系起来。
c.多对多的关系
实体A与B是多对多(m:n)的关系,是指当选中A的一个数值确定后,可以对应到B 中的多个值;反过来,当B中一个值确定以后也可以对应A中的多个值.
多对多的关系可以拆分成为3张表,中间的关系表与其他两张表建立起主外键的关 系,通过这张关系表来体现这两个实体之间的关系。
删除主外键
删除是有一定的顺序的。
要先删除外键的信息,然后再删除主键,否则就会报错。
如果要删除主键,要先看是否被外键引用,如果被引用那么就会报错。
数据库的管理
查看数据库属性
EXECUTE SP_HELPDB [数据库名]
数据库更名
EXECUTE SP_RENAMEDB ‘newdemo’,’demo’
(将数据库newdemo变更名称为demo)
文件组更名
USE master
GO
ALTER DATABASE school
MODIFY FILEGROUP teachers
NAME=teacher
GO
数据文件更名
/*将school数据库中数据文件逻辑名称为school2变更为school3*/
USE school
GO
ALTER DATABASE school
MODIFY FILE
(
NAME=school2,
NEWNAME=school3,
)
GO
修改数据文件大小
/*修改数据库school中逻辑名称为school2的大小,将其变为23MB*/
USE school
GO
ALTER DATABASE school
MODIFY FILE
(
NAME=school2,
SIZE=23
)
GO
/*为数据库school添加一个叫linshi2的文件组*/
ALTER DATABASE school
ADD FILEGROUP linshi1
GO
/*为数据库school中文件组linshi1添加一个数据文件叫linshi2*/
ALTER DATABASE school
ADD FILE
(
NAME=linshi2,
FILENAME=’C:\DATA\linshi2.ndf’,
SIZE=3,
MAXSIZE=20,
FILEGROWTH=1
)
TO FILEGROUP linshi1
GO
/*为数据库school添加一个日志文件,逻辑名称为school_log4*/
ALTER DATABASE school
ADD LOG FILE
(
NAME=school_log4,
FILENAME=’C:\DATA\school_log4.ldf’,
SIZE=3,
MAXISZE=20,
FILEGROWTH=1
)
GO
删除文件组/数据文件/日志文件
如果要删除文件组,必须要先删除文件组内的数据文件,否则不可能删除文件组.
如果要删除数据文件,数据文件不能为空。如果数据文件内容不为空也不能删除数据文件,日志文件也是如此,如果不为空的情况下是不能删除的,只有为空的情况下才能删除.
如果数据文件有内容,应先执行TRUNCATE TABLE table_name(删除表中的所有数据,只留下一个表的定义),然后再删除数据文件,最后删除文件组。
/*先删除数据文件*/
ALTER DATABASE school
REMOVE FILE linshi2
GO
/*再删除文件组*/
ALTER DATABASE school
REMOVE FILEGROUP linshi1
GO
/*最后删除日志文件*/
ALTER DATABASE school
REMOVE FILE school_log4
GO
分离附加用户数据库
分离、附加用户数据库是一种很好的转移数据库、备份数据库的方法。
/*分离数据库demo*/
USE master
GO
EXECUTE SP_DETACH_DB ‘demo’
GO
/*将分离的demo数据库附加到SQL Server实例上*/
USE master
GO
EXECUTE SP_ATTACH_DB ‘demo’,
‘C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\demo.mdf’
GO
(如果数据库正在应用,或者在这个数据库操作环境下,是不可以分离该数据库的,只有在其他数据库的操作环境下,而且要分离的数据库不被使用的前提下,才能够使用SP_DETACH_DB命令分离数据库。)
理解master数据库以及系统表在系统中的作用
由master数据库中的系统表识别出用户自定义数据库以后,SQL Server实例将读取用户自定义数据库中的系统表。用户自定义数据库中的系统表将识别出其数据库中的文件组名称,数据文件名称与数据文件物理位置以及数据库对象等。
master数据库中的sysdatabases表中的信息,存储着整个SQL Server实例的数据库信息,由这个表识别了其他数据库,再由用户数据库中类似于sys.filegroups以及sys.database_files的表来识别用户自定义数据库中的内容。就这样一级一级地识别出数据库中的所有对象。
——大二的期末考试整理 peace_power@126.com
- SQL语法整理[2]——用主外键实现表关联及数据库管理
- SQL语法整理[3]——表的管理
- SQL语法整理[1]——创建数据库
- SQL语法整理[4]——视图
- SQL语法整理[6]——函数
- SQL语法整理[7]——触发器
- SQL语法整理[9]——索引
- SQL语法整理[8]——SQL语言编程
- SQL标准语法之数据库管理
- sql server 数据库系统整理——数据表的创建和管理
- SQL数据库设计 常用语法及结构
- 数据库性能调优——sql语句优化(转载及整理)
- SQL语法整理[5]——存储过程
- SQL语法整理[10]——事务与锁
- 数据库—SQL—基础整理
- 数据库基本概念整理及常用SQL语句
- Oracle数据库使用基本语法整理——(1)
- Hadoop实现数据库表关联
- 多线程并发服务器编程
- 《VC++深入详解》学习笔记[12]——第15章 多线程
- 《VC++深入详解》学习笔记[13]——第16章 线程同步与异步套接字编程
- 《VC++深入详解》学习笔记[14]——第17章 进程间通信
- SQL语法整理[1]——创建数据库
- SQL语法整理[2]——用主外键实现表关联及数据库管理
- SQL语法整理[3]——表的管理
- SQL语法整理[4]——视图
- SQL语法整理[5]——存储过程
- SQL语法整理[6]——函数
- SQL语法整理[7]——触发器
- SQL语法整理[8]——SQL语言编程
- SQL语法整理[9]——索引
- SQL语法整理[10]——事务与锁