Web数据库基础知识——Mysql(二)

续2.6 表约束

  • 定义:通过限制可以插入到表中的数据类型和格式,来保护数据的完整性和一致性。约束还可以防止无效的数据进入数据库,从而避免数据错误和应用程序故障。

  • 常见的表约束:

    • 主键约束primary key——用于确保表中的每一行都有可以唯一识别自己的一列或多列。

      主键约束确保:主键列的每个值都唯一;逐渐列不能NULL。

-- 创建学生表,id(主键),name,age
CREATE TABLE student(
	id int PRIMARY KEY,
	name VARCHAR(20),
	age int  
);

DESC student;

-- 添加数据
insert into student VALUES (1,"lili",26),(2,"jay",20);

-- 查看
SELECT * FROM student;

-- 删除主键
ALTER TABLE student drop PRIMARY KEY;

-- 单独添加主键
ALTER TABLE student MODIFY id int PRIMARY KEY;

 

  •  主键自增约束auto_increment——用于为表中的某一列(通常是主键列)自动生成唯一的递增值。

-- 因为之前创建了student,为了练习新的约束,现在删除
-- 删除表
drop TABLE student;
show tables;

 

-- 创建学生表,id(主键自增),name,age
CREATE TABLE student(
	id int PRIMARY KEY auto_increment,
	name VARCHAR(20),
	age int  
);

DESC student;

-- 添加数据
insert into student VALUES (NULL,"Amy",20),(NULL,"bob",18);

-- 删除自增
ALTER TABLE student MODIFY id int;

  • 唯一约束unique——列中的唯一,但是允许为空,一张表可以有多个唯一约束,用于保证不同列或组合的值唯一;

-- 创建学生表,id(主键自增),name(唯一),age
CREATE TABLE student(
	id int PRIMARY KEY auto_increment,
	name VARCHAR(20) UNIQUE,
	age int  
);

-- 添加数据
insert into student VALUES (null,"lili",20); 

 

-- 添加数据
insert into student VALUES (null,"lili",20); 
insert into student VALUES (null,"lili",12);

 

-- 删除唯一约束
ALTER table student drop index NAME;

-- 单独添加唯一约束
ALTER table student MODIFY age int unique;

 

  • 非空约束not null——非空约束,用于约束该字段的值不能为空。

-- 创建学生表,id(主键),name,age,非空
CREATE TABLE student(
	id int PRIMARY KEY auto_increment,
	name VARCHAR(20) NOT NULL,
	age int  NOT NULL
);

-- 添加数据
insert into student VALUES (null,"lili",12);
insert into student VALUES (null,null,12);

 

insert into student VALUES (null,"",12);

 

2.7 表关系

多对一:

  • 定义:这意味着在一个表中,可以有多个记录与另一个表中的单个记录相关联。换句话说,一个表中的某一列的值可以重复,这些重复的值都指向另一个表中的唯一记录。比如一个人有多件衣服;一个user有多个手机号。

常用于表示两个表之间的连接,其中一个表中的多行可以与另一个表中的单行相关联。这种关系通常通过外键(Foreign Key)来实现。

外键约束

  • 定义:外键约束(Foreign Key Constraint)是用来维护数据库表之间数据一致性和完整性的一种机制。它指定了一个表中的列(或列的组合)必须在另一个表的主键或唯一键列中有对应的值。通过外键约束,可以确保在一个表(称为子表或从表)中的值在另一个表(称为父表或主表)中已经存在,从而防止孤立数据的产生。

  • 语法:

    CREATE TABLE 子表名 (

        列名1 数据类型,

        列名2 数据类型, ... CONSTRAINT 外键名 FOREIGN KEY (外键列) REFERENCES 父表名(主键列));

-- 创建user
CREATE TABLE user(
	id int PRIMARY key auto_increment,
	name VARCHAR(20) NOT NULL
)ENGINE=INNODB; -- 存储引擎,不同的表存储的过程有区别

desc user;

-- 添加数据
insert into user VALUES (null,"lili"),(null,"Bob");
-- 查看
SELECT * from user;

 

-- 创建订单详情表
CREATE TABLE orderlist(
	id int PRIMARY key auto_increment,
	number VARCHAR(20) not null,
	uid int,
	CONSTRAINT u_o FOREIGN KEY (uid) REFERENCES user(id)
-- 	         外键名                 联系到  哪张表 哪个
)ENGINE=INNODB;
desc orderlist;

-- 插入数据
INSERT into orderlist VALUES (null,"hm01",1),(null,"hm02",1),(null,"hm03",2),(null,"hm04",2);
-- 查看
SELECT * from orderlist;

 

-- 插入
-- 因为3在user表中不存在,在orderlist表中插入该数据是不允许的
insert into orderlist VALUES (null,"hm05",3);

-- 删除外键约束
ALTER table orderlist drop FOREIGN key u_o;
-- 添加外键元素
alter table orderlist add CONSTRAINT u_o FOREIGN key (uid) REFERENCES user(id);

-- 删除外键约束
ALTER table orderlist drop FOREIGN key u_o;
-- 添加外键元素
alter table orderlist add CONSTRAINT u_o FOREIGN key (uid) REFERENCES user(id);

外键级联操作:

  • 定义:是指当对主键表(也称为父表或引用表)中的数据进行更新或删除时,自动对包含外键的表(也称为子表或从属表)中的相关数据进行相应的更新或删除。

-- 进行外键级联操作时,先删除外键约束,然后再添加外键约束同时添加外键级联
alter TABLE orderlist add CONSTRAINT u_o FOREIGN key (uid) REFERENCES user(id)
on UPDATE CASCADE on DELETE CASCADE;

-- 修改,将Bob的id改为4
UPDATE user set id=4 WHERE id=2;
SELECT * FROM user;

 

-- 删除,删除Bob
DELETE from user where id=4;
SELECT * FROM user;
-- 查看
SELECT * from orderlist;

 

三、数据库常用查询语句

四、表关系及多表查询

五、php+mysql

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值