Mysql学习笔记(5):约束条件

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










猜你喜欢

转载自blog.csdn.net/abc997995674/article/details/80633331