mysql约束_mysql约束

1.主键约束

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

1.1 增加主键

方案一:在创建表时:

CREATE TABLEtb_user(

idINT PRIMARY KEYAUTO_INCREMENT comment 'id',

usernameVARCHAR(255) comment '用户名',

ageINT,

PASSWORDVARCHAR(255),

role_idINT,FOREIGN KEY(role_id) REFERENCEStb_role(id)

)charset utf8;

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

CREATE TABLEtb_grade(number CHAR(10) COMMENT '学号',

courseCHAR(10) COMMENT '课程代码',

scoreTINYINT 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 TABLEtb_student (

sidINT 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');

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

569987467eac56dab4ceac2a5b46d205.png

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

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

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

--下一次的值

alter table tb_student auto_increment = 20;

9b60eccbf2646c78842e5a17448af846.png

--自增长变量,系统变量

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 TABLEtb_student (

sidINT PRIMARY KEY AUTO_INCREMENT, --主键自增长

sname VARCHAR(20) UNIQUE COMMENT '学生姓名')CHARSET utf8;

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

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

CREATE TABLEtb_user(

idINT PRIMARY KEYAUTO_INCREMENT,

usernameVARCHAR(30),

pwdVARCHAR(30),UNIQUE(username, pwd)

)

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

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

CREATE TABLEtb_student (

sidINT 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

ba36f43e98ff2d1b66a5908fdb31d405.png

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

--删除索引(unique唯一索引)

ALTER TABLE tb_student DROP INDEX sname;

4.外键约束

外键也是索引

4.1 添加外键

方法一:创建表时,

CREATE TABLEtb_student (

sidINT PRIMARY KEY AUTO_INCREMENT, --主键自增长

sname VARCHAR(20) COMMENT '学生姓名',

c_idINT,FOREIGN KEY(c_id) REFERENCEStb_clazz(id)

)CHARSET utf8;

结果:产生一个key,和一个外键约束   (外键要求字段本身必须是索引)

9a7741ede336c894146f5f3e66dbb181.png

568933107a43ab5d7e307f6fad53ce29.png

外键默认名称为:tb_student_ibfk_1   ->表名_ibfk_1

方法二:创建表后

ALTER TABLE tb_student ADD [CONSTRAINT 外键名字] FOREIGN KEY 外键字段 REFERENCES父表(id)ALTER TABLE tb_student ADD [CONSTRAINT f_student_clazz_1] FOREIGN KEY c_id REFERENCES tb_clazz(id)

4.2 修改&删除外键

外键不可修改,只能先删除,在添加。一个表可以有多个外键

--删除外键,外键名

ALTER TABLE tb_student DROP FOREIGN KEY tb_student_ibfk_1;

删掉外键约束后,字段的索引仍然存在。

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值