zoukankan      html  css  js  c++  java
  • 数据库部分(MySql)_4

    约束

      约束:给表的字段名添加限制条件;

      非空约束(not null):添加非空约束后,字段值不能为null;

      唯一约束(unique):添加唯一约束后,字段值不能重复;

      主键约束(primary key):添加了主键约束,主键值不能为null并且不能重复;

      自增:当自增字段名赋值为null时,字段值会自动增长;删除数据库数值不会减,数值会从曾经的最大值基础上+1;可以使用truncate使自增数值清零;

      默认约束(default):给字段添加默认约束,当不对此字段赋值时,默认值生成;

      CREATE TABLE student (id int,age default 10);

      检查约束(check):在MySQL中,check约束后,语法支持,但是不生效;

      外键约束:指用来建立两张表之间关系的字段,值指向另外一张表的主键,一张表主键只能有一个,但是外键可以有多个;添加外键约束后,外键的值可以为null、可以重复,但是不能使用关联表中不存在的数据,被关联的表和数据不能直接删除,需要去掉约束或先删除关联数据;

      CREATE TABLE emp (id int,age int ,deptid int ‘主键id’, CONSTRAINT 外键约束用别名区分 FOREIGN KRY (外键对应的主键id) REFERENCES 主键名(字段名));

     1 //建库:
     2         create database db4;
     3             use db4;
     4 //建表:
     5     //部门表        
     6         create table dept (id int primary key auto_increment,name varchar(10)); 
     7   
     8     //员工表        
     9         create table emp (id int primary key auto_increment,name varchar(10),deptid int,constraint fk_dept foreign key(deptid)    references dept(id));    
    10         //录入值:
    11        insert into dept values (null,'神仙部'),(null,'妖怪部');  //成功
    12        insert into emp values (null,'孙悟空',1),(null,'白骨精',2); //成功
    13        insert into emp values (null,'尼古拉斯·赵四',3);  //失败
    14        insert into emp values (null,'尼古拉斯·赵四',3);  //成功
    15        //删除主键数据:
    16         delete from dept where id=1;  //失败
    17 
    18         //删除主键表:
    19         drop table dept;   //失败
    20         //通过 show create table 表名; 查看约束信息
    21         //删除外键约束
    22     //格式:alter table emp drop foreign key 外键约束名;
    23         alter table emp drop foreign key fk_dept;

      myisam引擎不支持外键约束,要求两张表都是innodb引擎才能使用外键约束;

      在JAVA开发中,除非特定情况,一般不使用外键约束,应为会给测试带来不便;

    索引

      索引是数据库中用来提高查询效率的技术,类似于字典中的目录;

      为什么使用索引:如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到为止,使用索引后,磁盘块会以树状结构对数据进行保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率;

      索引是否越多越好?

        不是,因为索引会占用磁盘空间,对常用的数据、写在查询条件后面的字段创建索引;

      有索引一定好么?

        不是,如果数据量小,添加索引有可能会降低查询效率;

      索引的分类

        聚集索引(聚簇索引):一个表只有一个索引,通过主键创建的索引称为聚集索引;数据库会自动为添加了主键约束的表增加聚集索引,在聚集索引中保存着查询依据和数据;

        非聚集索引:通过非字段创建的索引称为非聚集索引,在非聚集索引中保存着查询依据和地址(没有数据);

      如何创建索引

        格式:CREATE INDEX 索引名 ON 表名 (字段名(长度));

        CREATE INDEX index_item_title ON item(title);

      如何查看索引

        SHOW INDEX FROM item;

      删除索引

        DROP INDEX index_item_title ON item;

      复合索引

        通过多个字段创建的索引

        应用场景:频繁使用多个字段作为查询条件的时候,可以为这几个字段创建复合索引;

        格式:CREATE INDEX index_item_title ON item(title,price);

      索引总结

        1、索引是用来提高查询效率的技术,类似于目录;

        2、因为索引会占磁盘空间,所以并非越多越好;

        3、如果数据量小添加索引反而会降低查询效率;

        4、索引分为聚集索引(如果添加主键自动添加聚集索引、保存数据、一个表只有一个)和非聚集索引(有多个、不保存数据、保存地址);

        5、如果表中数据频繁修改尽量不要使用索引;

    事务

      数据库中执行SQL语句的最小工作单元,不能拆分,可以保证事务中的多条SQL语句全部成功或全部失败;

    事务的ACID特性

      Atomicity 原子性:最小,不可拆分,保证全部成功或全部失败;

      Consistency 一致性:从一个一致状态到另一个一致状态;

      Isolation 隔离性:多个事务之间互不影响;

      Durability 持久性:事务提交后数据持久保存到数据库中;

    事务相关指令

      查看自动提交状态

        SHOW VARIABLES LIKE '%autocommit%';

      修改自动提交状态

        SET AUTOCOMMIt=0/1;

      提交

        COMMIT;

      回滚

        ROLLBACK

      设置回滚点

        SAVEPOINT 别名;

      回滚到指定回滚点

        ROLLBACK 别名;

     

  • 相关阅读:
    pthread_once函数的简单示例
    pthread_join直接决定资源是否能够及时释放
    非分离线程未使用join函数例子:
    一个HTTP打趴80%面试者
    BM和KMP字符串匹配算法学习
    STL 几个容器的底层实现
    指针的引用(*&)与指针的指针(**)
    Maven 环境变量设置
    配置JAVA的环境变量
    Maven报错 解决方案。ERROR: No goals have been specified for this build. You must specify a valid lifecycle phase or a goal in the format <plugin-prefix>:<goal> or <plugin-group-id>:<plugin-artifact-id
  • 原文地址:https://www.cnblogs.com/DebugTheWorld/p/9824422.html
Copyright © 2011-2022 走看看