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……

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0