目录
常见约束
含义:一中限制,用于限制表中的数据,为了保证表中的数据的准确性和可靠性
六大约束
not null 非空
default 默认 用于保证字段有默认值
primary key 主键 非空唯一
unique 唯一 可为空
check :检查约束,MySQL上不支持
foreign key 外键 用于限制两个表的关系,用于保证该字段的值必须来之主表的关联列的值
再从表添加限制,用于引用主表的某列的值
添加约束的时机
1.创键表的时候
2.修改表的时候
约束添加的分类
1列级约束
都支持 外键约束没有效果
2表级约束
除了 非空 默认 其他都支持
create table 表名(
字段名 字段类型 列级约束
表级约束
一 创建表是添加约束
1.添加列级约束
CREATE DATABASE students;
USE students;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuNume VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='nan'OR gender='nv'),
seat INT UNIQUE,
age INT DEFAULT 18,
maijorId INT REFERENCES maijor(id)
);
CREATE TABLE maijor(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
DESC stuinfo;
SHOW INDEX
2.表级约束
/*
语法
在最下面
【constraint 约束名】
*/
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT ,
stuNume VARCHAR(20) ,
gender CHAR(1) ,
seat INT ,
age INT ,
maijorId INT ,
CONSTRAINT pk PRIMARY KEY(id),
CONSTRAINT ck CHECK(seat),
CONSTRAINT uq UNIQUE(seat),
CONSTRAINT fk FOREIGN KEY(majorid) REFERENCE maijor(id)
);
#通用写法
#外键一般用表级约束,其他一般用列级约束
CREATE TABLE (
id INT PRIMARY KEY,
stuNume VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender='nan'OR gender='nv'),
seat INT UNIQUE,
age INT DEFAULT 18,
maijorId INT REFERENCES maijor(id),
CONSTRAINT fk_stu_maijor FOREIGN KEY(major) REFERENCE maijor(id)
)
主键和唯一的对比
1.都能保证唯一性
2.主键非空
3.一个表中至多一个主键,可以多个唯一
外键特点:
1.要求在从表设置外键关系
2.在外键列的类型和主表中列的类型要求一致或兼容
3.主表中关联列必须是key(一般是,主键或唯一)
4.先插入主表,先删除从表
一个字段可以添加多个列级约束
二 修改表时添加约束
DROP TABLE IF EXISTS stuinfo;
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuNume VARCHAR(20) ,
gender CHAR(1) CHECK(gender='nan'OR gender='nv'),
seat INT UNIQUE,
age INT DEFAULT 18,
maijorId INT REFERENCES maijor(id)
);
添加列级约束
ALTER TABLE 表名 MODIFY COLUMN 字段名 字段类型 新约束
添加表记约束
ALTER TABLE 表名 add 约束类型(字段名) 【外键的引用】
#1.添加非空约束 直接在后面加上 (删除的话,改成null)
ALTER TABLE stuifo MODIFY COLUMN
stuNume VARCHAR(20) NOT NULL
#2.添加默认约束
ALTER TABLE stuifo MODIFY COLUMN
age INT DEFAULT 18;
#表级约束写法 外键
ALTER TABLE stuifo MODIFY COLUMN
FOREIGN KEY(majorid) REFERENCES maijor(id);
三 修改表时删除约束
/*
1.直接不写,默认没有约束
2.
ALTER TABLE 表名 MODIFY COLUMN drop
*/
1.删除默认约束
ALTER TABLE stuinfo MODIFY COLUMN
age INT ;
2.删除外键
ALTER TABLE stuinfo MODIFY COLUMN
DROP FOREIGN KEY maijorid;
标识列
又称自增长列
含义:不用手动插入值,系统提供默认的序列值
特点:
1.标识列要求与一个key搭配,及唯一 unique ,primary key
2.一个表至多一个标识列
3.标识列的类型只能是数值型
4. #更改步长 ,或者通过手动改设置起始位置
SET auto_increment_increment=3;
一 创建表时设置标识列
CREATE TABLE tab_identity(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
TRUNCATE TABLE tab_identity;
INSERT INTO tab_identity VALUES(NULL,'john');
INSERT INTO tab_identity VALUES(3,'josh');
SELECT *FROM tab_identity;
二修改表时加上标识列
ALTER TABLE tab_identity MODIFY COLUMN id
INT PRIMARY KEY AUTO_INCREMENT;
三 修改表时删除标识列,直接去掉就行了