DML 数据管理-笔记

DML 数据管理

外键

image-20210205124335474

学生的grade列引用年级表的id(约束)

方法一:创建表时建立外键关系

CREATE TABLE IF NOT EXISTS `grade`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
    `name` VARCHAR(30) NOT NULL DEFAULT '未定义' COMMENT '年级',
    PRIMARY KEY(`id`)
)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 '姓名',
    `age` INT(3) NOT NULL DEFAULT '3' COMMENT '年龄',
    `gradeid` INT(4) NOT NULL  COMMENT '年级编号',
    PRIMARY KEY(`id`),
     --创建外键
    KEY `KF_gradeid` (`gradeid`),
    --创建外键约束
    CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade` (`id`) 
)ENGINE=INNODB DEFAULT CHARSET=utf8

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

方法二:创建好表的时候没有外键关系,创建好之后添加。

--正常创建两张表
CREATE TABLE IF NOT EXISTS `grade`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '年级编号',
    `name` VARCHAR(30) NOT NULL DEFAULT '未定义' COMMENT '年级',
    PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `student`(
    `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '编号',
    `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
    `age` INT(3) NOT NULL DEFAULT '3' COMMENT '年龄',
    `gradeid` INT(4) NOT NULL  COMMENT '年级编号',
    PRIMARY KEY(`id`),
)ENGINE=INNODB DEFAULT CHARSET=utf8;
--创建表成功后,通过修改表方式,添加外键关系
ALTER TABLE `student` ADD CONSTRAINT `KF_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`id`)

以上操作全是物理外键,数据库级别的外键,不建议使用(避免数据库过多造成困扰),了解即可。

最佳实践方式

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

DML

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

DML:数据操作语言

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

添加

语法

``insert into 表名([字段1,字段2,字段3...]) value[s] (值11,值12...),(值2,值22...)...`

-- INSERT 插入语句(添加)
-- INSERT INTO 表名 ([字段1] [字段2] [字段3]) value('值1','值1','值1',... )
--由于主键自增我们可以省略。
INSERT INTO `grade`(`name`) VALUE('大四');
--如果不写表字段,他就会一一匹配。
--INSERT INTO `grade` VALUE('大三')
--相当于INSERT INTO `grade`(`id`,`name`) VALUE('大三',NULL); 会报错
INSERT INTO `grade` VALUE(NULL,'大三');
-- 一般写插入语句,我们一定要数据和字段一一对应
--插入多个值,value后跟多个(),用逗号隔开。
INSERT INTO `grade`(`name`) VALUE('大二'),('大一');

image-20210206131608003

学生表添加类似,示例:

-- 学生表插入示例
INSERT INTO `student`(`name`,`age`,`gradeid`) VALUE('张三','18',4),('李四','19',3),('王五','21',1);

image-20210206132008686

注意事项

  • 字段与字段之间用 英文逗号 隔开。

  • 字段时可以省略的,但是后面的值必须从头开始一一对应,不能少,顺序不能错。

  • 可以同时插入多条数据,VALUES 后面的值,每一条数据需要使用()包裹,用英文逗号隔开。

    values(),(),()......

修改

语法

update 表名 set colnum_name = value WHERE 条件1 = 条件值

--修改示例:将id为1的数据名字改成 大川
UPDATE `student` SET `name`='大川' WHERE id = 1;
--如果不设置条件,则会把表中那一列全部修改为新的值,千万注意不要这么干!!
UPDATE `student` SET `name`='大川';
--修改多个属性,逗号隔开
UPDATE `student` SET `name`='张三',`age`='22',`gradeid`='1' WHERE `id`='1';
--修改时有多个条件,用or、and连接
UPDATE `student` SET `name`='李四',`age`='21',`gradeid`='2' WHERE `id`='2' AND `name`='大川';

带条件的示例结果:

image-20210206133505458

不带条件的错误示例:

image-20210206133618781

条件语句

条件:运算符 大于、等于、在某个区间

操作符 含义 范围 结果
= 等于 5=6 false
<>!= 不等于 5<>6 true
> 大于 5>6 false
>= 大于等于 6>=6 true
< 小于 5<6 true
<= 小于等于 5<=6 true
BETWEEN ...AND ... 在某个区间,包含头尾 5 [2-5] true
AND 相当于java中&&,与 2者true,则为true,否则false
OR 相当于java中` `,或

注意事项

  • colnum_name是数据库的列,尽量带上``
  • 条件若没有带上,默认修改所有该列存储的数据
  • value,是一个具体的值,也可以是变量
  • 多个设置的属性之间,使用英文逗号隔开

删除

语法

delete from 表名 [where] 条件

-- 删除数据
DELETE FROM `student` WHERE `id` ='1'; 
--删除全部数据(不加条件即可)
DELETE FROM `student`;
-- 清空数据表
TRUNCATE `student`

image-20210206135928033

DELETE 与 TRUNCATE的区别

  • 相同点:都能删除数据,都不会删除表结构
  • 不同点:
    • TRUNCATE 重新设置自增列 计数器会清0
      • DELETE删除后,重启数据库现象
        • InnoDB 自增会重新1开始(存在内存中,重启服务内存请了,所以会丢失)
        • MyISAM 继续从上一个自增量开始(存在文件中,不会丢失)
    • TRUNCATE 不会影响事务

以上就是本次学习整理!

posted @ 2021-02-06 14:13  大川NV  阅读(70)  评论(0)    收藏  举报