MySQL中的约束及修改问题

约束

实体完整性约束

表中一行数据代表一个实体,实体完整性约束是标识每一行数据不重复使得实体具有唯一性;

  1. 主键约束
    PRIMARY KEY 唯一、标识表中的一行数据,此列的值不可重复,且不能为NULL
#创建表中,选择适合做主键的列,添加主键约束
#学生表
CREATE TABLE Student(
	stuid INT PRIMARY KEY,#主键约束,每一个编号是唯一的,不能为null
	stuName VARCHAR(20),
	phone VARCHAR(11)
)CHARSET=utf8;
INSERT INTO Student(stuid,stuName,phone)
VALUE (001,'kaka',100015);
  1. 唯一约束
    UNIQUE 唯一、标识表中的一行数据,不可重复,可以为NULL
#表中的手机号列,添加唯一约束!不能重复,但是可以为NULL
CREATE TABLE Student(
	stuid INT PRIMARY KEY,
	stuName VARCHAR(20),
	phone VARCHAR(11) UNIQUE#唯一的约束,可以为空;
)CHARSET=utf8;
INSERT INTO Student(stuid,stuName,phone)
VALUE (002,'kaka',1000154);
INSERT INTO Student(stuid,stuName,phone)
VALUE (003,'kaka',NULL);
SELECT * FROM Student;
  1. 自动增长列
    AUTO_INCREMENT 自动增长,给主键数值列添加自动增长。从1开始,每次++;不能单独使用,和主键搭配;
#自动增长,避免ID重复
CREATE TABLE Student(
	stuid INT PRIMARY KEY AUTO_INCREMENT,#必须搭配主键
	stuName VARCHAR(20),
	phone VARCHAR(11) 
)CHARSET = utf8;
INSERT INTO Student(stuName,phone)
VALUE (001,'kaka',100015);
INSERT INTO Student(stuName,phone)
VALUE (002,'kaka',1000154);
INSERT INTO Student(stuName,phone)
VALUE (003,'kaka',NULL);

域完整性约束

限制列的每一个单元格的数据正确性

  1. 非空约束
    NOT NULL 非空,约束此列的每一个单元格不允许有NULL值;
#非空约束,必须有值
CREATE TABLE emp(
	id INT PRIMARY KEY AUTO_INCREMENT,
	empName VARCHAR(20) NOT NULL,#约束名字一列必须有值
	address VARCHAR(50) NOT NULL
)CHARSET = utf8;
INSERT INTO emp (empName,address) VALUE ('kaka','xi`an');
  1. 默认值约束
    DEFAULT 为列赋予默认值,当新增的数据不指定值时,写DEFAULT,以定义好的默认值进行填充;
#默认值约束
CREATE TABLE emp(
	id INT PRIMARY KEY AUTO_INCREMENT,
	empName VARCHAR(20) NOT NULL,#约束名字一列必须有值
	address VARCHAR(50) NOT NULL,
	sex CHAR(1) DEFAULT '女'#不给值填充默认值女
)CHARSET = utf8;
INSERT INTO emp (empName,address,sex) VALUE ('kaka','xi`an',DEFAULT);

  1. 引用完整性约束

语法:CONSTRAINT 引用名 FOREIGN KEY (列名) REFERENCES 被引用表名(列名)
FOREIGN KEY 引用外部表的某5个列的值,新增数据时,约束此列的值必须是被引用表中存在的值

#引用完整性约束
#专业表
CREATE TABLE Speciality(
	id INT PRIMARY KEY AUTO_INCREMENT,#自动增长
	SpecialName VARCHAR(20) UNIQUE NOT NULL#唯一且不为空
)CHARSET = utf8;
#课程表
CREATE TABLE `subject`(
	subjectid INT PRIMARY KEY AUTO_INCREMENT,
	subjecname VARCHAR(20) UNIQUE NOT NULL,
	subjecthours INT DEFAULT 20,#默认值20
	specialid INT NOT NULL,
	CONSTRAINT fk_subject_specialid#外键
	FOREIGN KEY(specialid)
	REFERENCES Speciality(id)
)CHARSET=utf8;
#存在引用关系的表。要先添加被引用的表数据(主键表).再添加引用表的数据(外键表)
INSERT INTO Speciality (SpecialName) VALUES('Java');
INSERT INTO Speciality (SpecialName) VALUES('HTML5');
INSERT INTO `subject`(subjecname,subjecthours,specialid)
VALUES('JavaSE',10,1);
INSERT INTO `subject`(subjecname,subjecthours,specialid)
VALUES('JavaScript',20,2);

  • 两张表存在引用关系时,执行删除操作注意,先删除从表(引用表、外键表),再删除主表(被引用表、主键表;
#eg:删除Speciality
DROP TABLE Speciality;#先删除主表,容易造成外键表数据孤立,不可先删除
DROP TABLE `subject`;#先删除引用表后删除主表
约束创建整合

创建带有约束的表

  1. 创建Grade表
    在这里插入图片描述
#Grade
CREATE TABLE Grade(
	GradeId INT PRIMARY KEY AUTO_INCREMENT,#主键、自增
	GradeName VARCHAR(20) UNIQUE NOT NULL#唯一、非空
)CHARSET = utf8;
SELECT * FROM Grade;
INSERT INTO Grade(GradeName) VALUES('JAVA');
INSERT INTO Grade(GradeName) VALUES('HTML');
INSERT INTO Grade(GradeName) VALUES('Spring');
  1. 创建Student表
    在这里插入图片描述
#Student表
CREATE TABLE Student(
	student_id VARCHAR(50) PRIMARY KEY,#主键
	student_name VARCHAR(50) NOT NULL,#非空
	sex CHAR(2) DEFAULT '男',#默认男
	borndate DATE NOT NULL,#非空
	phone VARCHAR(11),
	GradeId INT NOT NULL,#非空
	CONSTRAINT fk_student_gradeId #外键约束
	FOREIGN KEY(GradeId)#列名 
	REFERENCES Grade(GradeId)#被引用表名
)CHARSET=utf8;
SELECT * FROM student;
INSERT INTO student(student_id,student_name,sex,borndate,phone,GradeId)
VALUES('1001','卡卡',DEFAULT,'200200101',NULL,2);
INSERT INTO student(student_id,student_name,sex,borndate,phone,GradeId)
VALUES('1002','糖糖','女','20200101',NULL,3);
  • 在创建有关系关联表时,要先创建主表(主键),再创建从表(外键表)
数据表的修改
语法:ALTER TABLE 表名  修改操作;
  1. 向现有表中添加列
#向现有表中添加列
ALTER TABLE Student ADD image BLOB;
#ADD 新列名 数据类型 [约束]
  1. 修改表中的列
#修改表的类型和约束
ALTER TABLE student MODIFY phone VARCHAR(14) NOT NULL
  • 修改表中的某列时,需要写全列的名字、数据类型、约束;
  1. 删除表中的列
#删除现有表的列
ALTER TABLE student DROP image;
  1. 修改表的列名
#修改表中的列名
ALTER TABLE student CHANGE borndate birthday DATE NOT NULL; 
  • 改变列名时,在给定新列名的同时,要指定列的数据类型和约束;
  1. 修改表名
#修改表名
ALTER TABLE student RENAME stu;
  1. 删除表
DROP TABLE 表名
#删除学生表
DROP TABLE stu;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Willing卡卡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值