首页 > 数据库 >MYSQL 数据管理 【重点】

MYSQL 数据管理 【重点】

时间:2024-10-15 12:46:47浏览次数:3  
标签:name -- gradeid 外键 数据管理 student MYSQL NULL 重点

一 、外键【了解】

方式一:创建表的时候,增加约束(麻烦、比较复杂)

CREATE TABLE `grade`(
    `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
    `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
    PRIMARY  KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生表的gradeid 字段  要去引用年级表的   gradeid
-- 定义外键 key
-- 给这个外键添加约束(执行引用) references 引用



CREATE TABLE IF NOT EXISTS `student` (
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
    `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
    `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
    `gradeid` INT(10) NOT NULL COMMENT '学生的年级',
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY(`id`),
    KEY `FK_gradeid`(`gradeid`),
    CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `gradeid`
)ENGINE=INNODB DEFAULT CHARSET=utf8

  注意:删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

方式二:创建表成功后,添加外键约束 

 公式:

  • ALTER   TABLE   表   ADD  CONSTRAINT  约束名 FOREING KEY (作为外键的列) REFERENCES 那个表(哪个字段)
-- 创建表的时候没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`) ;

外键表现在是 空的;;

 注意: 以上的操作 都是 物理外键,数据库级别的外键,我们不建议使用!

(建表的时候麻烦,表和表之间有关联 ;删都删不掉;我想删grade 还得去找 grade下面连着谁;非常的麻烦)-- 避免数据库 太多  造成 困扰;【了解】

最佳实践:

  • 数据库 就是单纯的表,只用来存数据,只有行和列 【行代表记录,列代表字段】
  • 我们想使用多张表的数据,想使用外键(程序去实现)

说明: 很多人在工作中确实也不会使用外键,包括阿里的JAVA 规范有下面条:

【强制】 不得使用外键与级联,一切外键概念必须在应用层解决。

询问原因,大多这样回答:

每次做DELETE 或者 UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便

二、DML语言 (全部记住,背下来)

注意:【数据库管理增删 改查   必须背下来 】

数据库的意义:数据存储 ,数据管理

DML 语言:数据操作语言

  • insert     插入 添加
  • update   修改
  • delete    删除

1、添加  INSERT 

-- 插入语句(添加)
-- insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2'),('值3',......)

INSERT INTO `grade`(`gradename`) VALUES('大四');

-- 由于主键自增我们可以省略(如果不写表的字段,他就会一 一 匹配)
INSERT INTO `grade` VALUES('大三');

-- 一般写插入语句,我们一定要数据和字段一一对应!

-- 插入多个字段
INSERT INTO `grade`(`gradename`)
VALUES('大二'),('大一')

INSERT INTO `student`(`name`) VALUES ('张三')

INSERT INTO `student`(`name`,`pwd`,`sex`) VALUES('张三','aaaaaa','男')

INSERT INTO `student`(`name`,`pwd`,`sex`)
VALUES('李四','aaaa','男'),('王五','aaaaa','男')

语法:  insert into 表名([字段名1,字段名2,字段名3])values('值1'),('值2'),('值3',......)

注意事项:

  1. 字段和字段之间使用英文逗号隔开;
  2. 字段是可以省略的,但是后面的值必须是一一对应的;不能少
  3. 可以同时插入多条数据 VALUES 的值 需要使用 逗号隔开VALUES(),(),...

2、修改 UPDATE

  • 修改单个列的属性值

        语法: UPDATE 表名 set colnum_name = value where [条件]

-- 修改学员名字
UPDATE `student` SET `name`='red_button' WHERE id = 1;

-- 不指定条件的情况下,会 改动所有表! 【做了这个操作 就赶紧跑路吧 数据量 这么大 怎么恢复回来】
UPDATE `student` SET `name`='长江7号'
  • 修改多个属性,逗号隔开

        语法: UPDATE 表名 set colnum_name = value,[colnum_name = value,......] where [条件]

UPDATE `student` SET `name`='red_button',`email`= '[email protected]' WHERE id = 1;

重点: 

      条件: where字句 运算符  id等于某个值,大于某个值,在某个区间内修改...

操作符会返回布尔值;

操作符含义范围结果
=等于5=6false
<> 或!=不等于5<>6true
>
<
<=
>=
BETWEEN...and...在某个范围内[2,5]
AND我和你  && 5>1  and 1>2false
OR 我或你  ||5>1 or 1>2 true
-- 通过多个条件定位数据
UPDEAT `student` SET `name`='长江7号' WHERE `name`='red_button' AND sex='女'

 语法:

        UPDATE 表名 set colnum_name = value,[colnum_name = value,......] where [条件]

注意:

  • colnum_name 是数据库的列 ,尽量带上 ` `
  • 条件,筛选的条件,如果没有指定,则会修改所有的列
  • value 是一个具体的值;也可以是一个变量
  • 多个设置的属性之间,使用英文逗号隔开
UPDATE `student` SET `birthday`= CURRENT_TIME WHERE `name`='长江7号' AND sex='女'

3、 删除 DELETE

  • delete 命令

语法: delete  from  表名  [where 条件]

-- 删除数据[避免这样写(会全部删除)](有专门清空数据库的方法  不用delete)
DELETE FROM `student`

-- 删除指定数据
DELETE FROM `student` WHERE id = 1;
  • TRUNCATE 命令

                作用: 完全清空一个数据库表,表的结构和索引约束不会变

-- 清空 student 表
TRUNCATE `student`

面试常问: delete 和 TRUNCATE 区别

  • 相同点: 都能删除数据,都不会删除表结构
  • 不同:
  1. TRUNCATE 重新设置 自增列,计数器 会归0
  2. TRUNCATE 不会影响事务
-- 测试delete 和 TRUNCATE 的区别:
CREATE TABLE `test`(
    `id` INT(4) NOT NULL AUTO_INCREMENT,
    `coll` VARCHAR(20) NOT NULL,
    PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8


INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3')

DELETE FROM `test`  -- 不会影响自增

-- 再插入  id 就是 4  5  6  
INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3')

 

 注意: TRUNCATE 后面跟 TABLE 相对安全 避免删库

 

-- 清空 某张表
TRUNCATE TABLE `test`    -- 自增 会归 0 

注意: 此时 再刷新 insert  它就 从 1开始 ;

拓展:DELETE 删除的问题 【 DELETE 删除之后,重启数据库,现象】 (了解)

  • InnoDB L 自增列会从 1开始(因为它是存储在内存中的,断电即失(内存是断电即失,数据就没有了))
  • MyISAM 继续从上一个自增量开始(存在文件中的,不会丢失)

标签:name,--,gradeid,外键,数据管理,student,MYSQL,NULL,重点
From: https://blog.csdn.net/weixin_45480511/article/details/142933486

相关文章

  • 基于jsp+mysql+Spring的SpringBoot招聘网站项目
    基于jsp+mysql+Spring的SpringBoot招聘网站项目(完整源码+sql)主要实现了管理员登录,简历管理,问答管理,职位管理,用户管理,职位申请进度更新,查看简历......
  • 实战篇:(二)React 创建项目并连接 MySQL 后台的实战教程
    React创建项目并连接MySQL后台的实战教程一、项目概述本篇博客将介绍如何使用React搭建前端项目,并通过Node.js和MySQL实现简单的后台数据连接。通过这个项目,你将掌握从前端到后端数据库的基础开发流程,适合初学者或正在项目实战中的开发者。二、项目准备1.环境......
  • Mysql互为主备配置
    背景项目中某些设备,包含两块主控板,需要实现某一块板卡拔掉之后,另一块主控板继续提供服务基础环境CentOS7x86-64位mysql8.0.39nginxwindows1.18.0基础参数虚拟机A:192.168.100.100虚拟机B:192.168.100.110宿主机:192.168.0.5主备配置默认已成功安装mysql,以后再增加......
  • Scala连接数据库(mysql,redis)
    1、Scala连接mysql数据库:importjava.sql.{Connection,DriverManager,PreparedStatement,ResultSet}objectmysqlConn{defmain(args:Array[String]):Unit={Class.forName("com.mysql.jdbc.Driver")valconn:Connection=DriverManager.getCon......
  • 【MySQL】内置函数
    >作者:დ旧言~>座右铭:松树千年终是朽,槿花一日自为荣。>目标:了解MySQL的相关的内置函数,并能熟练使用。>毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!>专栏选自:带你玩转MySQL>望小伙伴们点赞......
  • centos 让 mysql 随系统启动
    [root@VM-8-12-centos~]#systemctlenablemysqlFailedtoexecuteoperation:Nosuchfileordirectory systemctlstartmysqldJobformysqld.servicefailedbecausethecontrolprocessexitedwitherrorcode.See"systemctlstatusmysqld.service"......
  • mysql5.7及以后版本设置密码
    开启skip-grant-tables配置由于安装时没有指定密码,需要配置`/etc/my.cnf`(或者`/etc/mysql/my.cnf`等已存在的配置文件),在[mysqld]下一行加上skip-grant-tables,表示无密码登入`vim/etc/my.cnf`输入“:wq”保存退出完成后重启mysqlsystemctlrestartmysqld重启后,重新登录mysq......
  • orthanc 编译安装mysql S3
    克隆代码orthancserverhgclonehttps://orthanc.uclouvain.be/hg/orthanc/sudoapt-getinstallcurlzipunziptarcdvcpkg&&./bootstrap-vcpkg.shmysqlinstalllibmysqlclinet-devset(CMAKE_BUILD_TYPE"Release")set(ORTHANC_FRAMEWORK_VE......
  • MySQL表的操作
    前面我们学习了库的操作,之后学习了MySQL中的数据类型,有了这些数据类型,我们就可以来进行表的相关操作了1.查看所有表showtables;在查看表之前,我们要先选择库在选择了库之后,查看2.创建表2.1语法CREATE[TEMPORARY]TABLE[IFNOTEXISTS]tbl_name(fieldda......
  • Docker 使用Mysql 部署Baget
    一、建立配置文件1.新建文件夹mkdir/panel/docker/baget-data/packages2.新建配置文件mk/panel/docker/baget-data/baget.envApiKey=APISSSSSStorage__Type=FileSystemStorage__Path=/panel/docker/baget-data/packagesDatabase__Type=MySqlDatabase__ConnectionS......