一、MySQL操作表的约束

    MySQL提供了一系列机制来检查数据库表中的数据是否满足规定条件,以此来保证数据库表中数据的准确性和一致性,这种机制就是约束。

    (1)设置非空约束(NOT NULL),唯一约束(UNIQUE),字段默认值(DEFAULT)  

create table 表名(
uid int unique,(唯一性约束,UK)
name varchar(5) not null,(非空约束,NK)
age varchar(3) default ''(设置字段默认值)
);

    (2)主键约束(相当于非空约束加上唯一约束)

create table 表名(
uid int primary key,(主键约束)
name varchar(5) not null,
age varchar(3) default ''
);

    (3)多字段主键的设置使用constraint关键字

create table 表名(
id int,
name varchar(5) not null,
age varchar(3) default '',
constraint pk_id_name primary key(id,name)
);

    (4)字段值自动增加约束的关键字auto_increment

create table 表名(
id int primary key auto_increment,
name varchar(5) not null,
age varchar(3) default ''
);

    (5)外键约束的设置constraint,foreign key,references(设置FK约束时,设置FK的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为NULL)

create table 表名(
id int,
name varchar(5) not null,
age varchar(3) default '',
constraint fk_id foreign key(id) references 主键所在表(id)
);    

  二、索引的操作

    (1)为什么使用索引:

    数据库对象索引与书的目录相似,主要是为了提供从表中检索数据的速度,索引可以由表的一个或多个字段生成的键组成,通过MySQL查找时可以有效的找到与键相关联的字段,就类似从目录直接找到我们需要的内容,而不必去全文搜索。

    索引的创建有利有弊,创建索引可以提高检索速度,但过多的索引会增加读磁盘的压力。

    根据MySQL的查询文档发现,索引分为:普通索引,唯一索引,全文索引,单列索引,多列索引和空间索引。

    (2)索引创建的场景:

    经常被查询的字段,例如where或on语句后跟随的字段

    需要分组查询的字段,例如group by后跟随的字段

    存在依赖关系的父表与字表之间的联合查询,如主键和外键

    设置唯一完整性约束的字段

    注:查询中很少使用的字段,或者字段上有许多重复值的字段,不适合添加索引

    (3)创建普通索引:index 索引名 (字段名)    

create table fuck(
id int,
name varchar(5),
age varchar(3) default '',
index index_id(id)
);

    (4)查看索引方法:

    show create table 表名 \G 

    

    explain select * from 表名 where 索引字段名=1\G

    

    (5)在已经存在的表上创建索引:

    create index 索引名 on 表名(索引字段名);

    create index index_name on fuck(name);

    alter table 表名 add index 索引名(索引字段名);

     alter table fuck add index index_age(age);

    (6)创建唯一索引(unique),全文索引(fulltext)与普通索引的语法相同,只是在index关键字前加上 unique或fulltext

    (7)创建多列索引:alter table 表名 add index 索引名(索引字段名1,索引字段名2,...);

     注:多列索引,是指创建索引时,关联了多个字段,虽然可以通过所关联的字段查询,但只有查询条件中使用了所关联字段中的第一个字段,多列索引才会起作用。

    (8)删除索引:drop index 索引名 on 表名

  三、视图的操作

    (1)为什么使用视图?

    为了提高复杂SQL的复用性和表操作的安全性,MySQL提供了视图特性,所谓视图,实际上是一种虚拟表,其内容与真实的表相似,其并不在数据库中以存储的数据值存在,行和列的数据都来自其引用的基本表。

    使用视图使程序员只需关心他们所需要的字段,并且可以屏蔽一些敏感字段,如工资等字段。

    视图的特点如下:

    a)视图是由基本表产生的虚拟表

    b)视图的列可以来自不同的表

    c)视图的建立和删除不影响基本表

    d)对视图内容的更新直接影响基本表

    e)当视图来自多个基本表时,不允许添加和删除数据

    (2)创建视图的语法

    create view 视图名 as select id ,age from 表名:create view fuck_view as select id ,age from fuck;

    (3)删除视图

    drop view 视图名

    (4)修改视图

    方式一(先删除后创建):drop view 视图名;create view 视图名 as select...

    方式二(直接修改):create or replace view 视图名 as select...

    方式三(alter语句):alter view 视图名 as select...

    注:对视图的增删查改操作和基本表一致。

   四、触发器介绍

     (1)为什么使用触发器?

    触发器(TRIGGER)是MySQL的对象之一,需要先声明后执行,但触发器的执行得由事件来触发,即在表发生更改时,自动进行一些处理。

    MySQL提供了在触发delete,update,insert语句时,就会自动执行所设置的操作。触发器可以当做是拦截器的作用。

    使用示例:单一条件触发器

    创建名字为tri_employee的触发器,在每次往fuck表中添加数据时就会触发事件,即往employee表中也添加一条数据。

create trigger tri_employee before insert on fuck for each row
insert into employee(empno,empname,salary,hiredate,deptno) values(33,'haha',688,NULL,4);

    使用示例:多条件触发器

     与单个条件的触发器不同的是,触发执行的多个语句嵌套在begin,end中间,用分号分隔,同时MySQL一般以分号作为结束符号,但在创建触发器时,需要以分号来分隔,为了解决该问题,可以使用关键字delimiter语句,来设置结束符号,如下面的语句,就将结束符号设置为$$

delimiter $$
create trigger tri_employee before insert on fuck for each row
begin
insert into employee(empno,empname,salary,hiredate,deptno) values(33,'haha',688,NULL,4);
insert into employee(empno,empname,salary,hiredate,deptno) values(44,'hehe',886,NULL,5);
end
$$
delimiter;

    查看触发器:

    (1)show triggers;

    (2)进入系统表,查看系统表中存储的触发器:use information_schema;select * from triggers \G

    (3)系统表中查看指定触发器:select * from triggers where trigger_name='xxx' \G

    删除触发器:drop trigger 触发器的名称;

MySQL整理(二)的更多相关文章

  1. .NetCore中EFCore for MySql整理(二)

    一.简介 EF Core for MySql的官方版本MySql.Data.EntityFrameworkCore 目前正是版已经可用当前版本v6.10,对于以前的预览版参考:http://www.c ...

  2. .NetCore中EFCore for MySql整理(三)之Pomelo.EntityFrameworkCore.MySql

    一.Pomelo.EntityFrameworkCore.MySql简介 Git源代码地址:https://github.com/PomeloFoundation/Pomelo.EntityFrame ...

  3. MySQL优化二(连接优化和缓存优化)

    body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-top: 10 ...

  4. MYSQL整理的语法

    MYSQL整理的语法 http://www.cnblogs.com/suoning/p/5744849.html

  5. 从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建

    从零开始搭建框架SSM+Redis+Mysql(二)之MAVEN项目搭建 废话不说,直接撸步骤!!! 1.创建主项目:ncc-parent 选择maven创建项目,注意在创建项目中,packing选择 ...

  6. python/MySQL练习题(二)

    python/MySQL练习题(二) 查询各科成绩前三名的记录:(不考虑成绩并列情况) select score.sid,score.course_id,score.num,T.first_num,T ...

  7. Python/MySQL(二、表操作以及连接)

    Python/MySQL(二.表操作以及连接) mysql表操作: 主键:一个表只能有一个主键.主键可以由多列组成. 外键 :可以进行联合外键,操作. mysql> create table y ...

  8. mysql进阶(二十九)常用函数

    mysql进阶(二十九)常用函数 一.数学函数 ABS(x) 返回x的绝对值 BIN(x) 返回x的二进制(OCT返回八进制,HEX返回十六进制) CEILING(x) 返回大于x的最小整数值 EXP ...

  9. mysql进阶(二十八)MySQL GRANT REVOKE用法

    mysql进阶(二十八)MySQL GRANT REVOKE用法   MySQL的权限系统围绕着两个概念: 认证->确定用户是否允许连接数据库服务器: 授权->确定用户是否拥有足够的权限执 ...

  10. mysql进阶(二十七)数据库索引原理

    mysql进阶(二十七)数据库索引原理 前言   本文主要是阐述MySQL索引机制,主要是说明存储引擎Innodb.   第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础.    ...

随机推荐

  1. zabbix 监控 AWS-SQS 队列

    zabbix-AWS_SQS-monitor AWS SQS status monitor with zabbix zabbix通过 AWS 云 api 自动发现.监控 AWS-SQS 本版本数据的图 ...

  2. 第二百六十一节,Tornado框架模板引擎本质

    Tornado框架模板引擎本质 只需要了解一下即可 本篇就来详细的剖析模板处理的整个过程. 上图是返回给用户一个html文件的整个流程,较之前的Demo多了绿色流线的步骤,其实就是把[self.wri ...

  3. 【BZOJ】1034: [ZJOI2008]泡泡堂BNB(贪心)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1034 弱的比弱的强就用,强的比强的强就用: 否则弱的和强的比. 输的情况就是2n-ans(b,a), ...

  4. php使用json_encode后出现中文乱码的解决方法

    <?php header("content-type:text/html;charset=utf-8"); $data = array('a'=>123,'b'=> ...

  5. UE4 Multiplayer多人局域网LAN联机打包参数设置

    需要注意几点: A. 建好后我们先到项目根目录,在Config文件夹中的DefaultEngine.ini文件加上两行: [OnlineSubsystem]  DefaultPlatformServi ...

  6. 三分搜索-ZOJ LightBulb

    开始算法基础学习的第一天 今天学习的内容是三分搜索 相对来说很基础的内容(还是觉得脑子不够用) 三分搜索主要用于凸函数查找极大值. (盗个图) 如图所示 若要查找该函数的最大值 可以考虑和二分法一样的 ...

  7. 【BZOJ4563】[Haoi2016]放棋子 错排+高精度

    [BZOJ4563][Haoi2016]放棋子 Description 给你一个N*N的矩阵,每行有一个障碍,数据保证任意两个障碍不在同一行,任意两个障碍不在同一列,要求你在这个矩阵上放N枚棋子(障碍 ...

  8. java enum(枚举)使用详解 + 总结(转载)

    enum 的全称为 enumeration, 是 JDK 1.5  中引入的新特性,存放在 java.lang 包中. 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 1. 原始 ...

  9. LeetCode-Add and Search Word

    Design a data structure that supports the following two operations: void addWord(word) bool search(w ...

  10. java -jar后台启动

    nohup  java -jar XX.jar >logs.log &