constraint mysql_MySQL(Constraint)

MySQL 约束作用:

约束用于限制加入表的数据的类型

MySQL 约束范围:

表约束

列约束(单列约束,多列约束)

MySQL key约束三种

主键约束(PRIMARY KEY)

唯一键值约束(UNIQUE KEY)

外键约束(FOREIGN KEY)

MySQL 其他约束:

非空约束(NOT NULL)

检查约束(CHECK)

默认约束(DEFAULT)

主键约束:

create table actor(f1 int, f2 text, PRIMARY KEY (f1[, f2...]));

create table actor(f1 int, f2 text, constraint xxx PRIMARY KEY (f1[, f2...]));

ALTER TABLE actor ADD PRIMARY KEY (f1[, f2...]);

ALTER TABLE actor ADD constraint xxx PRIMARY KEY (f1[, f2...]);

ALTER TABLE actor drop PRIMARY KEY;

唯一建约束

create table actor(f1 int unique, f2 text);

create table actor(f1 int unique, f2 text);

create table actor(f1 int, f2 text, UNIQUE KEY (f1[, f2...]));

create table actor(f1 int, f2 text, constraint xxx UNIQUE KEY (f1[, f2...]));

ALTER TABLE actor ADD UNIQUE KEY fname_actor (first_name,actor_id);

ALTER TABLE actor ADD constraint xxx UNIQUE KEY fname_actor (first_name,actor_id);

CREATE UNIQUE INDEX fname_actor ON actor (first_name,actor_id);

ALTER TABLE actor drop KEY fname_actor;

(drop index fname_actor on actor; )

唯一键值索引类型不能是 FULLTEXT 或者 SPATIAL 类型

外键约束

create table actor(f1 int, f2 text, FOREIGN KEY (f1[, f2...] REFERENCES ref_table (f1[, f2...));

create table actor(f1 int, f2 text, CONSTRAINT fk_lastname FOREIGN KEY (f1[, f2...] REFERENCES ref_table (f1[, f2...))

ALTER TABLE this_table ADD FOREIGN KEY (field1) REFERENCES ref_table (fieldA);

ALTER TABLE this_table ADD CONSTRAINT fk_lastname FOREIGN KEY (last_name) REFERENCES other_table (last_name);

CREATE FOREIGN key fname_actor ON actor (first_name,actor_id);

ALTER TABLE this_table DROP FOREIGN KEY fk_lastname;

外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作

外键约束语法

[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}]

外键约束语句:

CREATE TABLE

ALTER TABLE

外键约束触发事件:

ON DELETE、ON UPDATE表示事件触发限制

外键约束触发限制:

RESTRICT(限制外表中的外键改动)

CASCADE(跟随外键改动)

SET NULL(设空值)

SET DEFAULT(设默认值)

NO ACTION(无动作,默认的)

非空约束|可空约束

create table tablename(f1 int not null, f2 text);

create table tablename(f1 int, f2 text default null);

alter table tablename add column f1 int not null;

alter table tablename add column f2 int default null;

alter table tablename alter column f1 set not null;

alter table tablename alter column f2 set default NULL;

无删除该约束语句

检查约束

create table tablename(f1 int CHECK(f1>10), f2 int);

create table tablename(f1 int, f2 int, CHECK (f1>10 and f2>20));

create table tablename(f1 int, f2 int, CONSTRAINT xxx CHECK (f1>10 and f2>20));

alter table tablename add CHECK (f1>10);

alter table tablename add CONSTRAINT xxx CHECK (f1>10 and f2>20);

alter table tablename drop CHECK xxx;

MySQL中CHECK约束可以使用,但是是无效的,即MySQL并不会去执行检查

默认约束

create table tablename(f1 int DEFAULT xxx [ON UPDATE yyy], f2 text);

alter table tablename alter f1 SET DEFAULT xxx;

alter table tablename alter f1 DROP DEFAULT;

约束个数

MySQL表中只能有一个AUTO_INCREMENT字段,而且这个字段必须被定义为键

MySQL表中能有多个NULL字段

MySQL表中能有多个NOT NULL字段

MySQL表中能有多个DEFAULT NULL字段

MySQL表中能有多个NULL DEFAULT NULL字段

MySQL表中能有多个DEFAULT字段

MySQL表中能有多个CHECK字段

MySQL表中只能有一个PRIMARY KEY字段

MySQL表中能有多个UNIQUE KEY字段

MySQL表中能有多个FOREIGN KEY字段

ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

alter_specification:

ADD [COLUMN] create_definition [FIRST | AFTER column_name ]

or ADD INDEX [index_name] (index_col_name,...)

or ADD PRIMARY KEY (index_col_name,...)

or ADD UNIQUE [index_name] (index_col_name,...)

or ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}

or CHANGE [COLUMN] old_col_name create_definition

or MODIFY [COLUMN] create_definition

or DROP [COLUMN] col_name

or DROP PRIMARY KEY

or DROP INDEX index_name

or RENAME [AS] new_tbl_name

or table_options

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值