Loading

约束条件

创建表的完整语法

【1】创建表的万能模板

create table <表名>(
	字段名,字段类型[约束条件],
	字段名,字段类型[约束条件],
	...
)

【2】约束条件

-- 约束条件
约束条件是指在数据类型之外对字段额外附加的限制,是为了保证数据的完整性和一致性。可以自己看情况加不加约束条件

【3】注意事项

-- 注意事项
1.注意最后一个字段之后不能加逗号。
2.注意同一张表之中,字段名不能重复。
3.宽度和约束条件可选,字段名和字段类型必须要有。

【4】常见约束条件介绍

-- 主键(primary key)
标识该字段为该表的主键,主键不可为空且唯一。具有加速查询的作用。

-- 外键(foreign key)
标识该字段为该表的外键,用来和其他表关联起来。

-- 非空(not null)
标识该字段的记录不能为空

-- 唯一(unique)
标识该字段的记录是唯一的

-- 自动增长(auto_increment)
标识该字段的记录自动增长,通常用在主键上,且一张表里面只有一个字段可以使用自动增长,类型是整数类型

-- 无符号(unsigned)
将整数类型设置为无符号,也就是正数,使用时的优先级比前面介绍的几个都要高。

-- 填充(zerofill)
这个属性通常用于整数列,以使所有的数值具有相同的位数,从而提高可读性和排序效果。

约束条件的使用

【1】not nulldefault

-- 创建表
create table t2(
	id int primary key auto_increment, -- 设置主键和自动增长
	name varchar(15) not null,	       -- 设置非空
	gender enum('male','female','other')not null default 'other'-- 将性别设置为枚举(多选一) 并且把默认值设置为other
)  

-- 插入数据(不填添加id,id会自动增长)
insert into t2(name,gender)values('hqq',male);
+----+------+--------+
| id | name | gender |
+----+------+--------+
|  1 | hqq  | male   |
+----+------+--------+

-- 插入数据(不填name会报错)

-- 插入数据(不填gender会自动填入默认值ohther)
insert into t2(name)values('green');
+----+-------+--------+
| id | name  | gender |
+----+-------+--------+
|  1 | hqq   | male   |
|  2 | green | other  |
+----+-------+--------+

【2】unique应用

  • unique是用来限制字段的记录是唯一的
-- 创建表
create table t3(id int unique); -- 将id这个字段的记录标为唯一,也就是说插入的记录不能重复

-- 另一种形式
create table t3(
    id int,
	name varchar(15),
	unique(id)
)

-- 联合唯一
create table t3(
	ip varchar(15),
	port int,
	unique(ip,port) -- 两个字段的记录不能出现一模一样,但是有一个重复是没有问题的
)

-- 给唯一字段起名字(没什么卵用)
create table t3(id int ,constraint uni_id unique)

【3】primary key应用

  • 主键的记录是唯一且不可为空的
  • 从约束的角度看主键就像是not null 和 unique加在一起
  • 但是并不是这样的,每张表我们必须都设置一个主键
  • 因为主键primary key是innodb存储引擎组织数据的依据,innodb称之为索引组织表,一张表中必须有且只有一个主键,设置主键可以加快搜索速度
-- 创建表
create table t4(
	id int primary key, -- 插入数据时不能重复而且不能为空 要不然会报错
	name varchar(15) not null
);

【4】auto_increment应用

  1. 创建自动增长的主键: 最常见的用法是将 AUTO_INCREMENT 应用于主键列,以确保每个行都具有唯一的主键值。例如:

    CREATE TABLE employees (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(50),
        department VARCHAR(50)
    );
    

    在这个示例中,id 列是主键,同时也是自动增长的,每次插入新行时,数据库会自动分配一个唯一的 id 值。

  2. 插入行时自动生成值: 当插入新行时,无需指定 AUTO_INCREMENT 列的值,数据库会自动为您生成。例如:

    INSERT INTO employees (name, department) VALUES ('John', 'HR');
    

    在上述插入语句中,没有指定 id 的值,但数据库会自动分配一个唯一的 id 值。

【5】外键的应用

一对多

-- 一对多关系

-- 创建作者表格
create table authors(
	author_id int auto_increment primary key,
	author_name varchar(15)not null
);

-- 创建书籍表格
create table books(
	book_id int auto_increment primary key,
	biik_title varchar(15)not null,
	author_id int,
	foreign key(author_id) references authors(author_id)
);

-- 书籍表中的author_id时一个外键,与作者表格中的author_id相关联
-- 如果想要删除书记表个中的author_id的记录,就需要先删除作者表里面相关的记录
-- 要不然就会报错
-- 也可以设置级联删除的方法

多对多

-- 创建学生表
create table student(
	student_id int auto_increment primary key,
	student_name varchar(15)not null
)

-- 插入数据
insert into student(student_name)values
	('hqq'),
	('green'),
	('tom');

-- 创建课程表
create table course(
	course_id int auto_increment primary key,
	course_name varchar(15)not null
);

-- 插入数据
insert into course(course_name)values
	('python'),
	('jave'),
	('go')

-- 学生-课堂关联表
create table student_course(
    student_course_id int primary key,
	student_id int,
	course_id int,
	foreign key (student_id) references student(student_id),
	foreign key (course_id) references course(course_id)
);

-- 插入数据
insert into student_course(student_id,course_id)values
	(1,1),
	(1,2),
	(1,3),
	(2,1),
	(3,1);

一对一

-- 创建顾客表
create table customer(
	id int primary key auto_increment,
	name varchar(15) not null,
	gender enum('male','female'),
	tel varchar(15)
);

-- 插入数据
insert into customer(name,gender,tel)values
	('hqq','male','18967672121'),
	('green','male','19679792168'),
	('Alice','female','19697972197');
	
-- 创建业主表
create table owner(
	id int primary key auto_increment,
	room_id int,
	owner_name_id int,
	foreign key (owner_name_id) references customer(id)
);

-- 插入数据
insert into owner (room_id,owner_name_id) values
	(111,1),
	(222,2),
	(333,3);

级联删除

级联删除(Cascade Delete)是数据库管理中的一个概念,它与外键约束(Foreign Key Constraint)密切相关。当在数据库表之间定义外键约束时,可以设置级联删除来自动管理相关记录的删除操作。级联删除的主要用途是维护不同表之间的引用完整性,确保数据库的数据一致性。

基本原理

当一个表A的字段被设置为个表B的外键时,表A被删除时,级联删除就会自动删除表B中依赖于表A的所有相关记录,这通常用于一对多的关系。

-- 创建父表
create table parent(
	id int primary key,
	name varchar(15)
);

-- 插入数据
insert into parent (id,name) values
	(1,'hqq'),
	(2,'green'),
	(3,'Alice');

-- 创建子表,引用父表的字段作为外键
create table son(
	id int primary key,
	parent_id int,
	name varchar(15),
	foreign key(parent_id) references parent(id) on delete cascade
);

-- 插入数据
insert into son(id,parent_id,name) values
	(1,1,'tom'),
	(2,1,'leo'),
	(3,1,'sky'),
	(4,2,'haha'),
	(5,3,'xixi');
posted @ 2024-03-24 17:03  HuangQiaoqi  阅读(62)  评论(0编辑  收藏  举报