zoukankan      html  css  js  c++  java
  • MySql 数据管理 (3)

    3.1 外键

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

    create table `grade`(
    `gradeid` int(11) not null auto_increment commit '学号',
    `gradename` varchar(255) not null commit '名字',
    primary key (`gradeid`)
    )ENGING=INNODB DEFAULT CHARSET=utf8;

    -- 学生表的gradeid字段,要去饮用年级表中的gradeid字段
    -- 定义外键key
    -- 给这个外键添加约束(执行引用) references 引用
    create table `student`(
      `id` int(4) not null auto_increment commit '学号',
      `name` varchar(255) not null commit '名字',
      `gradeid` int(11) not null commit '学号',
    primary key (`id`),
    KEY `FK_grade` (`gradeid`),
    CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
    )ENGING=INNODB DEFAULT CHARSET=utf8;

     

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

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

    create table `grade`(
    `gradeid` int(11) not null auto_increment commit '学号',
    `gradename` varchar(255) not null commit '名字',
    primary key (`gradeid`)
    )ENGING=INNODB DEFAULT CHARSET=utf8;

    create table `student`(
      `id` int(4) not null auto_increment commit '学号',
      `name` varchar(255) not null commit '名字',
      `gradeid` int(11) not null commit '学号',
    primary key (`id`)
    )ENGING=INNODB DEFAULT CHARSET=utf8;

    -- 创建表的时候没有外键约束
     alter table `student`
    add CONSTRAINT `FK_grade` FOREING key (`gradeid`) REFERENCES `grade` (`gradeid`)
    -- alter table 表 add CONSTRAINT 约束名 FOREING key(作为外键的列)REFERENCES 约束的表(表里的字段)

     

    以上的操作是数据库的物理外键,数据库级别的外键,我们不建议使用!

    最佳实践

    • 数据库就是单纯的表,只用来存储数据,只有行(数据)和列(字段)

    • 我们想使用多张表的数据,使用逻辑外键(代码里实现)

    3.2 DML 语言

    本质:存储数据,操作数据

    语法:

    • insert

    • update

    • delete

    3.3 添加

    insert

    -- 插入语句(添加)
    -- insert into 表名([字段名,字段名,字段名]) values([值1,值2...])
    insert into `grade` (`gradeName`) values ('name');

    -- 由于主键自增,我们可以省略(如果不写表的字段,他就会一一对应)
    insert into `grade` values ('name');

    -- 一般写插入字段,我们一定要数据和字段一一对应
    -- 插入多个字段
    insert into `grade` values ('name'),('name1');

    insert into `student`(sex) values ('男');
    insert into `student`(name,sex,age) values ('zz','男',10);

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

    注意事项:

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

    • 字段是可以省略的,不过需要全部一一对应

    • 字段可以同时插入多条数据,只要valuse后面的用逗号隔开即可。

    3.4 修改

    update

    -- 修改学员名字
    update `student` set `name`='aa' where id = 1;

    -- 不指定条件下,会改动整个表
    update `student` set `name`='aa'

    -- 修改多个属性,逗号隔开
    update `student` set `name`='aa',sex = '男' where id = 1;

    -- 语法:
    update 表名 set column = value ,[column = value,column = value....] where [条件]

    -- 通过多条件进行定位
    update `student` set `name`='宝贝' where `name`='aa',sex = '男';

    -- 变量
    update `student` set `Birthday` = CURRENT_TIME where `name`='aa',sex = '男';

    语法:update 表名 set column = value ,[column = value,column = value....] where [条件]

    注意事项:

    • column 是数据库上的列,尽量带上``

    • 条件,如果不添加上条件,则是修改所有的数据库

    • value 可能是一个具体的值,也可以是一个变量

    • 多个设置属性之间,用逗号隔开

    3.5 删除

    delete

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

    -- 删除数据
    delete from `student`;

    -- 根据条件删除数据
    delete from `student` where id = 1;

    TRUNCATE

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

    -- 清空数据库的一张表
    TRUNCATE `student`;

     

    Delete 和 TRUNCATE 的区别

    • 相同点 : 都可以删除清空数据

    • 不同点:

      • TRUNCATE 重新设置自增列进行自增

      • TRUNCATE 不会影响事务

  • 相关阅读:
    早晨突然想到的几句话
    VBA-工程-找不到工程或库-解决方案
    Mysql 服务无法启动 服务没有报告任何错误
    一道有趣的面试题
    异步和多线程
    异或运算
    线性代数解惑
    全文搜索引擎 Elasticsearch (一)
    HandlerExceptionResolver统一异常处理 返回JSON 和 ModelAndView
    MySQL 20个经典面试题
  • 原文地址:https://www.cnblogs.com/yhc-love-cl/p/13553989.html
Copyright © 2011-2022 走看看