精华内容
下载资源
问答
  • 主键约束: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 

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

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

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

    展开全文
  • Oracle主键约束

    千次阅读 2017-11-22 11:39:28
    一张表中只能设计一个主键约束 主键约束可以由多个字段构成,这种情况被称为联合主键或复合主键   三 主键约束 1、在创建时设置主键约束 CREATE TABLE tabl_name( column_name datatype PRIMARY_KEY,... )...
    一 作用
    确保表当中每一行数据的唯一性
     
    二 主键特点
    非空 唯一
    一张表中只能设计一个主键约束
    主键约束可以由多个字段构成,这种情况被称为联合主键或复合主键
     
    三 主键约束
    1、在创建表时设置主键约束
    CREATE TABLE tabl_name(
    column_name datatype PRIMARY_KEY,...
    )
    1. SQL> create table userinfo_p
    2. 2(id number(6,0) primary key,
    3. 3 username varchar2(20),
    4. 4 userpwd varchar2(20));
    5. 表已创建。
    6. SQL> desc userinfo_p
    7. 名称是否为空?类型
    8. -----------------------------------------------------------------------------
    9. ID NOT NULL NUMBER(6)
    10. USERNAME VARCHAR2(20)
    11. USERPWD VARCHAR2(20)
    CONSTRAINT constraint_name
    PRIMARY KEY(column_name1,...)
    1. SQL> create table userinfo_p1(
    2. 2 id number(6,0),
    3. 3 username varchar2(20),
    4. 4 userpwd varchar2(20),
    5. 5 constraint pk_id_username primary key(id,username));
    6. 表已创建。
    7. SQL> desc userinfo_p1;
    8. 名称是否为空?类型
    9. -----------------------------------------------------------------------------
    10. ID NOT NULL NUMBER(6)
    11. USERNAME NOT NULL VARCHAR2(20)
    12. USERPWD VARCHAR2(20)
    13. SQL> desc user_constraints
    14. 名称是否为空?类型
    15. -----------------------------------------------------------------------------
    16. OWNER VARCHAR2(30)
    17. CONSTRAINT_NAME NOT NULL VARCHAR2(30)
    18. CONSTRAINT_TYPE VARCHAR2(1)
    19. TABLE_NAME NOT NULL VARCHAR2(30)
    20. SEARCH_CONDITION LONG
    21. R_OWNER VARCHAR2(30)
    22. R_CONSTRAINT_NAME VARCHAR2(30)
    23. DELETE_RULE VARCHAR2(9)
    24. STATUS VARCHAR2(8)
    25. DEFERRABLE VARCHAR2(14)
    26. DEFERRED VARCHAR2(9)
    27. VALIDATED VARCHAR2(13)
    28. GENERATED VARCHAR2(14)
    29. BAD VARCHAR2(3)
    30. RELY VARCHAR2(4)
    31. LAST_CHANGE DATE
    32. INDEX_OWNER VARCHAR2(30)
    33. INDEX_NAME VARCHAR2(30)
    34. INVALID VARCHAR2(7)
    35. VIEW_RELATED VARCHAR2(14)
    36. SQL>select constraint_name from user_constraints where table_name='USERINFO_P1';
    37. CONSTRAINT_NAME
    38. ------------------------------
    39. PK_ID_USERNAME
    40. SQL>select constraint_name from user_constraints where table_name='USERINFO_P';
    41. CONSTRAINT_NAME
    42. ------------------------------
    43. SYS_C0011056
     
    2、在修改表时添加主键约束
    ADD CONSTRAINT constraint_name
    PRIMARY KEY(column_name1,...);
    1. SQL> alter table userinfo
    2. 2 add constraint pk_id primary key(id);
    3. 表已更改。
    4. SQL> desc user_constraints
    5. 名称是否为空?类型
    6. -----------------------------------------------------------------------------
    7. OWNER VARCHAR2(30)
    8. CONSTRAINT_NAME NOT NULL VARCHAR2(30)
    9. CONSTRAINT_TYPE VARCHAR2(1)
    10. TABLE_NAME NOT NULL VARCHAR2(30)
    11. SEARCH_CONDITION LONG
    12. R_OWNER VARCHAR2(30)
    13. R_CONSTRAINT_NAME VARCHAR2(30)
    14. DELETE_RULE VARCHAR2(9)
    15. STATUS VARCHAR2(8)
    16. DEFERRABLE VARCHAR2(14)
    17. DEFERRED VARCHAR2(9)
    18. VALIDATED VARCHAR2(13)
    19. GENERATED VARCHAR2(14)
    20. BAD VARCHAR2(3)
    21. RELY VARCHAR2(4)
    22. LAST_CHANGE DATE
    23. INDEX_OWNER VARCHAR2(30)
    24. INDEX_NAME VARCHAR2(30)
    25. INVALID VARCHAR2(7)
    26. VIEW_RELATED VARCHAR2(14)
    27. SQL>select constraint_name from user_constraints where table_name='USERINFO';
    28. CONSTRAINT_NAME
    29. ------------------------------
    30. PK_ID
    3、更改约束名称
    RENAME CONSTRAINT old_name
    TO new_name
    1. SQL> alter table userinfo
    2. 2 rename constraint pk_id to new_pk_id;
    3. 表已更改。
    4. SQL>select constraint_name from user_constraints where table_name='USERINFO';
    5. CONSTRAINT_NAME
    6. ------------------------------
    7. NEW_PK_ID
    4、删除主键约束
    DISABLE|ENABLE CONSTRAINT constraint_name
    1. SQL> alter table userinfo
    2. 2 disable constraint new_pk_id;
    3. 表已更改。
    4. SQL>select constraint_name,status from user_constraints where table_name='USERINFO';
    5. CONSTRAINT_NAME STATUS
    6. --------------------------------------
    7. NEW_PK_ID DISABLED
    DROP CONSTRAINT constraint_name
    1. SQL> alter table userinfo
    2. 2 drop constraint new_pk_id;
    3. 表已更改。
    4. SQL>select constraint_name,status from user_constraints where table_name='USERINFO';
    5. 未选定行
    DROP PRIMARY KEY[CASCARDE]
    CASCARDE用于级联删除。
    1. SQL> desc userinfo_p
    2. 名称是否为空?类型
    3. -----------------------------------------------------------------------------
    4. ID NOT NULL NUMBER(6)
    5. USERNAME VARCHAR2(20)
    6. USERPWD VARCHAR2(20)
    7. SQL> alter table userinfo_p
    8. 2 drop primary key;
    9. 表已更改。
    10. SQL> desc userinfo_p
    11. 名称是否为空?类型
    12. -----------------------------------------------------------------------------
    13. ID NUMBER(6)
    14. USERNAME VARCHAR2(20)
    15. USERPWD VARCHAR2(20)
    展开全文
  • sql 关于一表个主键唯一性的约束

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

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

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

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

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

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

     

    展开全文
  • SQL Server主键约束

    2020-05-13 19:02:20
    每个都应该有一个主键,并且每个表只能有一个主键。主键约束操作包含了添加约束和删除约束,修改约束其实是添加约束或者删除约束。添加主键约束比较 简单,但是删除一个没有约束名的主键约束则比较复杂,如果不是...

    PRIMARY KEY:主键 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。主键约束操作包含了添加约束和删除约束,修改约束其实是添加约束或者删除约束。添加主键约束比较 简单,但是删除一个没有约束名的主键约束则比较复杂,如果不是很不了解SQL Server的话则比很难实现该功能。

    主键约束操作基本语句

    如果是在新建表的时候添加主键约束比较简单,直接在列名后加入primary key即可,标准的添加主键约束的SQL脚本如下:

    create table 表名 (    字段名1 int not null,    …………,
       [constraint 约束名primary key (字段名1, …)
    )

    其中约束名可选(建议选择,否则系统会分配随机临时名称)。这种方法可以任意添加多个或一个主键约束。

    对已有表添加主键约束,与上面的脚本类似,如下:

    alter table 表名 [add constraint 约束名primary key(字段名1 ,… )

    其中约束名与上相同,可选,建议指定。

    SQL Server删除主键约束与MySQL不同,需要主键的约束名称才能删除,SQL Server标准的删除主键的脚本如下:

    ALTER TABLE 表名DROP CONSTRAINT 约束名

     

     

    展开全文
  • 约束: 概念:对表的数据进行限定,保证数据的正确性、有效性和完整性 分类: 1、主键约束:primary key 2、非空约束:not null ... (2)、一张表只能一个字段为主键  (3)、主键就是表中记录的唯...
  • 主键约束和唯一约束

    千次阅读 2019-03-07 21:30:59
    主键约束和唯一约束主键约束和唯一约束的区别普通索引和唯一索引Mysql的索引普通索引(非唯一索引)唯一索引唯一索引主键约束的唯一索引唯一约束的唯一索引创建唯一索引删除主键约束和唯一约束自动创建的唯一索引 ...
  • 作用上:主键的目的用来保证每一条数据都且只有一个编号,而唯一约束目的则是避免某些字段录入重复数据,一个服务于一个服务于字段 总结:二者相同点在于都不会让字段的数据重复,效果相似之处,但是目的...
  • 创建主键约束

    2012-08-01 22:41:37
    一个表只能有一个Primary Key约束,不能在主键内的任何列输入NULL值。 if object_id('house')is not null drop table house create table house (房屋登记号 int constraint pk_hid primary key,
  • SQL主键约束和外键约束

    千次阅读 2018-01-17 10:45:06
    主键约束 SQL PRIMARY KEY 约束 ...每个都应该有一个主键,并且每个表只能有一个主键。 CREATE TABLE 时的 SQL PRIMARY KEY 约束 下面的 SQL 在 “Persons” 创建时在 “P_Id” 列上创建 PRIMARY
  • 1.主键约束一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。 2.Unique约束:一个表可以多个Unique约束,Unique的字段可以为NULL。 3.主键与...
  • 主键约束,唯一约束与默认约束

    千次阅读 2016-07-05 11:21:42
    每张数据表只能存在一个主键 主键保证记录的唯一性 主键自动为NOT NULL AUTO_INCREMENT 自动编号,且必须与主键一起使用。但是主键不一定要和AUTO_INCREMENT一起使用 默认情况下,起始值为1,每次的增量为1 AUTO_...
  • 1,是在库,每数据库包含N张表 一般是二维的形式 2,由行和列组成:可以将复杂的数据保存在简单的表中 表中的每行就是条完整的记录 表中的列用于保存每条记录特定的信息 2,创建 1,使用sql...
  • 外键必须是另一个表主键

    千次阅读 2019-03-01 14:48:49
    不一定是主键,但必须是唯一性索引。 主键约束和唯一性约束都是唯一性索引。 FOREIGN KEY 约束 ...在外键引用,当一个表的列被引用作为另一个表的主键值的列时,就在两之间创建了链接。这...
  • MySQL||主键(primary key)及主键约束

    千次阅读 2019-07-24 22:43:02
    主键 主键(PRIMARY KEY)”...主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能...
  • 主键约束:默认不能为空...    --一张表只能有一个主键 唯一约束:列里面的内容,必须是唯一的,不能出现重复的情况,可以为空     --唯一约束不可以作为其他的外键     --一张可以多个唯一约束 ...
  • 在修改时给添加联合主键约束 添加语法如下: “ALTER TABLE table_name ADD CONSTRAINT pk_namePRIMARY KEY(列名1,列名2);”...
  • 今天在做数据库作业时,发现了问题,我不小心忘了写主键约束,查了书籍,全都是在插入数据时写的约束,上网找到了一个解决方案试验后找到了它的公式。 alter table 需要插入主键的表名 add primary key(列名); 这...
  • MySQL主键约束、非空约束、唯一约束、外键约束 概念:对表的数据进行约束(限定),保证数据的正确性、有效性和完整性 ...一张仅能有一个字段为主键 主键是表中记录的唯一标识 在创建时...
  • 约束 * 概念: 对表的数据进行限定,保证数据的正确性、有效性和... 主键约束:primary key 2. 非空约束:not null 3. 唯一约束:unique 4. 外键约束:foreign key * 非空约束:not null,值不能为null 1....
  • SQL primary key 约束primary key 约束唯一标识数据库表中的每...SQL foreign key 约束一个表中的 foreign key 指向另一个表中的 primary key。SQL unique 约束unique约束唯一标识数据库表中的每条记录。unique和 p...
  • 添加语法如下: “ALTER TABLE table_...【示例1】假设订房信息(Orderinfo),没有创建主键,现在需要将Orderinfo表中的customerID和OrderID两列设置成主键。创建的语法如下: “ALTER TABLE ORDERINFO ADD...
  • 1.主键约束一个表只能有一个主键约束。主键可以是单个字段,也可以是多个字段。无论是哪种情况,其所有字段都是NOT NULL。 2.Unique约束:一个表可以多个Unique约束,Unique的字段可以为NULL。 3.主键与...
  • MySQL -- 主键约束

    千次阅读 2018-03-23 16:03:46
     主键,是一个表中一列或者多列的组合,规定主键不能重复,也不能为空值,且每个表只能有一个主键,主键是唯一性索引的一种,但二者并不等同。 在MySQL的官方说明,MySQL是这样处理主键约束的: Normally, ...
  • mysql如何修改唯一性约束跟主键约束

    千次阅读 2017-09-20 12:32:34
    一、如何添加主键约束...#千万别忘了加(),同时要保证结构没有其他的主键,因为一个表中只能有一个主键。2、添加唯一性约束 执行语法:alter table tableName addunique(column_name);#一个表中可以多个唯...
  • 先删除具有外键约束表中的数据 然后在删除另一个表中的指定ID的数据 ----------------------------------------------------------------------------------- 我的语句是这样的: truncate table bb;...
  • 一个表的外键关联到主主键约束或者unique约束都可以,不一定非要主键约束追问:也就是意思是只要能唯一标识一张表中数据,就可以做外键?追答:嗯,但是不能是数据上控制的,必须要两个约束之一才行
  • 数据库MySQL之主键约束、...每张数据表只能存在一个主键 主键保证记录的唯一性 主键自动为NOT NULL,也就是说必须要为主键赋值。但如果主键选择了AUTO_INCREMENT,那么不需要手动赋值。 auto_increment必须和主键pr...
  • 唯一约束和主键约束的区别

    千次阅读 2017-10-18 23:42:00
    主键又称主键约束,它也是一种约束,看下它和唯一约束的创建语法: alter table Person add constraint PK_Id primary key (Id) alter table Person add constraint UQ_Name unique...·同一张表只能有一个主键,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 67,714
精华内容 27,085
关键字:

一个表中只能有一个主键约束