mysql(十三)约束条件

通用写法为:

#通用写法:
CREATE TABLE IF NOT EXISTS stuinfo(
    id INT PRIMARY KEY,
		stuName VARCHAR(20) NOT NULL,
		gender CHAR,
		seat INT UNIQUE,
		age INT DEFAULT 18,
		majorid INT,
    CONSTRAINT fk_stuinfo_major	FOREIGN KEY (majorid) REFERENCES major(id)
   #fk代表 FOREIGN key的缩写 +当前表名 +主表名
);

1、常见约束
/*
  含义:用于限制表中的数据,为了保证表中数据的准确性
  
	CREATE TABLE 表名{字段名 字段类型 约束}
	分类: 六大约束
  1、NOT NULL:非空,用于保证字段值不为空;eg:姓名
	2、DEFAULT:默认值
	3、PRIMARY KEY:主键,是唯一性,并且非空;eg:员工编号
	4、UNIQUE:唯一性,但可以为空;eg:座位号
	5、FOREIGN KEY:外键。//在从表添加外键约束,用于引用主表中某列的值
	
	约束的添加分类:
	   列级约束:外键约束没有效果(其他都可以)
		 表级约束:除了非空和默认都支持
	//语法
	  CREATE TABLE 表名(
		字段名 字段类型 列级约束
		字段名 字段类型,
		表级约束
		)				 
*/
CREATE DATABASE students;

USE students;
CREATE TABLE stuinfo(
   id INT PRIMARY KEY,#主键
   stuName VARCHAR(20) NOT NULL,#非空
	 gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查
	 seat INT UNIQUE,#唯一
	 age INT DEFAULT 18,#默认约束
	 majorId INT REFERENCES major(id)#外键
);
#外键表
CREATE TABLE major(
  id INT PRIMARY KEY,
	majorName VARCHAR(20)
);
DESC stuinfo;
#查看索引值:包括主键、外键、唯一
SHOW INDEX FROM stuinfo;


#2、添加表级约束
/*
   语法:
	【CONSTRAINT 约束名】 约束类型(字段名)
*/
DROP TABLE IF EXISTS stuinfo;

CREATE TABLE stuinfo(
  id INT,
	stuname VARCHAR(20),
	gender CHAR(1),
	seat INT,age INT,majorid INT,
	CONSTRAINT pk PRIMARY KEY(id),#主键,的名字是固定的
	CONSTRAINT uq UNIQUE (seat),#唯一键
	CONSTRAINT fk_major FOREIGN KEY (majorid) REFERENCES major(id)
);

CREATE TABLE stuinfo(
  id INT,
	stuname VARCHAR(20),
	gender CHAR(1),
	seat INT,age INT,majorid INT,
	PRIMARY KEY(id),#主键,的名字是固定的
	UNIQUE (seat),#唯一键
  FOREIGN KEY (majorid) REFERENCES major(id)
);
2、修改表时添加约束
/*
1、非空
添加非空
alter table 表名 modify column 字段名 字段类型 not null;
亦可以直接用 add 字段名 字段类型
删除非空
alter table 表名 modify column 字段名 字段类型 ;

2、默认
添加默认
alter table 表名 modify column 字段名 字段类型 default 值;
删除默认
alter table 表名 modify column 字段名 字段类型 ;
3、主键
添加主键
alter table 表名 add【 constraint 约束名】 primary key(字段名);
删除主键
alter table 表名 drop primary key;

4、唯一
添加唯一
alter table 表名 add【 constraint 约束名】 unique(字段名);
删除唯一
alter table 表名 drop index 索引名;
5、外键
添加外键
alter table 表名 add【 constraint 约束名】 foreign key(字段名) references 主表(被引用列);
删除外键
alter table 表名 drop foreign key 约束名;
*/

ALTER TABLE stuinfo DROP PRIMARY KEY;
DESC stuinfo;

ALTER TABLE stuinfo ADD mysis INT DEFAULT 19 NOT NULL;
ALTER TABLE stuinfo DROP mysis;


3、外键的特点
 3.1、要求在从表设置外键关系
 3.2、从表的外键列的类型和主表的关联列的类型必须一致或兼容
 3.3、主表的关联列必须是一个key(即为主键或唯一键)
 3.4、插入数据时,先插入主表(引用表),在插入从表
 3.5、删除数据,先删除从表在删除 引用表

#列子

#测试列子

#1、向表stuinfo的id列中  添加 PRIMARY KEY 约束(名为 my_id_pk)
ALTER TABLE stuinfo ADD CONSTRAINT my_id_pk PRIMARY KEY(id);
#2、向表stuinfo中majorid 添加 和 major表中id关联的 外键(my_major_infomation) 

#删除外键约束
ALTER TABLE stuinfo DROP FOREIGN KEY my_major_infomation;
#删除
ALTER TABLE stuinfo DROP majorid;

#增加
ALTER TABLE stuinfo ADD majorid INT;

DESC stuinfo;
SHOW INDEX FROM stuinfo;

#添加约束条件
ALTER TABLE stuinfo ADD CONSTRAINT my_major_infomation FOREIGN KEY(majorid) REFERENCES major(id);
4、标识列
### 标识列
#一、创建表 设置标识列
/*
2、一个表至多有一个自增长列
3、自增长列只能支持数值型
4、自增长列必须为一个key

二、修改表时设置自增长列
alter table 表 modify column 字段名 字段类型 约束 auto_increment
三、删除自增长列
alter table 表 modify column 字段名 字段类型 约束 
*/
CREATE TABLE tab_identity(
   id INT PRIMARY KEY auto_increment,
	 NAME VARCHAR(20)
);

INSERT INTO tab_identity VALUES(NULL,'john');
INSERT INTO tab_identity(NAME) VALUES('john');

SHOW VARIABLES LIKE '%increment';
TRUNCATE TABLE tab_identity;
SELECT *FROM tab_identity;

#设置步长
SET auto_increment_increment=3;
#在插入的时候设置起始值 ,可以先插入一个值为 x;
INSERT INTO tab_identity VALUES(10,'john');#起始值就变成了10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值