• MySQL数据管理


    3、MySQL数据管理

    3.1、外键(了解)

    在创建表的时候,增加约束(麻烦)

    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(3) NOT NULL DEFAULT '男' COMMENT  '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT  '出生日期',
    `gradeid` INT(11) NOT NULL COMMENT '学生的年纪id',
    `adress` VARCHAR(20) DEFAULT NULL COMMENT  '家庭住址',
    `email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (`id`),
    KEY `FK_gradeid` (`gradeid`),
    CONSTRAINT  `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES  `grade`  (`gradeid`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    

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

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

    DROP TABLE student
    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(3) NOT NULL DEFAULT '男' COMMENT  '性别',
    `birthday` DATETIME DEFAULT NULL COMMENT  '出生日期',
    `gradeid` INT(11) NOT NULL COMMENT '学生的年纪id',
    `adress` VARCHAR(20) DEFAULT NULL COMMENT  '家庭住址',
    `email` VARCHAR(20) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8;
    COMMIT;
    
    -- 创建表的时候没有外键关系
    ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
    -- ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (作为外键的列)  REFERENCES  那个表(表里的那个列)
    

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

    最佳实践

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

    3.2、DML语言(重点)

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

    DML语言:数据操作语言

    • insert

    • update

    • delete

    3.3、添加

    insert

    -- 创建表的时候没有外键关系
    ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
    -- ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (作为外键的列)  REFERENCES  那个表(表里的那个列)
    
    -- 插入语句(添加)
    -- insert into 表名([字段名1,字段名2,...]) values('值1'),('值2',...);
    SELECT * FROM grade
    -- 主键自增,可以忽略
    INSERT INTO `grade`(gradename) VALUES('大四');
    INSERT INTO `grade` VALUES(2,'大三');
    -- 一般我们写插入语句,一定要保证字段和数据一一对应!
    -- 插入多个字段
    INSERT INTO `grade`(`gradename`) VALUES ('大二'),('大一');
    

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

    注意事项:

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

    3.4、修改

    update

    -- 带了学员名字,带了条件
    UPDATE student SET NAME = '张无忌' WHERE id =1;
    -- 不指定条件下灰改动所有表
    UPDATE student SET NAME = '张无忌'
    -- 修改多个属性用逗号隔开
    UPDATE student SET NAME = '韦小宝' , email = '7758520@qq.com' WHERE id =2;
    
    -- 语法
    UPDATE 表名 set colnum_name = value[,column_name = value...] where [条件]
    

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

    操作符会返回布尔值

    操作符 含义 范围 结果
    = 等于 5=6 false
    <>或!= 不等于 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 ='xx' AND id =4;
    

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

    注意:

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

    3.5、删除

    delete 命令

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

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

    TRUNCATE 命令

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

    -- 清空student表
    TRUNCATE `student`
    

    delete 和 TRUNCATE 的区别

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

    • 不同点:

      • TRUNCATE会重新设置自增列 计数器会归零
      • TRUNCATE不会影响事务
    -- 测试delete和TRUNCATE
    CREATE TABLE `test`(
    	`id` INT(12) NOT NULL AUTO_INCREMENT,
    	`coll` VARCHAR(10) NOT NULL,
    	PRIMARY KEY(`id`)
    ) ENGINE=INNODB CHARSET=utf8;
    -- 新增表数据
    INSERT INTO `test`(`coll`) VALUES('a'),('b'),('c');
    SELECT  * FROM `test`
    
    -- 测试delete删除表
    DELETE FROM `test`         -- 不会影响自增
    -- 测试TRUNCATE删除表
    TRUNCATE `test`               -- 自增会清零 
    

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

    • InnoDB 自增列 会从1开始 (存在内存中,断电即失)
    • MyISAM 继续从上一个子增量开始 (存在文件中的,不会丢失)
    刚刚参加工作,很有很多不懂不会的,发现错误,欢迎指正,谢谢!
  • 相关阅读:
    如何提升公司自动化测试技术水平
    一位寒门博士的致谢,女友回复...
    胆小鬼博弈:普通人怎么做出最佳选择?
    2021年年末全国男女比例数据公布
    数据测试方法
    如何成为一名拖垮团队的程序员
    负激励
    工作最累的部分
    Linux高级I/O函数 dup, dup2, dup3
    笔记:Vue中防抖(debounce)、节流(throttle)的介绍与运用
  • 原文地址:https://www.cnblogs.com/xd-study/p/13593675.html
Copyright © 2020-2023  润新知