约束

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

  非空约束(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());
  7. //员工表
  8. create table emp (id int primary key auto_increment,name varchar(),deptid int,constraint fk_dept foreign key(deptid) references dept(id));
  9. //录入值:
  10. insert into dept values (null,'神仙部'),(null,'妖怪部'); //成功
  11. insert into emp values (null,'孙悟空',),(null,'白骨精',); //成功
  12. insert into emp values (null,'尼古拉斯·赵四',); //失败
  13. insert into emp values (null,'尼古拉斯·赵四',); //成功
  14. //删除主键数据:
  15. delete from dept where id=; //失败
  16. //删除主键表:
  17. drop table dept; //失败
  18. //通过 show create table 表名; 查看约束信息
  19. //删除外键约束
  20. //格式:alter table emp drop foreign key 外键约束名;
  21. 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. RabbitMQ 使用主题进行消息分发

    在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ...

  2. scrapy爬虫之断点续爬和多个spider同时爬取

    from scrapy.commands import ScrapyCommand from scrapy.utils.project import get_project_settings #断点续 ...

  3. Icehouse 创建Instance代码分析

    1. nova-api接收到request 在/etc/nova/api-paste.ini中,是这样配置nova v2的 [app:osapi_compute_app_v2] paste.app_f ...

  4. pip 安装模块时出现error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":

    在使用pip安装mysqlclient模块时,出现如下错误: 在网上查找资料后显示可能是由于不兼容导致的,最好去下载.whl文件安装成功. 资源地址:http://www.lfd.uci.edu/~g ...

  5. Vmware12 u盘启动系统

    先插U盘,再打开虚拟机 创建一个虚拟机 点击添加硬盘,下一步 先择SCSI,下一步 选择如图所示,有可能是1,也可能是2,这项就是U盘 设置完毕后,打开虚拟机,赶紧按F2,ESC 或者F12,这个是看 ...

  6. Bitmap too larget to be uploaded into a texture的解决方法

    Bitmap too larget to be uploaded into a texture的解决方法 问题描述 使用canvas.drawBitmap()系列方法时,抛出错误Bitmap too ...

  7. Springboot 前后端数据传输 常见误区

    一 content-Type代表的是,传输数据的编码方式 当ajax,JS向后台发起请求的时候,常常会设置content-type,告知服务器前台传输的数据是什么编码方式 1 application/ ...

  8. 基于.NET框架的消息通信组件ZMQ资料汇编-总目录

    ZMQ是一个比较轻量级的消息通信组件,引用官方的说法: “ZMQ (以下 ZeroMQ 简称 ZMQ)是一个简单好用的传输层,像框架一样的一个 socket library,他使得 Socket 编程 ...

  9. odoo开发笔记--取消正在升级中模块

    场景描述: 开发过程中,有时候会遇到,模块安装的时候,一直卡着,走不过去:或者安装报错,导致进入了系统! 这个时候,怎么处理呢? 先简单说下,odoo中模块的升级有4个状态,模块相关的安装情况记录在表 ...

  10. Jexus~mono中使用StackExchange.redis的问题

    在windows平台的vs里,添加包包时,可以选择StackExchange.redis,而如果你的应该程序需要部署到linux的mono环境上,使用这个StackExchange.redis是不行的 ...