MySQL Day02 数据管理及DML语言

MySQL 数据管理DML语言

1 外键(了解即可)

流程图描述:

在这里插入图片描述

MySQL代码测试:

(首先将数据库中表清空,随后输入以下操作,要严格按照语句输入,不然会报错

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

-- 定义年级表:
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
-- 1.定义外键KEY
-- 2.给这个外键添加约束(执行引用)
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 '密码',
	`gender` 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 `grade`(`gradeid`) -- 添加约束
)ENGINE=INNODB DEFAULT CHARSET=utf8

说明:上述代码核心是:

KEY `FK_gradeid`(`gradeid`), -- 定义外键
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`) -- 添加约束

运行成功后查看外键:

在这里插入图片描述

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

方式二、创建普通的表成功后,添加外键约束

-- 创建表的时候没有外键关系
ALTER TABLE `student` 
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);

-- ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 主表(被引用字段); 

成功执行~

以上的操作都是物理外键,数据库级别的外键,不建议使用!(避免数据库过多造成困扰)

最佳实践:

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(数据)
  • 如果想使用多张表的数据,使用外键(程序使用)

2 DML语言(全部记住)

数据库存在意义:数据存储和数据管理

DML语言:数据操作语言

  • INSERT 插入
  • UPDATE 修改
  • DELETE 删除

2.1 添加(INSERT)

(说明:以下代码执行环境为两个表:grade+student,且无外键!)

代码测试:

-- 如果不写表的字段,插入语句就会一一匹配,所以写插入语句,必须保证数据与字段一一对应!

-- 向年级表中插入数据
INSERT INTO `grade`(`gradename`) VALUES('大一')

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

-- 向学生表中插入数据
INSERT INTO `student` (`name`,`pwd`,`gender`,`gradeid`) VALUES ('张三','aaaaaa','男',4);
-- 插入多个字段
INSERT INTO `student` (`name`,`pwd`,`gender`,`gradeid`) 
VALUES ('王五','111111','男',3),('张三','aaaaaa','男',2),('李四','bbbbbb','男',1);

语法:INSERT INTO 表名([字段名1][字段2][字段3]...) VALUES('值1','值2','值3',...);

注意事项:

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

2.2 修改(UPDATE)

代码测试:

-- 修改学生姓名、邮箱
UPDATE `student` SET `name`='Demut',`email` = '[email protected]' WHERE id = 1;

-- 不指定条件的情况下,默认全部更改! 
-- 注意:以下语句谨慎执行!
UPDATE `student` SET `name` = '长江七号'; 

运行结果:

在这里插入图片描述

语法:

UPDATE 表名 SET column_name = value,[column_name = value],... WHERE [条件]

条件:WHERE字句运算符 id等于/大于/某一区间

操作符返回布尔值。

操作符 含义 范围 结果
= 等于 5=6 false
<>或!= 不等于 5<>6 true
> 大于 5>6 false
< 小于 5<6 true
>= 大于等于 5>=6 true
<= 小于等于 5<=6 true
BETWEEN … AND … 闭区间 [2, 5]
AND 我和你&& 5>1 AND 1<2 false
OR 我或你|| 5>1 OR 1<2 true
-- 通过多个条件定位数据
UPDATE `student` SET `name`='长江七号' WHERE `name` = '张三' AND `gender` = '男';

注意:

  • column_name 是数据库的列,尽量带上``
  • 条件:筛选的条件,如果没有指定,则会修改所有的列
  • value,是一个具体的值,也可以是一个变量
  • 多个设置的属性之间使用英文逗号隔开

2.3 删除(DELETE)

DELETE命令

语法:DELETE FROM 表名 [WHERE 条件]

-- 删除指定数据数据 
DELETE FROM `student` WHERE id=2;

-- 删除数据 (注意,以下代码谨慎执行,会全部删掉!)
DELETE FROM `student`

运行结果:

在这里插入图片描述

TRUNCATE 命令~删库跑路

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

-- 清空student表
TRUNCATE `student`

DELETE的TRUNCATE区别:

  • 相同点:都能删除数据,都不会删除表结构

  • 不同点:

    • TRUNCATE 重新设置自增列,计数器会归零
    • TRUNCATE 不会影响事务
  • 以下代码可自行测试:

    -- 测试DELETE和TRUNCATE区别
    CREATE TABLE `test`(
    	`id` INT(4) NOT NULL AUTO_INCREMENT,
    	`name` VARCHAR(20) NOT NULL,
    	PRIMARY KEY(`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    
    INSERT INTO `test`(`name`) VALUES('1'),('2'),('3')
    
    DELETE FROM `test` -- 不会影响自增
    
    TRUNCATE TABLE `test` -- 自增会归零
    

补充说明:DELETE删除的问题,重启数据库,现象

  • InnoDB 自增列会从1开始(存在内存中,断电即失)
  • MyISAM 继续从上一个自增量开始(存在文件中,不会丢失)

写在最后

Instead, speaking the truth in love, we will grow to become in every respect the mature body of him who is the head, that is, Christ. (Ephesians 4:15)
To Demut!

发布了35 篇原创文章 · 获赞 44 · 访问量 3814

猜你喜欢

转载自blog.csdn.net/qq_44958172/article/details/105343003