Mysql约束条件概述
Mysql增加约束条件的方式:
1. 列级约束:在定义列后面添加约束。
比如添加主键约束:
CREATE TABLE stuinfo( id INT PRIMARY KEY );
2.表级约束:在定义好列后添加约束。
比如添加外键:
CREATE TABLE stuinfo( id INT PRIMARY KEY, #表级约束 CONSTRAINT fk_class_no FOREIGN KEY(id) REFERENCES classinfo (class_no) );
----------
Mysql六个约束条件:
约束 | 说明 |
---|---|
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自增长 |
FOREIGN KEY | 外键 |
NOT NULL | 非空 |
UNIQUE KEY | 唯一 |
DEFAULT | 默认值 |
这六个约束条件都可以按照列级约束和表级约束使用,虽然说这样没有什么错误,但是实际应用中还是有一定区分的。一般外键约束按照表级约束使用,其他5个都是按照列级约束使用。
==========
Mysql约束条件详述
1.主键
CREATE TABLE stuinfo( id INT PRIMARY KEY );
- 主键自动设置列数据不能为空,不能重复
- 定义的时候PRIMARY关键字可以省略
- 一个表只能有一个主键
可以定义组合主键:
CREATE TABLE stuinfo( id INT, stu_name VARCHAR(20), #组合主键 PRIMARY KEY(id,stu_name) );
- 组合主键不是定义了两个主键,而是两个列组合为一个主键。
- 用两个列的数据来确定唯一性
- 这里使用了表级约束定义
- 不建议使用,会造成数据混乱
----------
2.自增长
CREATE TABLE stuinfo( id INT PRIMARY KEY AUTO_INCREMENT, stu_name VARCHAR(20) )AUTO_INCREMENT=100;
- 一个表中只能有一个自增长字段,而且一定要配合主键使用
- 自增长字段一定是主键,但主键不一定是自增长的
插入数据:
可以指定id值,实际插入的数据是这个值,而不使用自增长:
INSERT INTO stuinfo(id,stu_name) VALUES(10,'john');
可以插入NULL,这时候会使用自增长填充:
INSERT INTO stuinfo(id,stu_name) VALUES(NULL,'john');
可以插入DEFAULT,这时候会使用自增长填充:
INSERT INTO stuinfo(id,stu_name) VALUES(DEFAULT,'john');
可以不指定值,这时候也会使用自增长填充:
INSERT INTO stuinfo(stu_name) VALUES('john');
关于 AUTO_INCREMENT=100 :
- 这个是设置自增长初始值
- 如果在定义表的时候没有设置自增长起始值,后来也可以修改
- 修改之后添加的数据从修改的起始值开始
ALTER TABLE stuInfo AUTO_INCREMENT =500;----------
3.非空(not null)
CREATE TABLE stuinfo( id INT PRIMARY KEY AUTO_INCREMENT, stu_name VARCHAR(20) NOT NULL, class_no INT NOT NULL )AUTO_INCREMENT=100;
- 这里设置两个非空列,字符型的stu_name和整形的class_no。而所谓非空是指不能为NULL,所以stu_name可以插入空字符串'',还是可以为空的。而class_no由于是整形这里不能插入'',所以这个列是必须有数据的。
没有标记为非空的字段,默认是可以为NULL的
----------
4.唯一性
CREATE TABLE stuinfo( id INT PRIMARY KEY, stu_name VARCHAR(20) UNIQUE );
- 唯一性约束限定列数据不能有相同的
- 如果没有限定非空,则可以重复插入NULL
- 一个表中只能有一个主键,但可以有多个唯一
----------
5.默认值
CREATE TABLE stuinfo( id INT PRIMARY KEY AUTO_INCREMENT, gender CHAR DEFAULT '男' );
插入数据:
可以插入DEFAULT,这时候插入默认值:
INSERT INTO stuinfo(gender) VALUES(DEFAULT);
可以插入NULL,这时候插入默认值:
INSERT INTO stuinfo(gender) VALUES(NULL);
----------
6.外键
建立表与表的关联关系
语法格式:
[ constraint 外键别名] foreign key(A_col1,A_col2...)
references 表名(B_col1,B_col2...)
"外键别名" 为外键的代号,没有实际意义。可以省略constraint 外键别名部分
A_col 参数列表是子表(当前设置的表)的列名
表名 是父表表名
B_col 参数列表是父表列名,必须是一个主键或者约束为唯一的列
实例:
CREATE TABLE stuinfo( id INT PRIMARY KEY, #表级约束 CONSTRAINT fk_class_no FOREIGN KEY(id) REFERENCES classinfo (class_no) );
==========
完整的创建table格式
CREATE TABLE [IF NOT EXISTS] tb_name( 字段名称 字段类型 [UNSIGNED|ZEROFILL] [NOTNULL] [DEFAULT 默认值] [[PRIMARY] KEY | UNIQUE [key]][AUTO_INCREMENT] )ENGINE=INNODB CHARSET=UTF8 AUTO_INCREMENT=100;
==========
修改表时添加约束
CREATE TABLE stuinfo( id INT, stu_name VARCHAR(20) ); #在这里添加约束 ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY
注意:
- 这里才改变列的约束时必须指定列名和列类型
- 最好不要在表中有数据时这样干
上面是添加列级约束,下面介绍添加表级约束的方法:
CREATE TABLE stuinfo( id INT, stu_name VARCHAR(20) ); #在这里添加约束 ALTER TABLE stuinfo ADD PRIMARY KEY(id);