SQL Server中约束的牵线

引用完整性,唯一约束【允许一个空】UNIQUE,数据库只需要满足第三范式(3NF)就行了,因为在Android我们只要是利用SQL语句对表操作,即表中的一行(一条记录)代表一个实体(entity),每个表中要有一个主键,以及如何在数据库编程中应用和使用这些约束,如果数据库中存储有不正确的数据值

图片 6

DCL数据控制语言【revoke  grant】

封锁原则

  • primary key(主键约束)

    • 在创造的表的时候钦命

      create table emp(emp_id integer primary key)
      
    • 在表创设完毕后添加主键约束

      alter table stu add primary key (emp_id);
      
  • foregin key(外键约束)

    • 两张表没有树立外键关系

      alter table stu add foregin key(stu_id) references xi(xi_id)
      
    • 剔除此而外键的时候,相应表中与该外键的有关的笔录也整个剔除

      alter table stu add foregin key(stu_id) references xi(xi_id) on delete cascade
      
    • 删除了这一个之外键的时候,相应表中与该外键的有关的列全体安装为null

      alter table stu add foregin key(stu_id) references xi(xi_id) on delete set null
      
  • unique(无法再一次约束)

    alter table emp add unique(emp_name);--可以插入null(null值可以重复)
    
  • check(取值范围约束)

    alter table emp add check(em_sex in ("男","女"));alter table emp add check(em_id>0);
    

#实业的完整性

概述:  实体:即表中的一行(一条记下)代表1个实体(entity)
实体完整性的效应:标识每一行                数据不重复

自律类型有:主键约束 primary key      唯一约束 unique   自动增进列
 auto_increment 

  *主键约束

            注:各个表中要有贰个主键。特点:数据唯一,且不能够为null。

            第三种丰裕形式:

                 CREATE TABLE student( id int primary key, name
varchar(50));

            第3种丰盛形式:此种格局优势在于,能够创制联合主键

                 CREATE TABLE student(id int,name varchar(50),primary
key(id));

                 CREATE TABLE student(classid int,stuid int,name
varchar(50),primary key(classid                           ,stuid));

           第二种丰富情势:

                 CREATE TABLE student(id int,name varchar(50));

                  ALTER TABLE  student  ADD PRIMARY  KEY (id);

*唯一约束

        特点是不能重新

        create table student(id int primary key,name varchar(255)
unique);

*自行增进列

       sqlserver数据库(identity)     oracle数据库( sequence)��

       给主键添加自动增进的数值,列只好是整数类型

      create table student(id int primary key auto_increment,name
varchar(255));

FOREIGN
KEY约束为表中的一列恐怕多列数据提供数据完整性参照。日常是与P安德拉IMA普拉多Y
KEY约束照旧UNIQUE约束同时利用的。

 

 

首先范式

是数据库设计的最大旨的要求,不满意1NF的数据库不是关系型数据库
所谓第叁范式就是指数据库表的每一列都是不可分割的为主数据项,同一列中只好有叁性情质(也便是说一个性格下无法再分出别的的质量来)

#引用完整性(参照完整性)

    外键约束:  foreing     key

     分清主次关系  外键信赖主键    先有主键  再有外键

      语法   

         CONSTRAINT 约束的名字   FOREIGN KEY(约束的字段) REFERENCES
主表(约束字段)

        ALTE昂Cora  TABLE  次表名称  ADD CONSTRAINT 约束的名字 FOREIGN
KEY(约束的字段)               REFERENCES   主表(约束的字段);

    例:

    CREATE TABLE student(sid int pirmary key,name varchar(50) not
null,sex varchar(10)                   default‘男’);

    create table score(id int,score int,sid int ,
–外键列的数据类型一定要与主键的项目一致

    CONSTRAINT fk_score_sid foreign key (sid) references student(id));

   第三种丰盛外键格局。

    ALTER TABLE score1 ADD CONSTRAINT fk_stu_score FOREIGN KEY(sid)
REFERENCES     stu(id);

在数据库关系图中,右击包涵约束列的表,然后从高速菜单中选择”索引/键”命令。

范式一:保障数据库之中表每一列的原子性{假若 某一列 出生地的始末:新疆-埃德蒙顿-东安县 ,那种数据已然背离了  第①范式,此时应该设计多张表    }

参照完整性约束

外键能够为空值;当外键不为空时,其取值只好等于参照的主键的某部值

#域完整性

  域完整性的效果:限制此单元格的数据科学,不对照此列的别的单元格比较 域代表当前单元     格 域完整性约束:数据类型   非空约束(notnull)
 暗中同意值约束(default)    check约束(mysql不支  
 持)check(sex=’男’orsex=’女’)

  *数据类型

     数值类型、日期类型、字符串类型

  *非空约束  not null  

      CREATE TABLE student( Id int pirmary key, Name varchar(50) not
null, Sex varchar(10));

      INSERT INTO  student values(1,’tom’,null);

  *私下认可值约束

      CREATE TABLE student(Id int pirmary key,Name varchar(50) not
null,Sex varchar(10) default       ‘男’);

       insert into student1 values(1,’tom’,’女’);

      insert into  student1 values(2,’jerry’,default);

-或-

6.询问办法

选择  【int()  not in()  between 
 and     】

模糊  【通配符: %   _   * 
   】

筛选  【where  like  = 】

排序  【order by  】

聚合  【count  sum  avge  max  min  

分组  【group by 】

连续  【
内连接  外接连  全连接  交叉连接  】

子查询  【select  * from  A   where
id not in (select  id from A where id>=10)】

 

 

 

 

 

 

 

 

 

 

 

 

not null(非空约束)

create table student(
     name varchar2(10), 
     sex varchar(5) not null, 
     age integer)

譬如说,对于 pubs 数据库中的 sales 和 titles 表,引用完整性基于 sales
表中的外键 (title_id) 与 titles 表中的主键 (title_id) 之间的涉及。

DDL数据定义语言【create  drop  alter  declare  】

数据模型

依据总括机体系的观点对数码进行建立模型。

[CONSREAINT constraint_name]
 DEFAULT constant_expression

1.数据库设计三大范式

3次修改多条记下
update employees e set e.salary = 
case e.employee_id
  when 1 then 5555
  when 2 then 6666
end
where e.employee_id<3;

PRIMARY KEY约束

 

primary key(主键约束)

表级格局定义主键

create table student( 
    name varchar2(19),
    sex varchar2(10),
    age integer,
    constraint student_age_pk primary key(age)
    );

把age定义为主键(student_age_pk:约束的名字有一定的标准:表名主键名封锁类型)

列级方式定义主键

create table student( 
   name varchar2(19) primary key,
   sex varchar2(10),
   age integer);

在数据库关系图中右击将富含约束的表,然后从高效菜单中选择”属性”命令。

4.数据完整性保持手段:约束

 

 

类型转换函数

数据类型转换包涵隐士类型转换和出示类型转换
隐士类型转换:系统活动转换
展现类型转换:调用相应的函数转换

TO_CHA帕杰罗:字符串转换(别的类型转换为字符串)
TO_NUMBE奥迪Q7:数值转换
TO_DATE:日期转换

  • TO_CHAR

将日期转换为字符串格式
无法不用单引号括起来,大小写不灵动
有一个fm成分,用于补充空格或许禁止后面包车型地铁零
运用逗号分离日期
TO_CHAR(date,’fmt’)
常用的日子格式:
YYYY:三位数表示的年
YEA昂Cora:拼写出的年
MM:两位数字的月
MONTH:全月明(例如:sepember)
DD:两位数字代表的月
DAY:全天名

select name,TO_CHAR(hiredate,'fmDD Month YYYY') HIREDATE from emp
  • TO_NUMBE科雷傲:将字符串转化为数值TO_NUMBER(char)

    select * from emp where deptno = TO_NUMBER('30')
    
  • TO_DATE:将字符串转换为日期TO_DATE(char,[‘fmt’])

    select TO_DATE('2006-05','YYYY-MM') from DUAL
    

域完整性

2.数量的天性:正确,可信,完整

概念模型

也号称音信模型,即依照用户的见地来对数据和音讯建立模型

  • 实体(Entity):客观存在并可交互开始展览区分的东西称为实体
  • 天性(Attribute):实体所拥有的某一特点称为属性,三个实体可有若干个天性来描写。
  • 键(KEY):唯一标识实体的性质集称为键,一般分为超键、候选键、主键以及外键。
  • 域(Domain):属性的取值范围称为该属性的域。
  • 实体型(Entity
    type):用实体名以及其属性名集合来抽象和描绘同类实体称为实体型
  • 实业集:同型实体的集结称为实体集

图片 1

6.T-SQL组成

锁:保险数据库的一致性(同步):自添加锁

T1执行 update students set name=’gfd’ where id=3;
假使T2想修改id=3的数码,必须等T1提交后才能修改(也正是说提交后活动释放锁)

引用完整性

5.7大约束

唯一约束【允许多个空】UNIQUE

主键约束【不容许空,最少性,稳定性】PPRADOIMA途睿欧Y KEY

反省约束  CHECK

自定义约束 

默许约束  DEFAULT

非空约束  NOT NULL

外键约束 FOREIGN KEY

 

 

oracle有如下类型的约束:

not null:非空
primary key:主键约束
foreign key:外键约束
check:检查约束
unique key:唯一性约束

4.

 

foreign key(外键约束)

create table emp(
   empno number(4), 
   ename varchar2(10) not null, 
   job varchar2(9),
   deptno number(7,2) not null, 
   constraint emp_deptno_fk foreign key(deptno) references dept (deptn)
   );

–references dept (dept):外键所对应的主键所在的表 关键字 主表 主键

表级P福睿斯IMA奥迪Q5Y KEY约束定义风格为:

范式一:保障数据库之中表每一列与主键间接相关 **{假设 某一行之中数据描述的是三个上学的小孩子的实业包罗   {id name sex age classid }  倘诺再多加一列 classname  那种数量已然背离了  第②范式,此时应当设计多张表 }**

自律的花色:

  • 表级约束和列级约束,他们互相在成效上并未别的的分裂,但日常若是某些约束用于于无休止一个列时,只好接纳表级约束的花样来展开发挥,借使五个字段组成耨表的一起主键时。
  • 列级约束: 在概念列的时候:列名 约束类型 表级约束
    在概念完所有的列后:列名,列名,。。。 约束类型

DEFAULT约束

3.数据完整性分类

域完整性

实体完整性

自定义完整性

引用完整性

 

具体世界的实业进入数据库

  • 1.讲现实世界中的客观对象抽象为概念模型
  • 2.把概念模型转化为某一DBMS(数据库管理体系)协理的数据模型

 

**范式一:保证数据库之中表每一列与主键有关{借使 某一行之中数据描述的是1个上学的小孩子的实业包涵   {id name sex age classid }  固然再多加一列 光照强度 那种多少已然背离了  第贰范式,此时应该设计多张表    }**

多表连接查询中的连接类型

图片 2

选择”约束”选项。

 

增加注释

comment on table 表名 is ‘注释’;–表添加注释
comment on column 表名.字段名 is ‘注释’;–字段添加注释

[CONSTRAINT constraint_name]
 PRIMARY KEY [CLUSTERED | NONCLUSTERED]
 [WITH [FILLFACTOR = fillfactor]]
 [ON {filegroup | DEFAULT}]

DML数据管理语言【insert  update  select  delete】

内接连:重返符合一定连接条件的查询记录
  • 等值连接:再次来到符合内定连接条件的值,那个值是相等关系

    select * from products p,product_type pt where p.type_id = pt.type_id;
    select * from products p inner join prodect_type on p.type_id = pt.type_id;--inner join on 条件
    
  • 非等值连接:再次回到符合内定连接条件的值,那个值不是万分关系

    select * from products p,product_types pt where p.product_type_id <> pt.product_type_id;--<>:不等于
    
  • 理所当然连接:特指在同一张表内通过一定连接条件查询符合连接条件的值

图片 3

select * from products p natural inner join purchases pt;--自动按着相等的去连接,不用加条件了 在emp中每一个员工都有自己的mgr(经理),并且每一个经理自身也是公司的员工,自身也有自己的mgr。我们需要将每一个员工自己的名字和经理的名字都找出来。
select worker.ename,'work for',manager.ename from emp worker,emp managetr where worker.mgr = manager.empne work for:连接字符串

例如,在BookStores表中的author_id列以及title_id列分别参照了Authors表中的author_id列以及Titles表的title_id列。在向BookStores表中插入新行或改动在那之中的数码时,那两列的数据值必须在Authors表和Titles表中早就存在,不然将不可能执行插入或然修改操作。

单行函数

  • 用来操作数据项
  • 还可以参数并重回2个值
  • 对每贰个赶回行起成效,每一行再次回到1个结果
  • 可使用转换函数修改数据类型
  • 可利用嵌套方式
  • 科学普及的单行函数包蕴字符、数字、日期处理函数、类型转换函数、逻辑处理函数等

列级P智跑IMAEscortY KEY约束的定义格式为:

多表联合检查

选购数量超越叁个的产品名,顾客名以及购买销售的数据(3张表)
select * from products;
select * from customers;
select * from purchases;

  • 先是种形式

    select * from customers c inner join (select * from products p inner join purchases pr on p.product_id=pr.product_id) a on a.customer_id=c.customer_id where a.quantity>1;
    
  • 其次种办法

    select * from (products p inner join purchases pr on p.product_id=pr.product_id and pr.quantity>1) inner join customers c on c.customer_id=pr.customer_id;
    
  • 其两种艺术

    select * from products p,purchases pr,customers c where p.product_id=pr.product_id and pr.customer_id=c.customer_id and pr.quantity>1;
    

引用完整性又称参照完整性。引用完整性维持被参照表和参照表之间的数量一致性,他经过主键(P奥德赛IMA揽胜极光Y
KEY)约束和外键(FOREIGN
KEY)约束来促成。引用完整性确认保障键值在具备表中一致。那样的一致性须求不可能引用不设有的值,要是键值更改了,那么在一切数据库中,对该键值的具有引用要开始展览相同的改变。在被参照表中,当其主键值被别的表所参照时,该行不能够被删去也不容许改变。在参考表中,不允许参照不设有的主键值。

依据时间总计胜负数

图片 4

它与PCRUISERIMA兰德酷路泽Y
KEY约束的分化之处在于,UNIQUE约束能够建立在多少个列之上,而PEnclaveIMA奥德赛Y
KEY约束在叁个表中只可以有多少个。

死锁

T1 update students set name='gfd' where id=3;
update students set name='gfd' where id=4; T2 update students set name='gfd' where id=4; 
update students set name='gfd' where id=3; 

声明:在T1,T2执行完第壹条语句时,再实行下一条语句时,都被各互相锁着,所以都不能够执行下去了。
就出现了死锁的景况,oracle数据库会活动解锁一条语句

[CONSTRAINT constraint_name]
 UNIQUE [CLUSTERED | NONCLUSTERED]
  [WITH [FILLFACTOR = fillfactor]]
  [ON {filegroup | DEFAULT}]

图片 5

使用UNIQUE约束的历程中,还索要留意,若是要对允许空值的列强制唯一性。能够允许空值的列附加UNIQUE约束,而不得不将主键的牢笼附加到不容许空值的列。但UNIQUE约束不容许表中受束缚列有一行以上的值同时为空。

外接连:不仅重回符合连接条件的记录,也回到钦定表中的不相符连接条件的笔录

图片 6

  • 左外连接:先对A表和B表做内接连,再把A表中没有匹配的结果集添加进去形成新的结果集(相应的右表的值(对应A表没有匹配的)为null)

    select * from newdept left outer join newemp on newdept.deptid = newemp.deptid;--outer可以省略 
    。。。。。。。where a.deptno = b.deptno(+);--左连接
    
  • 右外连接:
    先对A表和B表做内连接,再把B表中没有匹配的结果集添加进去形成新的结果集(相应的左表的值(对应B表没有匹配的)为null)也回到

    select * from newdept right outer join newemp on newdept.deptid = newemp.deptid
    。。。。。。。where a.deptno(+) = b.deptno;--右连接
    
  • 全外连接:在内连接的底蕴上,把左右两表中不相符连接条件的记录都回来

在emp中每二个职工都有自身的mgr(COO),并且每2个主任本身也是商行的职工,自己也有谈得来的mgr。我们须求将每1个职员和工人本人的名字和主任的名字都找出来。

  select worker.ename,'work for',manager.ename from emp worker,emp managetr 
  where worker.mgr = manager.empnework for:连接字符串

用SQL语句列出EMP表中颇具机关的详细消息以及相应的单位人数

select a.* , b.* from dept a,(select deptno,count(*) from emp group by deptno) b where a.deptno = b.deptno(+)
  • 全外连接

用SQL语句列出NEWEMP表和NEWDEPT表中全数单位和职员和工人的详细消息:

select * from newdept full outer join newemp on newdept.deptid = newemp.deptid

用户定义完整性

order by

  • 利用order by能够将记录实行排序
  • ASC:升序(暗许的),DESC:降序排列
  • order by 只可以放到全部select语句的末尾

select name,sex,age from student order by age
asc:依据age进行降序排列
select name,sex,age,sal from student order by age asc,sal
desc:根据age降序排列,借使相等则在安分守己sal升序排列

  数据完整性分类
  实体完整性
  域完整性
  引用完整性
  用户定义完整性
  PRIMARY KEY约束
  DEFAULT约束
  CHECK约束
  UNIQUE约束
  FOREIGN KEY约束