返回顶部
2 3 4

MySQL(三)数据管理(外键及DML语言)

MySQL数据管理

一、外键

-- 创建一个年级表
CREATE TABLE `grade`(
	`gradeid` INT (10) NOT NULL AUTO_INCREMENT COMMENT '年纪id',
	`gradename` VARCHAR(10) NOT NULL COMMENT '年纪名称',
	PRIMARY KEY (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

方式一:在创建表的时候,增加约束(复杂)

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

CREATE TABLE IF NOT EXISTS `student`(
	`id` INT(5) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`sex` VARCHAR(3) NOT NULL COMMENT '性别',
	`grade` INT (10) NOT NULL COMMENT '学生年级',
	PRIMARY KEY(`id`),
	KEY `FK_grade` (`grade`),  -- 定义外键
	CONSTRAINT `FK_grade` FOREIGN KEY (`grade`) REFERENCES `grade`(gradeid) -- 添加约束
)ENGINE=INNODB DEFAULT CHARSET=utf8

删除有外键关系的表的时候,必须要先删除从表,在删除主表

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

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

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

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

最佳实践

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

二、DML语言

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

DML语言:数据操作语言

  • insert
  • update
  • delete

2.1 添加

insert

image-20210811114202109

INSERT INTO `表名` (`字段1`,`字段2`,`字段3`) VALUES (`值1`,`值2`,`值3`),(`值1`,`值2`,`值3`),
-- 主键自增可以省略
INSERT INTO `grade`(`gradename`) VALUES ('大二')

-- 插入多行数据
INSERT INTO `grade` (`gradename`) VALUES ('大三'),('大四')

image-20210811115019431

注意事项

  • 字段和字段间用英文逗号隔开
  • 主键字段可以省略,但值必须一一对应
  • 可以添加多行数据,不同行数据间用英文逗号隔开

2.2 修改

update

image-20210811120939150

-- 实验
UPDATE `student` SET `name`='wendaidai' WHERE id = 1
-- 修改多个属性,逗号隔开
UPDATE `student` SET `name`='cow',`sex`='女',`grade`='大四' WHERE id = 3

image-20210811121412064

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

如果没有条件语句,默认修改该属性所有数据

操作符:返回布尔值

image-20210811122526922

注意事项

  • 条件语句不能省
  • 可以修改多个属性,不同属性之间用逗号隔开
  • 值可以是定值也可以是变量

2.3 删除

delete命令

语法:delete from 表名 where 条件

-- 删除数据 (避免这么写,会全部删除)
delete from `表名`

-- 删除指定数据
delete from `student` where id = 1

TRUNCATE命令

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

-- 清空student表
trunncate `student`

delete 和 truncate 区别

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

  • 不同:

    • truncate:重新设置自增列,计数器归零
    • truncate不会影响事务

    delete删除问题:重启数据库的现象

    • INNODB:自增列会从1开始 (存在内存中)
    • MYISAM:继续从上一个自增量开始(存在文件中,不会丢失)
posted @ 2021-08-11 14:57  硫没有正七价  阅读(69)  评论(0编辑  收藏  举报