Mysql数据库(下)——数据的完整性以及各种约束的使用

本文详细介绍了数据库中的各种约束,包括非空、唯一性、主键、外键等,并通过实例展示了如何在SQL中添加、修改和删除这些约束。此外,还提到了索引和锁定的重要性以及它们在实际开发中的注意事项。
摘要由CSDN通过智能技术生成

本篇对数据库基本用法中的各种约束进行总结,如果想快速去实习的话,基本学到这就可以了,后面根据公司的要求,需要进一步去学习后面的知识,索引以及锁的使用等,这些还是比较重要的;以下代码可以直接粘贴到数据库可视化软件中,方便理解和练习;
#约束:

/*约束就是对表中的字段的限制;
约束的分类:
约束的字段个数:单列约束和多列约束
约束的作用范围:列级约束和表级约束
约束的功能:非空约束,唯一性约束,主键约束,外键约束,检查约束,默认值约束;
如何添加约束:
create table时添加约束,alter table时可以添加约束删除约束;
*/
#如何查看约束:
SELECT *FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_NAME='employees';
#not null约束:
CREATE TABLE myempl2(
id INT NOT NULL,
last_name VARCHAR(15) NOT NULL,
email VARCHAR(25),
salar DECIMAL(10,2)
);
DESC myempl2;
INSERT INTO myempl2
VALUES(1,'tom','tom@163.com',5000);
#报错:last_name不能为null
INSERT INTO myempl2
VALUES(1,NULL,'jerry@163.com',5000);
#修改时添加非空约束:
ALTER TABLE myempl2
MODIFY email VARCHAR(25) NOT NULL;
DESC myempl2;
#删除非空约束:
ALTER TABLE myempl2
MODIFY email VARCHAR(25) NULL;
#唯一性约束:在创建唯一性约束的时候,如果不给命名,那么该约束名称跟列名一样;属性为unique约束的,可以多次添加null值的;
DROP TABLE myempl2;
CREATE TABLE myempl2(
id INT UNIQUE,#列级约束,添加到属性的后面;
last_name VARCHAR(15),
email VARCHAR(25),
salary DECIMAL(10,2),
#表级约束:
CONSTRAINT uq_myempl2 UNIQUE(email)
);
#复合型唯一性约束:同时对多个属性添加唯一性约束
DROP TABLE myempl2;
CREATE TABLE myempl2(
id INT,
last_name VARCHAR(15),
salary DECIMAL(10,2),
CONSTRAINT uq_myempl2_dou UNIQUE(id,last_name));
#下面这两条数据都可以添加进去,可知,复合型的是两个属性都是一样的才不能添加进去;
INSERT INTO myempl2 VALUES(1,'tom',5000),(1,'jerry',6000);
#删除唯一性约束:
/*首先在添加唯一约束的列上会自动创建一个唯一索引,
删除唯一约束只能通过删除唯一索引的方式删除,删除时需要指定唯一索引的名字,名字就是唯一约束的名字;
*/
SELECT*FROM information_schema.TABLE_CONSTRAINTS
WHERE TABLE_NAME='myempl2';
ALTER TABLE myempl2
MODIFY salary DECIMAL(10,2) UNIQUE;
ALTER TABLE myempl2
DROP INDEX salary;
ALTER TABLE myempl2
DROP INDEX uq_myempl2_dou;
#主键约束:相当于唯一性约束和非空约束的组合(非空且唯一);一个表中只能有一个主键约束;
DROP TABLE myempl2;
CREATE TABLE myempl2(
id INT PRIMARY KEY,#列级约束
last_name VARCHAR(15),
salary DECIMAL(10,2));
DESC myempl2;
DROP TABLE myempl2;
CREATE TABLE myempl2(
id INT,
last_name VARCHAR(15),
salary DECIMAL(10,2),
PRIMARY KEY(id)#表级约束
);
#auto_increment 一般用于主键上,用于自增长,一个表只能有一个自增长的列;
DROP TABLE myempl2;
CREATE TABLE myempl2(
id INT PRIMARY KEY AUTO_INCREMENT,
last_name VARCHAR(15),
salary DECIMAL(10,2));
INSERT INTO myempl2(last_name) 
VALUES('tom'),('jerry');
#可以看到id自增加;
SELECT *FROM myempl2;
#外键:首先要有主表和从表,然后从表依赖主表,需要先创建主表,才能创建从表,删除的时候需要先删除从表,
#然后再删除主表;并且依赖的那个属性需要是唯一性的;
#先创建主表:
CREATE TABLE dept1(
dept_id INT PRIMARY KEY,
dept_name VARCHAR(15));
#从表:
CREATE TABLE emp1(
emp_id INT,
emp_name VARCHAR(15),
department_id INT,
CONSTRAINT fk_emp1_dept_id FOREIGN KEY (department_id)REFERENCES dept1(dept_id)#这里department_id和dept_id可以不用相同但是类型必须相同;
);
#插入数据失败,因为主表dept1中没有对应的dept_id
INSERT INTO emp1 VALUES(1001,'tom',10);

INSERT INTO dept1 VALUES(10,'jerry');
#插入成功:
INSERT INTO emp1 VALUES(1001,'tom',10);
#实际开发过程中一般不使用外键,在应用层进行设置,高并发类型的使用外键可能会导致更新风暴,插入效率低等影响;
DROP TABLE myempl2,myempll;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小菜日记^_^

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

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

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

打赏作者

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

抵扣说明:

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

余额充值