约束

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

  非空约束(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 主键名(字段名));

 //建库:
create database db4;
use db4;
//建表:
//部门表
create table dept (id int primary key auto_increment,name varchar()); //员工表
create table emp (id int primary key auto_increment,name varchar(),deptid int,constraint fk_dept foreign key(deptid) references dept(id));
//录入值:
insert into dept values (null,'神仙部'),(null,'妖怪部'); //成功
insert into emp values (null,'孙悟空',),(null,'白骨精',); //成功
insert into emp values (null,'尼古拉斯·赵四',); //失败
insert into emp values (null,'尼古拉斯·赵四',); //成功
//删除主键数据:
delete from dept where id=; //失败 //删除主键表:
drop table dept; //失败
//通过 show create table 表名; 查看约束信息
//删除外键约束
//格式:alter table emp drop foreign key 外键约束名;
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 别名;

数据库部分(MySql)_4的更多相关文章

  1. 数据库 之MySQL 简单教程

      So Easy系列之MySQL数据库教程 1.   数据库概述 1.1.  数据库概述 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和 ...

  2. Mysql数据库知识-Mysql索引总结 mysql mysql数据库 mysql函数

    mysql数据库知识-Mysql索引总结: 索引(Index)是帮助MySQL高效获取数据的数据结构. 下边是自己整理的资料与自己的学习总结,,做一个汇总. 一.真的有必要使用索引吗? 不是每一个性能 ...

  3. 迁移应用数据库到MySQL Database on Azure

    by Rong Yu 有用户问怎么把他们应用的数据库迁移到MySQL Database on Azure上,有哪些方式,有没有需要注意的地方.今天我们来概括介绍一下迁移应用数据库到MySQL Data ...

  4. Cobar是提供关系型数据库(MySQL)分布式服务的中间件

    简介 Cobar是提供关系型数据库(MySQL)分布式服务的中间件,它可以让传统的数据库得到良好的线性扩展,并看上去还是一个数据库,对应用保持透明. 产品在阿里巴巴稳定运行3年以上. 接管了3000+ ...

  5. Mysql数据库的mysql Schema 究竟有哪些东西& 手工注入的基础要领

    #查看数据库版本号 mysql> select @@version; +------------+ | @@version  | +------------+ | 5.5.16-log | +- ...

  6. 2、ABPZero系列教程之拼多多卖家工具 更改数据库为Mysql

    因为要部署项目到云服务器,不想在服务器上装SqlServer,所以需要把项目改为Mysql. 项目初始化 1.下载项目压缩包,前面文章已经说到,可以加群到群文件里下载.解压缩下载的项目源码,使用VS2 ...

  7. 关于数据库管理系统DBMS--关系型数据库(MySQL/MariaDB)

    数据库的结构(3种):层次,网状,关系型(用的最多): DBMS的三层模型: 视图层:面向最终用户: 逻辑层:面向程序员或DBA: 物理层:面向系统管理员: 关系型数据库管理系统——RDBMS: 主要 ...

  8. 数据库【mysql篇】学习笔记

    Windows服务 -- 启动MySQL    net start mysql-- 创建Windows服务    sc create mysql binPath= mysqld_bin_path(注意 ...

  9. 数据库之数据库管理篇[mysql]

    管理数据库 1.mysql开闭使用篇 mariadb在Linux中首次进入mysql(因为此时还没有创建任何用户,mysql的root并不等效于linux中的root用户) sudo mysql 进入 ...

  10. 数据库之mysql篇(1)—— 数据库管理系统简介/mysql的安装、配置

    说mysql之前,还是先说说数据库. 什么是数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后 ...

随机推荐

  1. curl安装和使用

    curl可以看作命令行浏览器 1.开启gzip请求 # curl -I http://www.sina.com.cn/ -H Accept-Encoding:gzip,defalte 2.监控网页的响 ...

  2. ORACLE知识点总结

    一.ORACEL常用命令 1.解锁账户:ALTER USER username ACCOUNT UNLOCK; 2.查看数据库字符集:SELECT USERENV ('language') FROM ...

  3. MFC单文档视图程序简介

    在视图应用程序中,应用程序的数据由文档对象代表,数据的视图由视图对象代表.MFC的Cdocument类是文档对象的基类,Cview类是视图对象的基类.应用程序的主窗口,其操作功能在MFC的Cframe ...

  4. Maven4-仓库

    坐标和构建是一个构件在Maven世界中的逻辑表示方式,而其物理表示方式是文件.Maven通过仓库来统一管理这些文件 什么是Maven仓库? 在Maven世界中,任何一个依赖,插件或者项目构建的输出,都 ...

  5. 协程 及 libco 介绍

    libco 是腾讯开源的一个协程库,主要应用于微信后台RPC框架,下面我们从为什么使用协程.如何实现协程.libco使用等方面了解协程和libco. why协程 为什么使用协程,我们先从server框 ...

  6. 使用Kubeadm搭建Kubernetes(1.12.2)集群

    Kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,伴随Kubernetes每个版本的发布都会同步更新,在2018年将进入GA状态,说明离生产环境中使用的距离越来 ...

  7. gitlab导入现在git项目

    确保管理员所在机器的ssh 公钥已经保存在gitlab网站上. 这样管理员可以在自己的机器上和gitlab系统交互. 现在在管理员自己的机器上,进入项目目录(项目目录拷贝自git server,目录后 ...

  8. Windows 10 IoT Core 17120 for Insider 版本更新

    今天,微软发布了Windows 10 IoT Core 17120 for Insider 版本更新,本次更新只修正了一些Bug,没有发布新的特性.相比于17115,又少了两个已知的问题. 一些已知的 ...

  9. 大叔学ML第一:梯度下降

    目录 原理 实践一:求\(y = x^2 - 4x + 1\)的最小值 实践二:求\(z = x^2 + y^2 + 5\)的最小值 问答时间 原理 梯度下降是一个很常见的通过迭代求解函数极值的方法, ...

  10. SpringBoot 通过 Exploded Archives 的方式部署

    之前部署 SpringBoot 一直是用可执行 jar 的方式. java -jar codergroup-1.0.0.jar 就可以启动项目,为了能在后台运行,通常我们会使用这行命令 nohup j ...