SQL命令(三)
数据完整性约束
1)数据完整性约束包含:实体完整性、参照完整性、用户定义完整性。
CREATE TABLE table(
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,*//主键约束(主键唯一,不能为空)候选键约束(候选键值唯一,不能为空)
name CHAR(50) NOT NULL,
sex,CHAR(1) NOT NULL DEFAULT 0,
age INT NOT NULL,
major CHAR(50) NOT NULL,
contact CHAR(50) NULL
CHECK(id IN (SELECT id FROM table)) *//用户完整性约束(用户应用所涉及的数据限制要求)包含非空约束、CHECK约束、触发器。
UNIQUE KEY index_name(sex)
Or
CONSTRAINT a PRIMARY KEY(id)*//命名主键约束名为a
CONSTRAINT b FOREIGN KEY(id2) * // 外键 (参照完整性 = 表间主键外键关系) 命名外键约束名为b
REFERENCES othertable(id2)
ON DELETE RESTRICT
ON UPDATE RESTRICT
);
更新完整新约束
ALTER TABLE table
ADD FOREIGN KEY index_name(id)
or
DROP PRIMARY KEY
DROP FOREIGN KEY 外键名 //(外键约束名)
2)表维护语句(mysql数据库优化)
查看索引散列程度:
ANALYZE TABLE table; * //计算散列程度+更新
SHOW INDEX FROM table;
CHECKSUM TABLE table [QUICK |EXTENDED]*//计算表校验和
CHECK TABLE table; *//检查表错误
查看:
SELECT TABLE_NAME,TABLE_TIME
FROM INFOMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'table' //表名称
AND TABLE_SCHEMA = 'database' //数据库名称
恢复表 :
REPAIR TABLE table
优化表(整理碎片特别是VARCHAR、BLOB、TEXT类型):
OPTIMIZE NO_WRITE_TO_BINLOG TABLE table; //插入,更新,删除会产生数据文件碎片
2. 触发器(指定关联到一个表的数据库对象,当一个表的特定事件(INSERT UPDATE DELETE)时,会激活触发器)
创建触发器 :
CREATE TRIGGER <触发器名> <BEFORT | AFTER> <INSERT|UPDATE|DELETE> ON <表名> FOR EACH ROW <触发器主体>
CREATE TRIGGER trig_name AFTER INSERT //插入后触发
ON table
FOR EACH ROW SET@a = NEW.table.id //使用NEW虚拟新表,即插入后的表
*同一个表不能拥有两个具有相同触发时刻和事件的触发器
*每个表最多支持6个触发器(3*2)
例子:
CREATE TRIGGER trig_name BEFORE UPDATE ON table FOR EACH ROW SET NEW.id = OLD.age+1;
删除触发器:DROP TRIGGER IF EXISTS <数据库名> <触发器名>
3.事件(指定时刻才被执行,与表不关联)
查看事件调度器
SHOW VARIABLES LIKE 'EVENT_SCHEDULER'; or SELECT@@EVENT_SCHEDULER; //查看事件调度器状态
开启调度器:
SET GLOBAL EVENT_SCHEDULER = TRUE|1|ON) *//(默认是关闭的,需要手动打开)
创建事件:
格式
CREATE EVENT <事件名> ON SCHEDULER <schedule> DO <事件主体>(schedule包含AT,EVERY,分别设定事件发生的时间和周期性发生的事件,STARTS代表开始事件 ENDS表示结束时间)
CREATE EVENT IF NOT EXISTS event_name
ON SCHEDULER EVERY 1 MONTH //每个月会执行事件
DO
INSERT INTO table
VALUES(NULL,......);
修改事件
格式:
ALTER EVENT <事件名> [RENAME TO <新事件名>] [DO <事件主体>][ENABLE|DISABLE]
ALTER EVENT event_name ENABLE|DISABLE; //开启,关闭事件
ALTER EVENT event_name RENAME TO event_name2;
删除事件:
DROP EVENT IF EXISTS event_name;
SQL命令(三)的更多相关文章
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
C#中??和?分别是什么意思? 在C#中??和?分别是什么意思? 1. 可空类型修饰符(?):引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.例如:string str=null; ...
- Oracle学习笔记四 SQL命令(二):SQL操作语言类别
SQL分为下列语言类别 1.数据定义语言(DDL) Create.Alter.Drop 2.数据操纵语言(DML) Insert.Select.Delete.Update 3.事务控制语言(TCL) ...
- 学习 Linux,101: 使用基本 SQL 命令
概述 在本教程中,将学习结构化查询语言 (SQL),包括: 使用基本 SQL 命令 执行基本数据操作 本教程将简要介绍您需要知道的与 LPI 102 考试相关的 SQL 概念. 回页首 数据库和 ...
- Linux 必掌握的 SQL 命令
数据库和 SQL 在本系列教程中,目前我们使用平面文本文件来存储数据.平面文本文件可能适合相对较少的数据,但它们对存储大量数据或查询该数据没有多大帮助.多年来,为该目的开发了多种数据库,包括分层和网络 ...
- 利用sql命令把结果集输出到文件
利用sql命令把结果集输出到文件 红色部分的三条命令完成把结果集输出到文件!! [root@test root]# psql -hlocalhost -Utest testWelcome to psq ...
- 转发:使用sql命令查询视图中所有引用的基础表
转自:使用sql命令查询视图中所有引用的基础表 使用sql命令查询视图中所有引用的基础表 之前有写过如何利用sql查询视图中所有引用的表发现这个方法并不能查出视图中所有的基础表,如果视图中有嵌套视图就 ...
- 解决Oracle+Mybatis批量插入报错:SQL 命令未正确结束
Mybatis批量插入需要foreach元素.foreach元素有以下主要属性: (1)item:集合中每一个元素进行迭代时的别名. (2)index:指定一个名字,用于表示在迭代过程中,每次迭代到的 ...
- Python全栈 MySQL 数据库(SQL命令大全、MySQL 、Python调用)
为了梦想与了信仰 开局一张图 主要三个方面: 1.Linux终端命令 2.MySQL语句 3.Python调用 先删库 再跑路..... ...
- 使用基本 SQL 命令
概述 在本教程中,将学习结构化查询语言 (SQL),包括: 使用基本 SQL 命令 执行基本数据操做 数据库和 SQL 在本系列教程中,目前我们使用平面文本文件来存储数据.平面文本文件可能适合相对较少 ...
随机推荐
- python功能
1.前端使用ajax 项目名字/views.py from django.shortcuts import render from django.http import JsonResponse fr ...
- 如何从ERP将Material的Batch信息下载到CRM并存储在settype COMM_PR_BATCH里
前提条件:必须先确保三个对象ATTRIBUTE, CLASS和OBJCL成功下载.可以到事物码R3AM1里查看,确保状态全部为Done. (1) 在事物码MM02里,切换到视图classificati ...
- Gym 101308I Inspection
题意: 用最少的路径,覆盖掉所有的边,(点可以重复): 不是用最小路径覆盖,最小路径覆盖是覆盖点: 分析: 建图:入度<出度,说明这是个起点,从这里出发,入度>出度,说明从这里结束: 先找 ...
- [ZJOI2012]小蓝的好友
https://www.luogu.org/problemnew/show/P2611 题解 \(n\times m\)肯定过不去.. 我们把给定的点看做障碍点,考虑先补集转化为求全空矩阵. 然后我们 ...
- 2018.11.7 关于将Web项目部署到阿里云服务器-5个步骤搞定
将Eclipse导出的War包部署到阿里云服务器上,提供给移动端实时的访问 1. 先登录阿里云网站注册账号,选择服务器类型(我用的是 云服务器ECS), 如果你还是在读大学生可享受优惠价,最低好像是9 ...
- UnitySendMessage
SendMessage查找的方法是在自身当中去查找 SendMessageUpwards查找的方法是在自身和父类中去查找,如果父类还有父类,继续查找,知道找到根节点为止. BroadcastMessa ...
- SyncUI跨设备同步
SynUI控制代码 <script type="text/javascript"> /* SyncUI script (Learn more at http://syn ...
- 菜鸟笔记 -- Chapter 6.2.3 成员变量
6.2.3 成员变量 在Java中对象的属性也称为成员变量[也叫字段].成员变量的类型可以设置为Java中合法的数据类型,其实成员变量就是普通的变量,可以为它设置初始值,也可以不设置初始值,如果不设 ...
- 路由器基本配置实验,静态路由和动态RIP路由
实验涉及命令以及知识补充 连线 PC和交换机FastEtherNet接口 交换机和路由器FastEtherNet接口 路由器和路由器Serial接口 serial是串行口,一般用于连接设备,不能连接电 ...
- pl sql 存储过程、函数
存储过程用于执行特定的操作,当建立存储过程时,既可以指定输入参数(in),也可以指定输出参数(out),通过在过程中使用输入参数,可以将数据传递到执行部分:通过使用输出参数,可以将执行部分的数据传递到 ...