码迷,mamicode.com
首页 > 数据库 > 详细

mysql约束

时间:2018-10-27 00:01:49      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:1.3   nbsp   业务   varchar   方案   null   重复   --   插入数据   

1.主键约束

  一张表中只能有一个主键,主键数据不能重复,主键默认不可以为空。

1.1 增加主键

方案一:在创建表时:

  

CREATE TABLE tb_user(
  id INT PRIMARY KEY AUTO_INCREMENT comment ‘id‘,
  username VARCHAR(255) comment ‘用户名‘,
  age INT,
  PASSWORD VARCHAR(255),
  role_id INT,
  FOREIGN KEY(role_id) REFERENCES tb_role(id)
)charset utf8;

 

 

方案二:在创建表时,在所有字段后面,使用primary key(字段列表),如果有2个及以上各字段,则成为复合主键

CREATE TABLE tb_grade(
    number CHAR(10) COMMENT 学号,
    course CHAR(10) COMMENT 课程代码,
    score TINYINT UNSIGNED DEFAULT 0 COMMENT 成绩,
    -- 学号和课程号 组合唯一
    PRIMARY KEY (number, course)
)CHARSET utf8;

 

 

方案三:当表已经创建了,可以修改字段属性,也可以额外追加主键

-- 通过修改字段
ALTER TABLE 表名 MODIFY number CHAR(10) PRIMARY KEY  COMMENT ‘‘;

-- 追加主键
ALTER TABLE 表名 ADD PRIMARY KEY(字段列表);
-- 例如
ALTER TABLE tb_grade ADD PRIMARY KEY(number, score);

 

 

前提:表中的数据符合主键条件,否则无法追加主键。

 

1.2 更新主键 & 删除主键

  必须先删除主键,然后才能更新主键。

-- 删除主键, 因为一个表中只有一个主键,所以不需要指定主键名称
ALTER TABLE tb_grade DROP PRIMARY KEY; 

 

1.3 主键分类

  在开发中,很少使用业务数据作为主键。大部分使用逻辑性的字段(值和业务逻辑没有关系)作为主键,成为逻辑主键

  逻辑主键:int primary key

  业务主键:s_id char(10) primary key

 

2 自增长属性 

2.1 添加自增长

  当字段不给值,或者给默认值,或者为null时,会自动的被系统触发,系统会用最大值+1,得到一个新的值。

  自增长通常和主键搭配使用。primary key auto_increment

  

  自增长特定:auto_increment

  • 自增长的字段必须是一个索引。
  • 自增长字段必须是整型的数字。
  • 一张表最多有一个自增长字段

2.2 使用自增长

表:tb_student

CREATE TABLE tb_student (
    sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
    sname VARCHAR(20) COMMENT 学生姓名
)CHARSET utf8;

 

  插入数据:

-- 触发自增长
insert into tb_student(sname) values(张三);

-- 使用默认值
insert into tb_student values(null, 莉莉丝);
insert into tb_student values(default, hh);
-- 可以指定自增长字段,但是下次插入时,系统还是使用最大值+1
INSERT INTO tb_student VALUES(10, admin);

 

  每次插入数据后,就会把下次的自增长字段值准备好。

技术分享图片

 

2.3 修改自增长  自增长是表选项

   一张表只能有一个自增长字段,因此,要修改自增长,必须先删除自增长,然后重新添加自增长字段。

  修改当前自增长的下一次准备值:只能改成更大的,如果修改成更小的,则不会生效

-- 下一次的值
alter table tb_student auto_increment = 20;

 

技术分享图片

-- 自增长变量,系统变量
SHOW VARIABLES LIKE auto_increment%;

 

 

 2.4 删除自增长

  自增长是字段的属性:可以使用modify对字段进行重新定义。

-- 删除自增长
ALTER TABLE tb_student MODIFY sid INT PRIMARY KEY;  -- 错误:主键约束是独立的,不是字段的属性,不可以重复定义
ALTER TABLE tb_student MODIFY sid INT;

 

 

 

3 唯一性约束

  一张表中往往有很多字段具有唯一性,数据不能重复:unique

  unique允许字段为null,而且允许多个记录为null

 

3.1 添加unique约束

方案一:创建表时,字段后面加上 unique / unique key

CREATE TABLE tb_student (
    sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
    sname VARCHAR(20) UNIQUE COMMENT 学生姓名
)CHARSET utf8;

 

  注意:unique+非空 和主键的效果一样,但不是主键。

 

方案二:创建表时,字段后面  unique(字段列表),复合唯一键。

CREATE TABLE tb_user(
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(30),
    pwd VARCHAR(30),
    UNIQUE(username, pwd)
)

 

  注意:主键约束、唯一约束不是字段的属性。

方案三:创建表后,追加唯一键

CREATE TABLE tb_student (
    sid INT PRIMARY KEY AUTO_INCREMENT,  -- 主键自增长
    sname VARCHAR(20) COMMENT 学生姓名
)CHARSET utf8;

-- 在创建表后,追加unique
ALTER TABLE tb_student ADD UNIQUE(sname);

 

 

3.2 删除唯一键

  唯一键可以有多个。唯一键本身是一个索引,每个索引都有一个唯一的名字,因此删除索引:alter table drop index xxx

技术分享图片

  索引默认使用字段名称作为索引名。

-- 删除索引(unique唯一索引)
ALTER TABLE tb_student DROP INDEX sname;

 

 

 

 

 

end

mysql约束

标签:1.3   nbsp   业务   varchar   方案   null   重复   --   插入数据   

原文地址:https://www.cnblogs.com/zhuxiang1633/p/9859014.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!