Mysql 完整性约束

定义:

  完整性约束是对字段进行限制,从而符合该字段达到我们期望的效果比如字段含有默认值,不能是NULL等, 主要有唯一、自增、主键、外键约束

唯一约束:

  唯一约束可以有多个但索引列的值必须唯一,索引列的值允许有空值。

  如果能确定某个数据列将只包含彼此各不相同的值,在为这个数据列创建索引的时候就应该使用关键字UNIQUE。

  示例:

CREATE TABLE t5(
  id   INT AUTO_INCREMENT,
  name VARCHAR(20) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY UK_t5_name (name)
);
-- 建表后添加约束:

alter table t5 add constraint UK_t5_name unique (name);

-- 如果不需要唯一约束,则可以这样删除

ALTER TABLE t5 DROP INDEX UK_t5_name;

语法:

-- 创建唯一约束:
create unique index UK_t5_name on t5 (name);
 
-- 建表后添加约束:
 
alter table t5 add constraint UK_t5_name unique (name);
 
-- 如果不需要唯一约束,则可以这样删除
 
ALTER TABLE t5 DROP INDEX UK_t5_name;

自增约束:

MySQL 每张表只能有1个自动增长字段,这个自动增长字段通常作为主键,也可以用作非主键使用,但是请注意将自动增长字段当做非主键使用时必须必须为其添加唯一索引,否则系统将会报错。

mysql> CREATE TABLE t4(
    ->   id INT NOT NULL,
    ->   name VARCHAR(20),
    ->   age INT UNIQUE AUTO_INCREMENT
    -> );
Query OK, 0 rows affected (0.13 sec)

主键约束:

主键是用于唯一标识一条记录的约束,如同身份证。

主键有两个约束:非空且唯一!

创建主键约束两种方式:

-- 方式1

CREATE TABLE t1(
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(20)
);

-- 方式2

CREATE TABLE t2(
  id INT NOT NULL,
  name VARCHAR(20)
);

主键约束的增加和删除:

添加主键 alter table tab_name add primary key(字段名称,...)
删除主键 alter table users drop primary key;

CREATE TABLE test(num INT PRIMARY KEY AUTO_INCREMENT);<br>
 -- 思考,如何删除主键?
    ALTER TABLE test modify id int;   -- auto_increment没了,但这样写主键依然存在,所以还要加上下面这句
    ALTER TABLE test drop primary key;-- 仅仅用这句也无法直接删除主键

 

主键注意事项:

注意:

1、一张表中最多只能有一个主键

2、表中如果没有设置主键,默认设置NOT NULL的字段为主键;此外,表中如果有多个NOT NULL的字段,则按顺序将第一个设置NOT NULL的字段设为主键。

结论:主键一定是非空且唯一,但非空且唯一的字段不一定是主键。

3、主键类型不一定必须是整型

复合主键约束:

所谓的复合主键 就是指你表的主键含有一个以上的字段。

如果一列不能唯一区分一个表里的记录时,可以考虑多个列组合起来达到区分表记录的唯一性,形式 

①创建:

create table sc (
    studentid int,
    courseid int,
    score int,
primary key (studentno,courseid)
);        
②修改:

alter table tb_name add primary key (字段1,字段2,字段3);

外键约束:

外键的定义语法:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)
                    REFERENCES tbl_name (index_col_name, ...)
    [ON DELETE {RESTRICT CASCADE SET NULL NO ACTION SET DEFAULT}]
    [ON UPDATE {RESTRICT CASCADE SET NULL NO ACTION SET DEFAULT}]

 

posted @ 2017-09-14 15:20  刘小伟  阅读(810)  评论(0编辑  收藏  举报