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 不会影响事务

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/yhc-love-cl/p/13553989.html
Copyright © 2011-2022 走看看