当前位置:   article > 正文

【数据库】表的增删改查(进阶)_数据库表的增删改

数据库表的增删改


表的增删改查(基础操作): https://blog.csdn.net/qq_43361209/article/details/105749745

1.数据库约束

约束类型说明示例
NULL约束使用NOT NULL指定列不为空id int not null
UNIQUE唯一约束指定列为唯一的、不重复的值id int unique
DEFAULT默认值约束指定列为空时的默认值age int default 20
主键约束NOT NULL 和 UNIQUE 的结合,表中唯一标识id int primary key
外键约束关联其他表的主键唯一键foreign key(字段名) references 主键表(列)
CHECK约束保证列中的值符合指定的条件check (sex =‘男’ or sex=‘女’)

1.1 NULL约束

-- 创建表时,可以指定某列不为空

create table student(
    id int not null,
    name varchar(20),
    main varchar(30)
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

插入id为空时报错:
        在这里插入图片描述

1.2 UNIQUE:唯一约束

-- 创建表时,可以指定某列值唯一

create table student(
    id int unique,
    name varchar(20)
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

插入重复id报错:
        在这里插入图片描述

1.3 DEFAULT:默认值约束

-- 创建表时,可以指定某列的默认值

create table student(
    id int,
    name varchar(20) default 'unknow'
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

指定插入数据时,只插入id,name默认值 unknow :
        在这里插入图片描述

1.4 PRIMARY KEY:主键约束

-- 创建表时,可以指定主键
create table student(
    id int primary key,
    name varchar(20)
);

-- 对于整数类型的主键,常配搭自增长auto_increment来使用。
id INT PRIMARY KEY auto_increment
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

主键不能为空,不能重复,否则报错:
        在这里插入图片描述

1.5 FOREIGN KEY:外键约束

外键用于关联其他表的主键唯一键,语法:

foreign key (字段名) references 主表()
  • 1
-- 创建班级表class,id为主键
create table class(
    id int primary key auto_increment,
    name varchar(20)
);

-- 创建学生表student,一个学生对应一个班级,一个班级对应多个学生
-- 使用id为主键,classes_id为外键,关联班级表id
create table student(
    id int primary key,
    class_id int,
    foreign key (class_id) references class (id)
);
-- 此时操作 student 中的 class_id,会受到 class 表内容的制约
-- 插入 student 表的 class_id 的值必须在 class 表中存在
-- 若插入的 class_id 字段的值在 class 表中不存在,插入失败,报错

测试:
-- 班级表插入数据
insert into class (name) values ("A班");
insert into class (name) values ("B班");
-- 学生表插入数据
insert into student values(001,3); -- 报错 插入失败
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test1`.`student`, CONSTRAINT `student_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `class` (`id`))

insert into student values(001,1); -- 插入成功
insert into student values(002,1); -- 插入成功
insert into student values(003,2); -- 插入成功
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

注意:
         对带有外键的表进行插入/修改时,mysql会自动去关联表中查找插入/修改的值是否存在,查找完毕才会真正执行插入/修改操作。
         带来的影响是加强了数据的效验(提高了完整性),但降低了效率。

1.6 CHECK约束

-- -- 创建表时,可以保证列中的值符合指定条件

create table test_user (
   id int,
   name varchar(20),
   sex varchar(1),
   check (sex ='男' or sex='女')
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

插入非指定条件,报错:
        在这里插入图片描述

2.表的设计

三大范式:一对一、一对多、多对多

2.1 一对一

        在这里插入图片描述

2.2 一对多

        在这里插入图片描述

2.3 多对多

        在这里插入图片描述
案例:

-- 创建课程表
DROP TABLE IF EXISTS course;
CREATE TABLE course (
    id INT PRIMARY KEY auto_increment,
    name VARCHAR(20)
);

-- 创建课程学生中间表:考试成绩表
DROP TABLE IF EXISTS score;
CREATE TABLE score (
    id INT PRIMARY KEY auto_increment,
    score DECIMAL(3, 1),
    student_id int,
    course_id int,
    FOREIGN KEY (student_id) REFERENCES student(id),
    FOREIGN KEY (course_id) REFERENCES course(id)
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3.新增:插入查询结果

语法:

-- 插入一个 select 返回的结果
INSERT INTO table_name [(column [, column ...])] SELECT ...
  • 1
  • 2

案例:

create table s1 (id int,name varchar(20),sex varchar(1));
insert into s1 values
    (1,'黎明','男'),
    (2,'孙悟空','男'),
    (3,'胡歌','男');
   
create table s2 (id int,name_s2 varchar(20),sex varchar(1));
-- 将 s1 中数据全部插入 s2
insert into s2 select * from s1;

create table s3 (name varchar(20),sex varchar(1));
-- 将 s1 中姓名和性别数据全部插入 s3
insert into s3 (name,sex) select name,sex from s1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

        在这里插入图片描述
        在这里插入图片描述

4.查询

聚合查询和联合查询:https://blog.csdn.net/qq_43361209/article/details/105846871

MySQL中内连接,外连接等的区别
        图片来源于网络
图片来源于网络,仅供学习使用,如有侵权立马删除!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/483060?site
推荐阅读
相关标签
  

闽ICP备14008679号