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}
- 触发器对性能有损耗,应慎用
- 同一类事件在一个表中只能创建一次
- 对于事务表,触发器执行失败则整个语句回滚
- 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
- 中间变量定义: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
- 自定义函数与存储过程类似,但是必须带有返回值
- 自定义函数与sum(),max(),等mysql原生函数使用方法类似: select func(val); select * from tbl where col = func(val)
- 由于自定义函数可能在遍历数据中使用,要注意性能损耗
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获取分页数据之后,得到的是一个数据对象,但有时会碰到要对数据对象进行二次加工的情况, ...
随机推荐
- rest_framework序列化
1.序列化 1)拿到queryset 2)将queryset 给序列化类 serializer = IdcSerializer(idc) #单个对象 serializer = IdcSerial ...
- MoveWindow() SetWindowPos()的区别与联系
敲代码时,突然发现有一个背景图片无法显示,百思不得其解,最终发现是MoveWindow() SetWindowPos()这两个函数的使用不当造成的. 这里把这两个函数的前世今生给分析一下. 先看Mov ...
- Github问题An error occurred trying to download
Github for windows安装过程出现了这样的问题An error occurred trying to download 'http://github-windows.s3.amazona ...
- java包、类、方法、属性、常量命名规则
必须用英文,不要用汉语拼音 1:包(package):用于将完成不同功能的类分门别类,放在不同的目录(包)下,包的命名规则:将公司域名反转作为包名.比如www.sohu.com 对于包名:每个字母都需 ...
- CentOS7安装Code::Blocks
在CentOS7上安装Codelocks的过程. 1.安装gcc,需要c和c++两部分,默认安装下,CentOS不安装编译器的,在终端输入以下命令即可yum install gccyum instal ...
- Leetcode 560.和为k的子数组
和为k的子数组 给定一个整数数组和一个整数 k,你需要找到该数组中和为 k 的连续的子数组的个数. 示例 1 : 输入:nums = [1,1,1], k = 2 输出: 2 , [1,1] 与 [1 ...
- Linux性能分析调优工具介绍
1.常用性能分析工具 1)CPU性能分析工具 vmstat ps sar time strace pstree top 2)Memory性能分析工具 vmstat strace top ipcs ip ...
- 【bzoj2127】happiness 网络流最小割
题目描述 高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友.这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文 ...
- 使用libcurl提示 LNK2001的错误
vs使用libcurl(static library),link时报错: error LNK2001: unresolved external symbol __imp__curl_easy_perf ...
- requireJs杂项
如果设置了baseUrl,那么baseUrl目录下的模块可以被加载,那么被加载之后的模块Id是什么?文件名吗? 入口函数的写法?是不是要执行,后面加() 中文网中指的优化工具是什么? ...