MYSQL约束条件语法
1、创建表
CREATE TABLE 表名(
字段1 数据类型 [完整性约束条件],
字段2 数据类型 [完整性约束条件]……
);
完整性约束条件:给字段进行限制,要求用户写入符合约束条件所制定的数据,如果不符合约束条件的要求,则写入失败
约束条件 说明
PRIMARY KEY 标识该属性为该表的主键,用于唯一性的标识数据
FOREIGN KEY 标识该属性为该表的外键,是与之联系的某表的主键
NOT NULL 标识该属性不能写入空值
UNIQUE 标识该属性的值唯一
DEFAULT 为带有该属性的字段设置默认值
AUTO_INCREMENT 设置该属性值自动增加
2、PRIMARY KEY 主键约束
在一个表中只准存在一个主键且非空
语法:
字段名 数据类型 PRIMARY KEY //创建表时,字段名后可直接写主键即可
PRIMARY KEY (定义主键的字段) //在定义完所有的列之后添加主键
联合主键
PRIMARY KEY (字段1,字段2,……)
例:单个字段添加主键
CREATE DATABASE ystj;
USE ystj;
CREATE TABLE cyj(card_id INT PRIMARY KEY,name VARCHAR(30));
INSERT INTO cyj VALUES(1,'jf'); //此时如果将此命令执行两次,将会报错主键冲突,card_id不能出现两个1
例:联合主键(用于单个字段在整个表中没有唯一的情况,将多个字段组成一个主键)
CREATE TABLE pjf (name VARCHAR(30),age INT,high INT,weight INT,grade DECIMAL(8,2),PRIMARY KEY(name,age,high,weight,grade));
INSERT INTO pjf VALUES('jf','18',165,50,100); //此时如果将此命令执行两次,将会报错主键冲突,全部字段冲突,只要一个字段值不一样,既能插入数据
INSERT INTO pjf VALUES('jf','18',165,50,NULL); //主键不能为空值,如果插入空值,则报错该字段不能为空
3、FOREIGN KEY 外键约束
用于连接另外一个表而进行建立,两张表通过字段,建立联系,外键是基于字段建立的,一旦建立外键将会产生父子表概念,写入外键的表成为子表,被关联的表成为父表
语法:
constraint 约束名 FOREIGN KEY (本表建立外键的字段1,本表建立外键的字段2) references 父表名(父表的主键字段名1,主键字段名2)
例:建立一张mp(父表)
CREATE TABLE mp(stu_id INT,course_id INT,name VARCHAR(30),PRIMARY KEY(stu_id,course_id)); //建立一张fy(子表)
CREATE TABLE fy(stu_id INT PRIMARY KEY,id INT,grade DECIMAL(8,2),constraint cyj FOREIGN KEY(id) references mp(stu_id));
INSERT INTO fy VALUES(1,1000,80); //如果在父表没有数据的前提下,在子表插入数据,则会报错
先在父表插入数据:INSERT INTO mp VALUES(1,101,'pjf');
再在子表中插入数据:INSERT INTO fy VALUES(101,1,80); //显示成功,注意主键外键的值必须一样,mp中的sut_id
与fy中的id是父子关系,添加子表的数据时,对应的两个主外键字段的值,主键必须已经存在
建立外键的规则
(1)关联父表时,父表的字段必须为父表的主键
(2)关联父表时,如果父表为联合主键,需要从第一个联合主键字段开始关联
(3)建立外键时,外键的字段要和主键字段的数据类型保持一致
(4)书写问题
4、NOT NULL 非空约束(在设置非空约束的字段上,不允许写入空值NULL)
语法:
字段名 数据类型 NOT NULL
例:CREATE TABLE pjf1(id INT NOT NULL);
INSERT INTO pjf1 VALUES(NULL); //会报错,不允许写入空值
INSERT INTO pjf1 VALUES(‘NULL’); //加引号,NULL为字符串,没有特殊属性
5、UNIQUE 唯一性约束(设置该属性字段的值不能重复)
语法:
(1)字段名 数据类型 UNIQUE
例:
CREATE TABLE pjf2 (id INT UNIQUE);
INSERT INTO pjf2 VALUES(10); //此命令执行两次,则会报错10为重复值,插入数据失败
(2)CONSTRAINT 约束名 UNIQUE(添加唯一性约束的字段名)
例:
CREATE TABLE pjf3 (id INT,CONSTRAINT uni UNIQUE(id));
CREATE TABLE pjf4 (id INT,CONSTRAINT un UNIQUE(id),CONSTRAINT ni FOREIGN KEY(id) references mp(stu_id));
//将id添加唯一性约束和外键约束到mp表的stu_id
6、DEFAULT 默认约束条件(如果不向设置默认值的字段写入数据,mysql将会把默认值自动填充到该字段上)
语法:
字段名 数据类型 DEFAULT 默认值
例:
CREATE TABLE pjf5 (name VARCHAR(30) PRIMARY KEY,address CHAR(30) NOT NULL UNIQUE,class VARCHAR(30) DEFAULT 'yjs',game VARCHAR(30) DEFAULT 'LOL');
创建一个表pjf5,name为主键,address存在非空约束和唯一性约束,class和game存在默认值约束
INSERT INTO pjf5(name,address) VALUES ('cyj','bj'),('mi','bj1'),('rz','bj2');
因为address字段存在唯一性约束,所以这里写了bj1、bj2
现在查看表中数据,发现除了name和address字段中,其他两个字段也存在数据,是因为设置了默认约束值
7、AUTO_INCREMENT 自动增加
(设置该属性的字段值可以自动增加,只能给数据类数据类型进行添加该约束,且一个表中只允许出现一个自增字段)
目的是为了给写入的值设置唯一ID
自增的约束条件该字段必须拥有主键约束或者唯一性约束
语法:
字段名 数据类型 AUTO_INCREMENT
例:
CREATE TABLE pjf6 (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(30) NOT NULL UNIQUE);
INSERT INTO pjf6 (name) VALUES('pjf'),('ycj'); //只插入name字段的数据
通过查询看到id字段也自动填充数字id。
SHOW VARIABLES LIKE 'auto_increment_%'; //可以查看起始值和自增值的默认值
SET auto_increment_increment=2; //临时设置起始值的默认值
例:
CREATE TABLE pjf7 (id INT AUTO_INCREMENT,name VARCHAR(30) NOT NULL UNIQUE);
//这里id只设置了自增,但没有为主键或者唯一性,发现创建失败
CREATE TABLE pjf7 (id INT UNIQUE AUTO_INCREMENT,name VARCHAR(30) NOT NULL UNIQUE);
INSERT INTO pjf7(name) VALUES('mp'),('fy'); //查看时发现id号为奇数性增长
删除表
DROP TABLE 表1,表2……