精华内容
下载资源
问答
  • 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign key 1.1 非空约束:not null 1)在创建时添加约束: CREATE TABLE stu( id INT, NAME VARCHAR(20) NOT NULL -- name为非空...

    目录

    1 表的约束

    1.1 非空约束:not null

    1.2 唯一约束:unique,值不能重复

    1.3 主键约束:primary key

    1.4 外键约束:foreign key


    1 表的约束

    约束,是对表中的数据进行限定,保证数据的正确性、有效性和完整性,约束分为以下几类:

    • 主键约束:primary key
    • 非空约束:not null
    • 唯一约束:unique
    • 外键约束:foreign key

    1.1 非空约束:not null

    1)在创建表时添加约束:

    CREATE TABLE stu(
    	id INT,
    	NAME VARCHAR(20) NOT NULL -- name为非空
    );

    2)创建表后再添加非空约束:

    ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL; 

    3)删除name的非空约束:

    ALTER TABLE stu MODIFY NAME VARCHAR(20)

    1.2 唯一约束:unique,值不能重复

    1)创建表时添加唯一约束:

    CREATE TABLE stu(
    	id INT,
    	number VARCHAR(20) UNIQUE
    );

    注意:MySQL中唯一约束限定的列的值可以有多个null

    2)删除唯一约束:

    -- alter table stu modify number varchar(20); 不同于非空约束的删除方法
    ALTER TABLE stu DROP INDEX number;

    3)创建表后添加唯一约束:

    ALTER TABLE stu MODIFY number VARCHAR(20) UNIQUE;

    1.3 主键约束:primary key

    1)注意:

    • 若某一列添加了该约束,则代表了非空,且唯一;
    • 一张表只能有一个字段为主键;
    • 主键就是表中记录的唯一标识;

    2)创建表时添加主键约束

    CREATE TABLE stu(
    	id INT PRIMARY KEY,
    	number VARCHAR(20)
    );

    3)删除主键

    -- 错误方式 ALTER TABLE stu MODIFY id int;
    ALTER TABLE stu DROP PRIMARY KEY;

    4)创建完表后添加主键

    ALTER TABLE stu MODIFY id INT PRIMARY KEY;

    5)自动增长:若某一列是数值类型的,使用关键字auto_increment 可以来完成值得自动增长。

    • 在创建 表时添加主键约束,且完成主键自增长 
    CREATE TABLE stu(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	number VARCHAR(20)
    );
    • 删除自动增长
    ALTER TABLE stu MODIFY id INT;
    • 创建后,添加自动增长
    ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;

    1.4 外键约束:foreign key

    【引例】我们创建一张职工表如下,但是发现存在明显的缺陷:

    • 数据冗余;
    • 后期还会出现增删改的问题;

    所以,基于以上问题,我们可以通过拆表解决,一张员工表,一张部门表,员工表中的dep_id 对应部门表中的id

    以上仍然存在一个问题,当在员工表中输入不存的部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。

    【概念】什么是外键约束?

    外键,就是从表中与主表主键对应的那一列,如:员工表中的dep_id,其中,主表是一方,用来约束别人的表,从表可以是多方,被别人约束的表。

    注意:外键可以为NULL,但是不能是不存在的外键值。

    1)创建表时添加外键

    语法:
            create table 表名(
                       ...
                       外键列
                       constraint 外键名称 foreign key (外键列名称) references 主表名称(主表主键名称)
            );

    -- 创建部门表(id,dep_name,dep_location) 
    -- 一方,主表 
    CREATE TABLE department(  
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	dep_name VARCHAR(20),
    	dep_location VARCHAR(20) 
    ); 
     
    -- 创建员工表(id,name,age,dep_id) 
    -- 多方,从表 
    CREATE TABLE employee(
    	id INT PRIMARY KEY AUTO_INCREMENT,
    	NAME VARCHAR(20),
    	age INT,
            dep_id INT, -- 外键对应主表的主键
            CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id)
    ); -- 外键对应主表的主键  
     
    -- 添加2个部门 
    INSERT INTO department VALUES(NULL, '研发部','广州'); 
    INSERT INTO department VALUES(NULL, '销售部','深圳'); 
     
    -- 添加员工,dep_id表示员工所在的部门 
    INSERT INTO employee (NAME, age, dep_id) VALUES ('张三', 20, 1); 
    INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1); 
    INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1); 
    INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2); 
    INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2); 
    INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2); 
    SELECT * FROM employee;
    SELECT * FROM department;

    因为有外键的约束,在员工表中添加一个不在部门表范围内的内容,则无法保存:

    2)删除外键:ALTER TABLE 表名称 DROP FOREIGN KEY 外键名称;

    -- 删除外键
    ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;

    3)在创建表后添加外键:
    ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);

    -- 添加外键
    ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id);

    4)级联操作

    若希望改动部门表的id,同时希望自动改动员工表中的id,这时就需要进行级联操作,需要在添加外键的时候设置级联:

    • 添加级联操作:ALTER TABLE 表名称 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称)  ON UPDATE CASCADE ON DELETE CASCADE ;
    • 分类:级联更新 ON UPDATE CASCADE
                 级联删除 ON DELETE CASCADE 

    本文为博主原创文章,转载请注明出处!

    若本文对您有些许帮助,轻抬您发财的小手,关注/评论/点赞/收藏,就是对我最大的支持!

    祝君升职加薪,鹏程万里!

    展开全文
  • SQLserver数据库——主键约束

    千次阅读 2019-02-05 23:56:50
    创建时设置约束的方式两种:种是在列级设置,另种是在级设置。 列级约束一般直接设置在该列的定义后面即可,级约束通常设置在所有列定义之后。 在创建时设置主键约束 ①在列级设置主键约束:...

    常见五种约束:

    • 1.主键约束

    • 2.外键约束

    • 3.唯一约束

    • 4.检查约束

    • 5.默认值约束

    下面就让我们分别探讨这五类约束设置添加以及删除等用法吧!

    1、主键约束

    创建表时设置约束的方式有两种:一种是在列级设置,另一种是在表级设置

    • 列级约束一般直接设置在该列的定义后面即可,表级约束通常设置在所有列定义之后。

    在创建表时设置主键约束

    • ①在列级设置主键约束:
    CREATE TABLE table_name
    (
    	column_name datatype [[CONSTRAINT constraint_name]primark key]
    	[,...n]
    )
    

    其中:
    table_name:表名。
    column_name:列名。
    [CONSTRAINT constraint_name]:可以省略,constraint_name是自定义的约束名字。
    PRIMARY KEY:设置主键约束的关键字。

    例:在创建图书信息表(books)时,以列级约束的方式创建主键约束代码语句如下:

    USE dbtest1
    GO
    CREATE TABLE books
    (
    	id int CONSTRAINT pk_books_id PRIMARY KEY,
    	name nvarchar(20),
    	price decimal(7,1)
    );
    
    
    • ②在表级约束设置主键约束:
    CREATE TABLE table_name
    (
    	column_name datatype
    	[,...n],
    	[[CONSTRAINT constraint_name]PRIMARY KEY(column_name1,coiumn_name2,...)]
    )
    
    

    例:在创建图书信息表(books)时,以表级约束的方式创建主键约束代码语句如下:

    USE dbtest1
    GO
    CREATE TABLE books
    (
    	id int ,
    	name nvarchar(20),
    	price decimal(7,1)
    	CONSTRAINT pk_books_id PRIMARK KEY(id)
    );
    
    

    在修改表时添加主键约束

    如果数据表已将创建完成,则需要在修改表时为表中的列添加主键约束。具体用法如下:

    ALTER TABLE table_name
    ADD [CONSTRAINT constraint_name] PRIMARY KEY(column_name1,column_name2,...);
    

    例:假设在创建图书信息表时,并没有为其添加主键约束。要求在修改表时为其添加主键约束。
    根据题目要求,具体语法如下:

    ALTER TABLE books
    ADD CONSTRAINT pk_books_id PRIMARY KEY(id);
    
    

    删除主键约束

    • 删除主键约束主要使用的是ALTER TABLE 语句,具体用法如下:
    ALTER TABLE table_name
    DROP CONSTRAINT constraint_name;
    

    例:删除图书信息表(books)中的主键约束。
    根据题目要求,具体语法如下:

    ALTER TABLE books
    DROP CONSTRAINT pk_books_id;
    
    

    其他约束和主键约束设置删除等操作类似,只是关键字不同。

    各关键字如下:
    外键约束 REFERENCES
    唯一约束 UNIQUE
    检查约束 CHECK
    默认值约束 DEFAULT

                                未经允许,请勿转载  谢谢!
    
    展开全文
  • sql 关于一表个主键唯一性的约束

    万次阅读 2019-02-27 17:28:15
    1.对于一般的,我们只需设一个主键,防止重复,但是我们如果设置多个主键,是每个主键唯一性吗?还是多个主键组合起来具有唯一性 2.答案肯定是多个主键合起来具有唯一性,话说太多,现在上例子 3.例如,我建...

    1.对于一般的表,我们只需设一个主键,防止重复,但是我们如果设置多个主键,是每个主键都有唯一性吗?还是多个主键组合起来具有唯一性

    2.答案肯定是多个主键合起来具有唯一性,话说太多,现在上例子

    3.例如,我建了有三个主键的表,如图:

    4.我可以如下图所示添加数据,说明各个主键的唯一性不是单独的,如果是单独的,肯定无法添加了

    5.但是我不可如下图,插入数据:

     

    展开全文
  • oracle对表添加主键约束的sql语句

    万次阅读 2017-02-27 08:57:46
    –创建主外键(可以在创建的同时添加主外键约束,也可以  ...—–方法创建的同时,添加主键约束 语法: create table 表名  (  列名1 数据类型及长度 constraint 主键名称(一般主键名称为”

    转自:http://blog.csdn.net/u014455929/article/details/52374523

    https://zhidao.baidu.com/question/1958170407835555540.html

    –创建主外键(可以在创建表的同时添加主外键约束,也可以 
    –创建完成后再添加约束 )

    —–方法一:表创建的同时,添加主键约束

    语法:

    create table 表名 

    列名1 数据类型及长度 constraint 主键名称(一般主键名称为”PK_”开头) primary key, 
    列名2 数据类型及长度 not null,——-not null 约束该列不为空,不写表示可以为空 
    列名3 数据类型及长度

    )tablespace 表空间名称;——-指定将该表放在某个表空间里,可以省略不指定

    例: 
    create table T_DEPOSIT 
    (savingid VARCHAR2(20) constraint pk_savingid primary key, 
    savingname VARCHAR2(20) not null, 
    descrip VARCHAR2(50) 
    )tablespace ATM_tablespace;

    ————注意————- 
    CREATE TABLE T_cardInfo –银行卡信息表 

    cardID varchar2(19) primary key, 
    —— 如果此处这样定义主键,则主键名称系统自己定义设置 
    );

    —–方法二:表创建后,添加主键约束 
    语法: 
    alter table 表名 
    add constraint 主键名称(一般主键名称为”PK_”开头) primary key(要设为主键的列名); 
    例: 
    alter table T_Grade 
    add constraint pk_gradeId primary key (gradeId);

    、、、、、、、、、

    查询出所有的用户表。
    查所有用户的表在all_tables
    主键名称、外键在all_constraints
    索引在all_indexes
    但主键也会成为索引,所以主键也会在all_indexes里面。
    具体需要的字段可以DESC下这几个view,dba登陆的话可以把all换成dba。
    查询用户表的索引(非聚集索引):
    select  *  from  user_indexes
    where  uniqueness  =  'NONUNIQUE '
    查询用户表的主键(聚集索引):
    select  *  from  user_indexes
    where  uniqueness  =  'UNIQUE '
    1、查找表的所有索引(包括索引名,类型,构成列):
    select t.*,i.index_type from user_ind_columns t,user_indexes i where t.index_name = i.index_name and t.table_name = i.table_name and t.table_name = 要查询的表
    2、查找表的主键(包括名称,构成列):
    select cu.* from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'P' and au.table_name = 要查询的表
    3、查找表的唯一性约束(包括名称,构成列):
    select column_name from user_cons_columns cu, user_constraints au where cu.constraint_name = au.constraint_name and au.constraint_type = 'U' and au.table_name = 要查询的表
    4、查找表的外键(包括名称,引用表的表名和对应的键名,下面是分成多步查询):
    select * from user_constraints c where c.constraint_type = 'R' and c.table_name = 要查询的表
    查询外键约束的列名:
    select * from user_cons_columns cl where cl.constraint_name = 外键名称







    展开全文
  • 注意:一张中最多有一个主键约束。主键类型:单字段主键、多字段联合主键。 唯一约束 删除主键约束 显示 添加唯一约束 默认约束 ...
  • 中添加主键约束

    千次阅读 2010-04-01 15:50:00
    中添加主键约束 语法: alter table 表名 add constraint 主键名 primary KEY(ID);//ID表示建主键的列 示例: CREATE TABLE mxm01 ( ID NUMBER, NAME VARCHAR2(10) ); INSERT INTO mxm01 VALUES (1,a);
  • 发现mysql一个表可以有几个唯一索引

    千次阅读 2018-04-26 09:07:44
    mysql一个表可以有多个唯一索引。如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该用关键字UNIQUE把它定义为一个唯一索引。这么做的好处:一是简化了MySQL对这个索引的管理工作,...
  • 什么是约束? 数据库—由若干张数据组成...例如:每个有一个必须要指定的字段 2.区域完整性 针对中的某个字段进行特殊化限制 3.参照完整性 之间的一种特殊化关联限制 约束类型(6): 1.主键约束(PR...
  • CREATE TABLE 表名 ( ...... CONSTRAINT 约束名称 PRIMARY KEY(受约束列名); );
  •  如果为指定了主键约束,数据库引擎将通过为主键列自动创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还允许对数据进行快速访问。  如果对多列定义了主键约束,则列中...
  • 主键约束和外键约束的完整性

    千次阅读 2011-09-21 11:57:01
    在执行DML语句(例如INSERT、...下面来看几个介绍主键约束的例子。customers的主键是customer_id列,这意味着customer_id列中保存的每一个值都必须是唯一的。如果试图插入一个与主键列值重复的行,数据库就会返回...
  • 首先我们来想象一下,前篇文章在我们操作数据库的过程中,自由度是很高的,想给哪个赋值就给哪个赋值,但是这样子,就会造成我们所创建的数据库数据不完整,例如我创建一个学生信息,你可能添加时候忘了添加学号...
  • 约束分为种状态validate/novalidate,enable/disable,可以通过alter table .. modify constraint ....enable/disable validate/novalidate修改 同时约束也分为2种模式,deferred/immediate,这里不做讨论.因为...
  • 主键(primary key)约束、外键(foreign key)约束、唯一(unique)约束、检查...NOT NULL(非空)、UNIQUE Key(唯一约束)、PRIMARY KEY(主键约束)、FOREIGN KEY(外键约束)、CHECK约束 Oracle使用SYS_Cn格式命名约
  • Oracle 创建主键,外键, check约束的种方法: ...//添加主键约束 Create table userinfo (userid number(20)constraint pk_user primary key ,uname varchar(20)); Create table userinfo(userid number(20),u
  • 1、多的创建 ...1.2创建一个商品分类的category 1.2.1 商品分类:手机数码,鞋靴箱包,香烟酒水,酸奶饼干,零食 1.分类的ID 2.分类的名称 3.分类描述 1.2.2 在thing数据库中创建商品分类这个 c...
  • 主键

    2014-12-18 09:18:23
    每个只能个主键。 若要设置的主键,请在设计视图中打开。选择要使用的字段,然后在功能区上单击“主键”。 什么是好的主键? 一个好的候选主键具有以下几个特征: 1、唯一标识每一行 2、从不为空或为 ...
  • create table a( id varchar(20) not null primary key, name varchar(30) ); create table b( id varchar(20) not null primary key ); ...id varchar(20) not null primary key ...alter table b add constraint a_id ...
  • 小的应用系统一般也几个表,大型系统一般上千个。    我们以学生成绩查询为例来讲解的关联。除了Student,这里我们需要新建成绩Grade:   Sno Cno Grade S01 ...
  • 一个表只能有一个主键,但可以有多个候选索引。主键常常与外键构成参照完整性约束,防止出现数据不一致。主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引...
  • 文章目录1、约束简介2、非空约束(not null、nk)2.1 范例1:使用非空约束2.2 范例2:正确地增加语句2.3 范例3:错误地增加语句3、唯一约束(unique、uk)3.1 范例1:使用唯一约束3.2 范例2:正确地增加语句3.3 范例3:...
  • Oracle主键约束的创建,添加和删除

    千次阅读 2014-07-04 18:10:58
    Oracle主键约束的创建,添加和删除  2010-06-27 10:40:16| 分类:learning...1、创建的同时创建主键约束 、无命名 create table accounts ( accounts_number number primary key, accounts_balance number
  • 1、关于主键:在建表时指定primary key字句即可:create table test...如果是对于已经建好的,想增加主键约束,则类似语法:alter table test add constraint pk_id primary key(id); 其中add constraint 和 pri...
  • SQLServer中五种约束,Primary Key约束、Foreign Key约束、Unique约束、Default约束和Check约束,今天使用SQL Server2008来演示下这约束的创建和使用的方法。... 这样的列或多列成为主键(Prim
  • 今天在写一个表维护页面时,表里已设置sequence 但是保存时仍报违反主键唯一约束的错误,经过排查,原来在创建好的时候,由数据库直接导入了部分数据,导致了sequence的开始自增序列不为当前ID最大值,故要从新...
  • JPA复合主键种实现--联合约束

    千次阅读 2017-12-06 13:49:36
    前言关于复合主键一般是三种方式,但必须创建...结合JPA使用时,关于Repository类中第二参数不再是Long(主键id类型),而是复合主键类名public interface XxxRepository extends JpaRepository,XxxPK> { } 主键
  • 数据完整性 ...1、解释:中的一个(一条记录)代表一个实体(entity) 2、作用:标识每一行数据不重复。行级约束。 3、约束类型:1、主键约束(primary key)2、唯一约束(unique)3、自动增长列(auto_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 57,845
精华内容 23,138
关键字:

一个表可以有几个主键约束