mysql数据对象
- 了解掌握常见的几种数据库对象
- 学会如何创建具体的数据对象
- DataBase/Schema
- Table
- Index
- View/Trigger/Function/Procedure
- 业务的隔离
- 资源的隔离
- 索引
- 约束
- 视图,触发器,函数,存储过程
mysql> help create index
Name: 'CREATE INDEX'
Description:
Syntax:
CREATE [ONLINE|OFFLINE] [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[index_type]
ON tbl_name (index_col_name,...)
[index_option] ..
mysql> select * from vc;
+------+------+
| v | c |
+------+------+
| AB | AB |
+------+------+
1 row in set (0.00 sec) mysql> create index idx_v on vc(v);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> alter table vc add KEY idx_c (c);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0 mysql> show index from vc;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| vc | 1 | idx_v | 1 | v | A | 1 | NULL | NULL | YES | BTREE | | |
| vc | 1 | idx_c | 1 | c | A | 1 | NULL | NULL | YES | BTREE | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec) mysql> show create table vc;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| vc | CREATE TABLE `vc` (
`v` varchar(5) DEFAULT NULL,
`c` char(5) DEFAULT NULL,
KEY `idx_v` (`v`),
KEY `idx_c` (`c`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
- 唯一约束是一种特殊的索引
- 唯一约束可以是一个或者多个字段
- 位于约束可以在建表的时候建好,也可以后面补上
- 主键也是一种唯一约束

- 主键索引 ID
- 单键索引 orderid
- 单键索引 bookid
- 组合索引 (userid + orderid)
- 主键约束 ID
- 单键唯一索引 orderid
- 组合唯一索引 userid+orderid
mysql> alter table order add primary key (id)
#实际上是给主键id增加了一个索引,而这个索引又是唯一的所以就这个索引就变成了唯一约束
mysql>alter table order add unique key idx_uk_orderid(id)
mysql > alter table order add CONSTRAINT constarint_uid FOREIGN KEY (userid) REFERENCES user(userid)
mysql > alter table order add CONSTRAINT constarint_uid FOREIGN KEY (userid) REFERENCES user(userid) on delete restrict on update cascade;
mysql> select * from c_A;
+----+------+
| id | age |
+----+------+
| 1 | 22 |
| 2 | 3 |
| 3 | 4 |
+----+------+
3 rows in set (0.00 sec) mysql> select * from c_B;
+----+------+
| id | age |
+----+------+
| 1 | 2 |
| 2 | 33 |
| 3 | 4 |
+----+------+
3 rows in set (0.00 sec) mysql> update c_B set id=11 where age = 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from c_B;
+----+------+
| id | age |
+----+------+
| 2 | 33 |
| 3 | 4 |
| 11 | 2 |
+----+------+
3 rows in set (0.00 sec) mysql> select * from c_A;
+----+------+
| id | age |
+----+------+
| 2 | 3 |
| 3 | 4 |
| 11 | 22 |
+----+------+
3 rows in set (0.00 sec)
| on delete cascade | insert | update | delete |
| parent | yes | 只能更改子表中约束字段没有的值 | yes |
| child | 只能插入父表中约束字段有的值; | 只能更改父表中约束字段没有的值 | yes |
| on update cascade | insert | update | delete |
| parent | yes | yes | 只能删子表中约束字段没有的值; |
| child | 只能插入父表中约束字段有的值; | 只能更新父表中约束字段没有的值 | yes |
- 必须是innodb表,其他引擎不支持外键
- 相互约束的字段类型必须要一样
- 主表的约束字段要求有索引(上面的例子中,user表就是主表,所以在user表中要userid要求加上索引 )
- 约束名称必须要唯一,即使不在一张表上(constarint_uid 在整个库中是唯一的)
mysql> alter table order drop FOREIGN KEY constarint_uid;
- 视图将一组查询语句构成的结果集,是一种虚拟结构,并不是实际数据
- 视图能简化数据库的访问,能够将多个查询语句结构化为一个虚拟结构
- 视图可以隐藏数据库后端表结构,提高数据库的安全性
- 视图也是一种权限管理,只对用户提供部分数据
mysql > create view order_view as select * from order where status = 1
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
- 数据订正;
- 迁移表;
- 实现特定的业务逻辑;
- 执行者
- 调用者
CREATE
[DEFINER = {user | CURRENT_USER}] -- 定义执行着的权限
TRIGGER trigger_name trigger_time
trigger_event ON tbl_name
FOR EACH ROW --涉及的每一行都会执行trigger_body
trigger_body t trigger_time:{BEFORE | AFTER}
trigger_event:{INSERT | UPDATE | DELETE}
.png)
- 触发器对性能有损耗,应慎用
- 同一类事件在一个表中只能创建一次
- 对于事务表,触发器执行失败则整个语句回滚
- row格式主从复制,触发器不会在从属库上执行
- 使用触发器时应该防止递归执行
- 使用灵活,可以使用流控制语句,自定义变量等完成复杂的业务逻辑
- 提高数据安全性,屏蔽应用程序直接对表的操作,易于进行审计
- 减少网络传输
- 提高代码维护的复杂度,实际使用中要评估场景是否适合
CREATE
[ DEFINER = { user | CURRENT_USER } ] --定义执行着的权限
PROCEDURE sp_name ( [ proc_parameter[ ,... ] ] )
[ characteristic .. ] routine_body proc_parameter:
[ IN | OUT | INOUT] param_name type
type:
Any valid MySQL data type
.png)
- 中间变量定义:DECLARE
- 流控制语句
- 参数传入
mysql> show PROCEDURE STATUS ;
mysql> SHOW TRIGGER STATUS ;
mysql> set @total = 5;
mysql> set @res = 0;
mysql> call proc_test1(@total,@res);
mysql> select @res
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
.png)
- 自定义函数与存储过程类似,但是必须带有返回值
- 自定义函数与sum(),max(),等mysql原生函数使用方法类似: select func(val); select * from tbl where col = func(val)
- 由于自定义函数可能在遍历数据中使用,要注意性能损耗
.png)


mysql> select func_test1(4);
- 触发器和存储过程不利于水平扩展,多用于统计和运维操作中;
- 还有代码管理维护成本比较高;
- 但是:
- 简化应用开发,减少数据传输,提高处理效率;
- 索引的创建于查看
- 约束:
- 唯一约束,
- 外键约束:
- alter table order add CONSTRAINT constarint_uid FOREIGN KEY (userid) REFERENCES user(userid);
- 外键约束四种模式:restrict,no action,set null,cascade;
- VIEW
- TIGGER:
- 一个表的一个事件只能定义一个触发器
- delimiter //
- NEW.age OLD.age
- PROCEDURE:
- DECLARE,
- 参数传入返回
- 流控制语言
- 使用三步骤
- 初始化参数
- 调用存储过程
- 查看放回值
- function:
- 必须带有返回值
- 使用select func_test1(14);
- SUBSTRING( goods_name,1,5 ):从位置1截取goods_name5个字符
- A rigth join B on..:B显示B中null字段;
mysql数据对象的更多相关文章
- MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题
1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...
- 浅析MySQL数据碎片的产生(data free)
浅析MySQL数据碎片的产生 2011-03-30 09:28 核子可乐译 51CTO 字号:T | T MySQL列表,包括MyISAM和InnoDB这两种最常见的类型,而根据经验来说,其碎片的产生 ...
- Java数据库——处理大数据对象
处理大数据对象 CLOB中可以存储海量文字 BLOB中可以存储海量二进制数据 如果程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本 ...
- 设置MySQL数据表主键
设置MySQL数据表主键: 使用“primary key”关键字创建主键数据列.被设置为主键列不允许出现重复的值,很多情况下与“auto_increment”递增数字相结合.如下SQL语句所示: My ...
- Kettle的应用——对mysql数据进行表输入与导出
Kettle的应用——对mysql数据进行表输入与导出 1. 下载好kettle解压包 网址:http://sourceforge.net/projects/pentaho/files/Data%20 ...
- Mysql数据实时同步
企业运维的数据库最常见的是 mysql;但是 mysql 有个缺陷:当数据量达到千万条的时候,mysql 的相关操作会变的非常迟缓; 如果这个时候有需求需要实时展示数据;对于 mysql 来说是一种灾 ...
- MySQL数据库对象-索引
1. 概述2. 索引分类2.1 不同索引的概念2.1.1 普通索引2.1.2 唯一索引2.1.3 全文索引2.1.4 多列索引3. 索引操作3.1 普通索引3.1.1 创建表时创建普通索引3.1.2 ...
- mysql的对象
mysql 常见的数据对象有哪些: DataBase/Schema Table Index View/Trigger/Function/Procedure 多Database用途: 业务的隔离 ...
- tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加
tp5 使用paginate分页获取数据对象之后 如何对对象进行数据添加 大家都知道,在使用tp5的paginate获取分页数据之后,得到的是一个数据对象,但有时会碰到要对数据对象进行二次加工的情况, ...
随机推荐
- Python数据结构之列表、元组及字典
一位大牛Niklaus Wirth曾有一本书,名为<Algorithms+Data Structures=Programs>,翻译过来也就是算法+数据结构=程序.而本文就是介绍一下Pyth ...
- 数据库脚本开发日志模板 —— 项目需求 A
前言: 在经历的几家公司的多个项目开发管理中,用 git 或者 svn来管理项目代码,都着重项目代码的管理,却疏于相应脚本的管理.本文可以参考,作为项目需求对应脚本开发记录文件(也建议用单个文件夹下放 ...
- Vue+Django REST framework打造生鲜电商项目
1-1 课程导学 2-1 Pycharm的安装和简单使用 2-2 MySQL和Navicat的安装和使用 2-3 Windows和Linux下安装Python2和Python3 2-4 虚拟环境的安装 ...
- LeetCode with Python -> Linked List
21. Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list s ...
- 深入学习之mysql(一)数据库操作
1.显示所有数据库: SHOW DATABASES; 2.创建数据库: CREATE DATABASE 数据库名: 3.选择你所创建的数据库: USE 数据库名; 4.删除数据库: DROP 数据库名 ...
- Android数据储存之SQLiteDatabase SQLiteOpenHelper类的简单使用
SQLiteOpenHelper 简介: SQLiteOpenHelper是一个借口!所以不能直接实例化!那我们想要得到SQLiteOpenHelper对象就需要实现该接口!创建该接口的实现类对象! ...
- spring IOC注解方式详解
本文分为三个部分:概述.使用注解进行属性注入.使用注解进行Bean的自动定义. 一,概述 注释配置相对于 XML 配置具有很多的优势: 它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以 ...
- poj1386 字符串类型的一笔画问题 欧拉回路
Play on Words Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 10685 Accepted: 3625 De ...
- HDU 4180 扩展欧几里得
RealPhobia Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- jquery怎样获取html页面中的data-xxx
$(this).attr("data-id") // will return the string "123"or .data() (if you use ne ...