MySQL - 5. 约束类型
1 . 非空约束
非空约束(Not Null constraint),指字段的值不能为空。对于使用了非空约束的字段如果用户在添加数据时,没有指定值,数据库系统会报错。
语法规则:
列名 数据类型 NOT NULL
创建表的时候指定非空约束 create table player( player_id int, player_name varchar(20) not null );
修改列时,指定非空约束 alter table player modify player_name varchar(20)not null;
修改列时,删除非空约束 alter table player modify player_name varchar(20)not null;
2 . 主键约束
主键约束(Primary Key Constraint),要求主键列的数据唯一,并且不允许为空,主键能够唯一地标识表中的一条记录。一张表中最多有一个主键约束。
主键分为单字段主键和多字段联合主键。
· 单字段主键是由一个字段(列)组成
1.在定义列的同时指定主键
列名 数据类型 PRIMARY KEY;
2.在列定义的后边指定主键
[CONSTRAINT<约束名>]PRIMARY KEY(列名);
创建表的时候指定主键约束1 create table player( player_id int primary key );
创建表的时候指定主键约束2 create table player( player_id int, constraint pk_id primary key(player_id) );
追加单字段主键 ALTER TABLE player ADD PRIMARY KEY (player_id);
2 . 1 主键约束(多字段联合主键 - 复合主键)
多字段联合主键(或者叫复合主键) 主键有多个字段(列)联合组成。 PRIMARY KEY(字段1,字段2, ...字段n);
创建表时指定联合主键 create table player( club_id int, country_id CHAR(18), PRIMARY KEY(club_id,country_id) );
创建表时未指定联合主键,后添加联合主键 create table player( club_id int, country_id CHAR(18), ); ALTER TABLE player MODIFY club_id INT PRIMARY KEY; ALTER TABLE player ADD PRIMARY KEY(club_id); ALTER TABLE player ADD CONSTRAINT PK_ID PRIMARY KEY(club_id);
删除主键 ALTER TABLE player DROP PRIMARY KEY;
3 . 唯一约束
唯一约束(Unique Constraint)要求该列唯一,允许为空,唯一约束可以确保一列或者几列不出现重复值
语法规则:
1.定义完列之后直接指定唯一约束:
列名 数据类型 UNIQUE
2.定义完所有列之后指定唯一约束:
[CONSTRAINT<约束名>]PRIMARY KEY(列名)
创建表时添加唯一约束 create table player( club_id int PRIMARY KEY, country_id CHAR(18) UNIQUE NOT NULL ); 或者: create table player( club_id int PRIMARY KEY, country_id CHAR(18) NOT NULL CONSTRAINT uk_bname UNIQUE(country_id) );
修改表时添加唯一约束 ALTER TABLE player MODIFY club_id INT UNIQUE; ALTER TABLE player ADD UNIQUE(club_id); alter table player ADD CONSTRAINT uk_bname UNIQUE(club_id);
删除唯一约束 ALTER TABLE player DROP INDEX uk_bname ALTER TABLE player DROP KEY uk_bname
4 . 默认约束
默认约束(Default Constraint)指定某列的默认值。 语法规则: 列名 数据类型 DEFAULT 默认值
创建表时添加默认约束 create table player( club_id int PRIMARY KEY, country CHAR(18) DEFAULT '阿根廷' );
修改表时添加默认约束 ALTER TABLE player MODIFY country VARCHAR(10) DEFAULT '阿根廷'; ALTER TABLE player ALTER COLUMN country SET DEFAULT '阿根廷';
删除默认约束 ALTER TABLE player MODIFY country VARCHAR(20); ALTER TABLE player ALTER COLUMN country DROP DEFAULT;
5 . 外键约束
外键:
外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。
外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。
外键的作用是保持数据的一致性,完整性。
语法格式: [CONSTRAINT <外键约束名>] FOREIGN KEY (列名) references <主表名>(主键)
创建表时添加外键约束 create table bookcategory( category_id int PRIMARY KEY, category VARCHAR(18), parent_id int ); create table bookinfo( book_id int PRIMARY KEY, book_category_id int, CONSTRAINT fk_cid FOREIGN KEY(book_category_id) REFERENCES bookcategory(category_id) );
修改表时添加外键约束 alter table bookinfo add foreign key(book_category_id) references bookcategory(category_id);
删除外键约束 ALTER TABLE bookinfo DROP FOREIGN KEY fk_cid;
查外键关联关系 (指定被引用表,查哪些表对其有外键引用) select * from information_schema.key_column_usage where referenced_table_name='club';
6 . 自增列
建表时为某列增加auto_increment属性 create table player( id int auto_increment, name varchar(20) );
表不存在primary key字段,新增一个自增字段,如果存在主键,则需先删除主键
注意:auto_increment字段不能有默认值
alter table test add column idgo int primary key auto_increment first;
表不存在主键,给一个字段添加自增属性,需同时设为主键 alter table test modify id int primary key auto_increment;
删除列的自增属性,即修改列时删除定义主键即自增属性命令,自增属性会删除,而主键约束保留 alter table test modify id int primary key auto_increment;
7 . 注释列
建表时为某列增加备注属性 create table player( id int auto_increment comment '这里是列备注信息', name varchar(20) )comment '表注释';
给已有列添加备注属性,注意:列名有两次 alter table test change column name name text not null comment '列备注信息';
修改表注释
alter table test1 comment '修改后的表的注释';
修改列注释 alter table test1 modify column id int comment '修改后的字段注释';
查看每列的备注 select column_name,column_comment from INFORMATION_SCHEMA.columns where table_name='my_table'; 或 show full columns from my_table;