Bootstrap

数据库Sql Server操作——数据库是如何解决数据存储问题的

学习视频——郝斌老师视频

​​​​​​数据库 SQLServer 视频教程全集(99P)| 22 小时从入门到精通_哔哩哔哩_bilibili

一.数据库是如何解决数据存储问题的

1.表的相关数据

字段、列、属性:一个事物的某一静态的特征。

记录、元组:字段的组合 —— 一个具体的事物。

表:记录的组合 —— 同一类型事物的集合。

表、字段和记录的关系:字段是事物的属性,记录是事物本身,表是事物的集合。

2.通过Sql命令建表和主外键约束 

创建基本表——CREATE

CREATE TABLE <表名>(
    <列名><数据类型>[列级完整性约束条件]
    [,<列名><数据类型>[列级完整性约束条件]]
    ...
    [,<表级完整性约束条件>]
);

// [ ]内的内容可省略

修改基本表——ALTER

ALTER TABLE <表名>
    [ADD [COLUMN] <新列名> <数据类型> [完整性约束]]
    [ADD <表级完整性约束>]
    [DROP [COLUMN] <列名> [CASCADE|RESTRICT]]
    [DROP CONSTRAINT <完整性约束名> [RESTRICT|CASCADE]]
    [ALTER COLUMN <列名> <数据类型>];

ADD 子句 用于增加新列、新的列级完整性约束条件和新的表级完整新约束;

DROP COLUMN 子句 用于删除表中的列,若指定 CASCADE 短语,则自动删除引用该列的其他对象,比如视图;若指定 RESTRICT 短语,则如果该列被其他对象引用,RDBMS将拒绝该列;

DROP CONSTRAINT 删除指定的完整性约束条件;

ALTER COLUMN 删除原有的列定义,包括列名和数据类型。

删除基本表——DROP

DROP TABLE <表名> [RESTRICT|CASCADE];

RESTRICT【默认】:该表删除是有限制条件的(要删除的基本表不能被其他表的约束所引用(如CHECK、FOREIGN KEY等约束),不能有视图,不能有触发器,不能有存储过程或函数等)。

CASCADE:该表删除是没有有限制条件的。

主键约束——PRIMARY KEY

外键约束——FOREIGN KEY

例子

update emp 
	set emp_id = 1001 
	where emp_name = '张三';
--修改emp表中 emp_id 为1001的对象的 emp_name 改为 张三
delete from emp;
--删除 emp 表中的所有数据

3.什么是约束

约束的定义

对一个表中的属性操作的限制叫做约束。

约束的分类

(1)主键约束——PRIMARY KEY

        不允许重复元素,避免了数据的冗余(实体的完整性)。

        【注意】不要用业务逻辑当主键。

(2)外键约束——FOREIGN KEY

        通过外键约束从语法上保证了本事物所关联的其他事物一定是存在的(引用完整性)。

        事物与事物之间的关系是通过外键来体现的。

(3)CHECK约束

        保证事物属性的取值在合理的范围内。

(4)DEFAULT约束

        保证事物的属性一定会有一个值。

        

        error省略了 stu_sal ,虽然其被 default约束,但是赋值格式错误。应为

        insert student5(stu_id, stu_email, stu_name, stu_sal)
                    values(2, '[email protected]', 'zhang', 5000);

create table student5
(
	stu_id int primary key, 
	stu_email nvarchar(200) not null, 
	stu_name nvarchar(20) unique, 
	stu_sal int check(stu_sal >= 1000 and stu_sal <= 8000),
	stu_sex nchar(1) default '男' 
);
insert student5(stu_id, stu_email, stu_name, stu_sal)
	values(2, '[email protected]', 'zhang', 5000);
(5)唯一约束——UNIQUE

        保证事物属性的取值不允许重复,但允许有记录为空值NULL(具体是允许多个记录为空还是只能有一个为空,视软件而定)。

(6)NOT NULL 和 NULL 【不是约束】

        NOT NULL要求用户必须为该属性(列)赋一个值,否则语法出错。

        如果一个字段不写 NULL ,也不写 NOT NULL,默认为 NULL ,即默认允许为空,用户可以不给该字段赋值。

        NULL 和 DEFAULT约束 的异同:

        相同点:都允许用户不赋值;

        不同点:NULL 修饰的字段如果用户不赋值,默认为NULL;

                      DEFAULT 修饰的字段如果用户不赋值,默认为DEFAULT指定的值。

4.表和约束的区别

  •         数据库是通过表来解决事物的存储问题的;
  •         数据库是通过约束来解决事物取值的有效性和合法性的问题;
  •         建表的过程就是指定事物事物属性及其事物各种约束的过程。

5.什么是关系

定义:表与表之间的联系。

实现方法:通过设置不同形式的外键来体现表与表的不同关系。

分类:

(1)一对一

        即可以把表A的主键充当表B的外键;也可以把表B的主键充当表A的外键。

(2)一对多【重点】

        把 表A的主键 添加到 表B 充当表B的外键。

        在多的一方添加外键(员工、部门表,多对一)

(3)多对多【重点】

        多对多必须通过另外一个单独的表来表示。

        例如 班级和老师,老师和学生 都是多对多的关系。        

    

        

6.主键 

能够唯一标识一个事物的一个字段或多个字段的组合,称为主键。

附注【重点】

  • 含有主键的表叫做主键表;
  • 主键通常都是整数,不建议使用字符串当主键(如果主键是用于集群式服务,才可以考虑用字符串当主键);
  • 主键的值通常都不允许修改,除非本记录被删除;
  • 主键不要定义成 id,而要定义成 表名Id 或者 表名_id;
  • 要用代理主键,不要用业务主键。

任何一张表,强烈建议不要使用有业务含义的字段充当主键,通常都是在表中单独添加一个整型的编号充当主键字段。

7.外键

定义:

如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这个若干个字段就是外键。

注意:

  • 外键通常是来自另外表的主键而不是唯一键,因为唯一键可能为NULL;
  • 外键不一定是来自另外的表,也可能来自本表的主键;

  • 含有外键的表叫做外键表,外键字段来自的那个表叫做主键表

问题:先删主键表还是外键表

先删外键表。如果先删主键表,会报错,因为这会导致外键表中的数据引用失败。

        

;