`

表的约束

    博客分类:
  • sql
阅读更多

表的约束

为什么需要表的约束

// 唯一约束 unique

drop table if exists a;

create table a

(

       name varchar(20) unique,

       age varchar(20)

);

insert into a values('aaa','28');

insert into a(age) values(23);

 

// 非空约束

drop table if exists b;

create table b

(

       name varchar(20) not null,

       age varchar(20)

);

 

insert into b(name,age) values('aaa','23');

 

insert into b(name) values('bbb');

 

// 为了方便对表中的数据进行查询,通过会为每个记录指定一个id

// id 不能为空  唯一

// 主键约 primary key   相当于 非空约束加唯一约束

create table c

(

       id int primary key,

       name varchar(20)

);

 

insert into c (name) values('aaa');   // id 不能为空

insert into c (id,name) values(1,'aaa');

insert into c (id,name) values(1,'bbb');  // 主键id必须唯一

 

// 删除主键约束

alter table c drop primary key;

// 增加主键约束

alter table c add primary key(id);

// 建立联合主键

create table d

(

       firstname varchar(20),

       lastname varchar(20),

       primary key(firstname,lastname)

);

 

insert into d (firstname,lastname) values('aaa','bbb');

insert into d (firstname,lastname) values('aaa','ccc');

insert into d (firstname,lastname) values('aaa','bbb');           // 联合主键所有主键都不能为null,唯一性是针对所有主键来检查的

 

// 设置主键的自动增长 

// 缺点: 记录删除了,主键在原来的基础上继续增长 不便于我们在程序中获得主键

create table e

(

       id int primary key auto_increment,

       name varchar(20)

);

 

insert into e (name) values('aaa');

 

insert into e (name) values('bbb');

 

delete from e where id=3;

 

insert into e (name) values('bbb');

 

// 手工插入id2的记录

insert into e (id,name) values(2,'eeee');

 

// 外键约束

 

// 创建一张Person

create table person

(

       id int primary key auto_increment,

       name varchar(20)

);

insert into person(name) values('zhangsan');

insert into person(name) values('wangwu');

 

drop table orders;

create table orders

(

       id int primary key auto_increment,

       name varchar(20)

);

 

// 增加一列   每个订单有个订单人

alter table orders add personid int;

 

insert into orders(name,personid) values('book',1);

insert into orders(name,personid) values('car',2);

 

// 问题1 假如zhangsan离职了 这人没了

delete from person where id=1;

 

// 查看一下book这个商品是谁下的订单

// 查出商品对应的personid

select personid from orders where name='book';

// result : 1

// 拿着 personid=1 去查 person 查出是谁

select name from person where id=1;    // 查无此人

 

// 问题2 有可能输入订单的时候会误操作   填写一个不存在的订单人id

insert into orders(name,personid) values('ship',4);

 

// 要解决上述的两个问题,就需要加外键约束 // 这一列是需要参照 person 表的 id 需要加外键约束

// 创建 orders

drop table orders;

create table orders

(

       id int primary key auto_increment,

       name varchar(20),

       personid int,   

       constraint  personid_FK foreign key(personid) references person(id)

);

 

insert into orders(name,personid) values('book', 1);

insert into orders(name,personid) values('car',2);

 

// zhangsan离职了 删除这个人

delete from person where name='zhangsan';

删不掉的原因: 记录被另外一张表所参照

对于增删改操作而言,我们都需要考虑参照完整性的问题

 

// 删除外键约束

alter table orders drop foreign key personid_FK;

insert into orders(name,personid) values('ship',3);

 

// 增加外键约束

// 加外键之前要把参照不完整的数据去除

delete from orders where personid=3;

alter table orders add foreign key(personid) references person(id);

分享到:
评论

相关推荐

    二、MySQL表约束和表关系学习ppt

    在数据库设计中,表约束和表关系是两个关键的概念,特别是在使用MySQL这样的关系型数据库管理系统时。本节主要探讨了MySQL中的表约束和不同类型的表关系。 首先,表约束是确保数据完整性和准确性的规则。MySQL支持...

    MySQL数据库表约束机制解析与实战案例分享

    适合人群:数据库管理人员、开发者,特别是对SQL语言有一定掌握并希望深入了解数据库表约束机制的技术人员。 使用场景及目标:适用于设计新表结构或优化现有数据库模型,目标在于提高数据的完整性和一致性,增强...

    (完整word版)数据库实验报告:分别使用SQLSERVER企业管理器和T-SQL脚本建立表和表约束.doc

    数据库实验报告 - 使用 SQLSERVER 企业管理器和 T-SQL 脚本建立表和表约束 该实验报告旨在使用 SQLSERVER 企业管理器和 T-SQL 脚本建立表和表约束。实验中,学生需要创建五张表,分别是员工人事表、客户表、销售主...

    Oracle基础练习题及答案(表约束).docx

    在Oracle数据库管理中,表约束是确保数据完整性的重要机制。以下是对给定文件中练习题的详细解释: 一、创建emp1表并设置约束: 1. 主键约束:在eno字段上创建主键约束,目的是确保eno字段的值是唯一的,不能有重复...

    0.7 MySQL表约束

    0.7 MySQL表约束

    表的约束特点

    表的约束特点,完整性约束特点,主键约束,创建主键约束(单列主键,复合主键表级方式和列级方式)修改主键,删除主键,创建唯一约束(候选键unique),增加都选件,单列候选键和复合候选键的区别,删除候选键,非空...

    Oracle基础练习题及答案(表约束).pdf

    首先,创建表`emp1`,包含了eno、ename、sex、age和dno五个字段,并在eno字段上创建主键约束,ename字段上创建非空约束,dno字段上创建唯一性约束,以及一个检查约束用于限制年龄和性别的组合。创建表的SQL语句如下...

    创建与删除SQL约束或字段约束SQL约束控制

    禁止所有表约束的SQL 当需要暂时禁用表中的所有约束时(例如,在进行大量数据导入操作之前),可以通过以下SQL语句来实现: ```sql SELECT 'ALTER TABLE ' + name + ' NOCHECK CONSTRAINT ALL' FROM sys.tables ...

    mysql_约束的使用

    如果唯一性约束保护多个数据列,那么唯一性约束要作为表约束增加。语法如下: CONSTRAINT CONSTRAINT_NAME (COL1,COL2) UNIQUE USING INDEX TABLESPACE (TABLESPACE_NAME) STORAGE (STORED CLAUSE); 2. 外键约束 ...

    4建表语法,表约束,表数据类型,修改表,追加删除约束,增删改笔记.sql

    小白必看!

    表的约束 (2).docx

    表的约束 在数据管理中,表的约束是保证数据的一致性和安全性的重要手段。它可以保障数据的完整性、唯一性和正确性。本文将详细介绍表的约束,包括主键约束、唯一约束、非空约束和默认值约束等。 主键约束 主键...

    xilinx 约束实现1

    - **网表约束文件 (Netlist Constraint File, .NCF)**:由综合工具自动生成,基于用户的UCF文件,包含设计综合后的约束信息。 - **物理约束文件 (Physical Constraint File, .PCF)**:在实现阶段由布局布线工具...

    snomed-query-service:SNOMED CT表达约束语言的实现

    SNOMED CT表达约束语言的实现。 表达式约束语言功能支持 特征 例子 支持的 自己 404684003 |临床发现| 是的 后裔 <404684003> 40541001 |急性肺水肿| 是的 祖先或自我 >> 40541001 |急性肺水肿| 是的 成员 ^ ...

    对象约束语言(OCL)的简介

    对象约束语言(Object Constraint Language,简称OCL)是一种在统一建模语言(UML)中使用的强大工具,用于描述和验证模型元素上的约束条件。由于国内关于OCL的中文资源较少,因此理解并掌握OCL对于UML建模者尤其...

    MySQL学习笔记之数据定义表约束,分页方法总结

    在MySQL数据库管理中,数据定义和表约束是创建和维护数据结构的重要方面,而分页则是处理大量数据查询时常用的技术。以下是对这些概念的详细解释: 1. **数据定义**: 数据定义(Data Definition)是SQL语言的一...

    sqlServer导出带约束的脚本

    例如,主键约束确保了表中的每条记录都有唯一的标识符,而外键约束则维护了不同表之间的引用完整性。此外,唯一性约束确保特定列中的值不重复,检查约束则允许我们设定特定的条件,以确保插入或更新的数据满足一定的...

    Oraclr存储过程建表建约束

    在Oracle数据库系统中,存储过程是一种预编译的SQL和PL/SQL代码集合,它可以用于执行复杂的数据库操作,如创建表、添加约束、插入数据等。这个“Oraclr存储过程建表建约束”示例提供了如何利用存储过程来完成这些...

Global site tag (gtag.js) - Google Analytics