3.MySQL数据管理

3.MySQL数据管理

3.1外键(了解)

先来学点单词

constraint n.限制; 限定; 约束; 严管;

references 引用,提及,参考

方式1:在创建表的时候增加约束

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 = utf8mb4


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 '出生日期', 
    `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱', 
    `gradeid` INT(10) NOT NULL COMMENT '学生的年级',
    PRIMARY KEY(`id`),
    KEY `FK_gradeid`(`gradeid`),-- 定义一个键
    CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`)
    -- 学生表的gradeid字段要去引用(REFERENCES)年级表的gradeid
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;  

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

如果直接删除被引用的表会报错

image-20211016124609622

方式2:在SQLyog里直接修改(方便)

image-20211016125240638

-- 这是历史记录中的语句
ALTER TABLE `school`.`student` 
ADD CONSTRAINT ```FK_gradeid``` FOREIGN KEY (`gradeid`) REFERENCES `school`.`grade`(`gradeid`); 

那我们也可以效仿历史记录的语句自己来写

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

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

总结:

  • 数据库就是一张表,只用来存数据,只有行(数据)和列(字段)
  • 如果要使用多张表的数据,想使用外键,就通过程序去实现

3.2DML语言(全部记住)

概念:数据操作语言

  • Insert
  • update
  • delete

3.3添加(INSERT)

语法:

-- 一次插入多个不同的字段(只新建一行)
INSERT INTO `表名`(`字段名1`, `字段名2`) VALUE ('值1', '值2') -- 一个括号
-- 一次插入多个相同的字段(新建多行)
INSERT INTO `表名`(`字段名1`, `字段名2`) VALUE ('值1', '值2'),('值3', '值4') -- 多个括号

例子:

INSERT INTO `student`(`name`) VALUE ('xiaoHong')

INSERT INTO `student`(`name`) VALUE ('xiaoHong2'),('xiaoMing')

INSERT INTO `student`(`name`, `pwd`) VALUE ('xiaoXong', '001107')

image-20211016133004655

也可以不写字段名,但是要一一对应

-- 如果不写表的字段,他就会一一匹配,不能少(就是第一个值对应第一个字段,第二个值对应第二个字段...)
INSERT INTO `student` VALUE ('7','xiaoWei', '147258369', '男', '2000-11-07', '江门', 'email', '1')

image-20211016133518050

3.4修改(UPDATE)

语法:

UPDATE `表名` SET `字段1`= '值1/变量', `字段2`= '值2/变量'... WHERE `条件`

上边可以设置值,也可以设置变量(日期之类的)

例子:

-- 修改学员名字,带上条件(WHERE `id` = 1)
UPDATE `student` SET `name` = 'NoMAd' WHERE `id` = 1

image-20211016154541289

-- 不指定条件,会改动所有表
UPDATE `student` SET `name` = 'NoMAd15234'

image-20211016154605033

-- 修改多个属性,用逗号隔开
UPDATE `student` SET `name` = 'NoMAd',`gender` = '男' WHERE `id` = 1

image-20211016154751088

条件:

3.5删除(DELETE)

语法:

DELETE FROM `表名` WHERE `条件`

例子:

-- 删除数据(避免这样写,直接删除了一整张表)
DELETE FROM `student`

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

TRUNCATE

vt.截断; 截短,缩短,删节(尤指掐头或去尾)

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

-- 清空student表
TRUNCATE TABLE `student`

DELETE和TRUNCATE区别:

  • 相同点:都能删除数据,都不会删除表结构,要想完全删除一张表就用DROP关键字

  • 不同点:

    • TRUNCATE会重新设置自增列,计数器会归零

      image-20211016161536166

    • TRUNCATE不会影响事务

posted @ 2021-10-16 16:23  NoMad15234  阅读(50)  评论(0)    收藏  举报