mysql学习3:索引,触发器,试图

来源:互联网 发布:mac os10.8.5升级10.11 编辑:程序博客网 时间:2024/05/22 07:02
索引,是建立查询树或者hash表来实现快速查询:
23.mysql->create table surtable(id INT UNIQUE, name VARCHAR(20), UNIQUE INDEX indexid(id ASC));创建表格时创建索引。
UNIQUE INDEX indexid(name(10) ASC)####UNIQUE唯一,FULLTEXT全文,SPATIAL空间索引(用于空间如GEOMETRY定义的字段);INDEX或key表示建立索引;indexid索引名字;name索引字段;(10)字符串指定索引长度;ASC升序,DESC降序;
24.mysql->create (UNIQUE|fulltext|spatial如果需要) index index1name ON surtable(name(10) DESC);为已经存在的表格添加索引。
24-1.mysql->ALTER TABLE surtable3 ADD FULLTEXT INDEX index2n(name ASC);添加索引.
--------------------------------------------------------------+
| surtable | CREATE TABLE `surtable` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL,
  UNIQUE KEY `id` (`id`),
  UNIQUE KEY `indexid` (`id`),
  KEY `index1name` (`name`(10))
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+----------+---------------------------------------------------
24-2.mysql->show index from surtable3;查看索引。
25-1.mysql->alter table surtable3 drop key index1name;删除索引。
25-2.mysql->alter table surtable3 drop index index1name;删除索引。
25-3.mysql->drop index index1name on surtable3;删除索引。



视图:将一个/多个表的部分字段组成试图,便于观察,减少沉余。
26-1.mysql->create algorithm=undefined VIEW emview2(number1,emname,emsex) AS select num,name,sex FROM employer WITH LOCAL CHECK OPTION;创建一个试图。
ALGORITHM算法=UNDEFINED无,MERGE合并,TEMPTABLE临时图;(number1,emname,emsex)没有就和select的一样;WITH LOCAL(满足自身视图条件)/CASCADED(满足所有表的条件) CHECK OPTION;
视图合表:
26-2.mysql->CREATE ALGORITHM=MERGE VIEW myview(username,emnum,emname,emsex) AS SELECT surtable.name,num,employer.name,sex FROM employer,surtable WHERE employer.did=surtable.id WITH LOCAL CHECK OPTION;创建多表视图。
26-3.mysql->show create view myview;查看创建试图的结构。
26-4.mysql->show table status like "myview";查看表/视图的状态信息。
26-5.mysql->select * from information_schema.views;查看所有视图的构造。所有的视图放在:information_schema.views
26-6.如果要修改试图,和创建一样:LATER或者(CREATE OR REPLACE)代替CREATE,其他一样,视图名字一样即可。
27-7.更新试图,可以更新原表。如果有函数,常量等不能更新。语法和表操作INSERT,UPDATE,DELECT一样的。
27-8.DROP VIEW IF EXISTS myview;删除视图。



触发器:在INSERT,UPDATE,DELECT时,触发一些操作。和中断函数类似。
下面是建立多语句的触发
mysql> DELIMITER &&            执行多条语句,转换符号为&&,不然遇到;则执行命令了。
mysql> CREATE TRIGGER surtrigger1 AFTER INSERT ON employer FOR EACH ROW     #BEFORE/AFTER INSERT/UPDATE/DELECT.对于表employer每行操作前/后执行一面语句
    -> BEGIN                如果单条语句不用,和VB差不多啦。
    -> INSERT INTO surtable VALUES(1,"NAME");        语句1,如果employer插入之后,插入一行到surtable表。
    -> INSERT INTO surtable VALUES(2,"NAME2");        语句2
    -> END                执行完成
    -> &&                本次命令输入完成,执行。
Query OK, 0 rows affected (0.09 sec)
mysql> DELIMITER;            执行符号转换回来。

定义了该触发器后,对employer插入数据:
mysql>INSERT INTO employer VALUES(1,1,'surpas',1,'1980-01-01','slakjf');
mysql>select * from employer;
+-----+------+--------+-----+---------------------+----------+
| num | did  | name   | sex | birthday            | homeaddr |
+-----+------+--------+-----+---------------------+----------+
|   1 |    1 | surpas |   1 | 1980-01-01 00:00:00 | slakjf   |
+-----+------+--------+-----+---------------------+----------+
mysql> select * form surtable;
+------+-------+
| id   | name  |
+------+-------+
|    1 | NAME  |
|    2 | NAME2 |
+------+-------+

查看触发器:
show triggers;
select * from information_schema.triggers;
select * from information_schema.triggers WHERE TRIGGER_NAME="mytrigger1";
删除触发器:
DROP TRIGGER mytrigger1;

问题:对于一个表,有view,trigger,并且修改了该表字段(删除),trigger和view会影响到表的插入。
mysql> insert into employer values(23887,'tdfs','df','dfla');
ERROR 1062 (23000): Duplicate entry '1' for key 'id'删除了employer表对应的trigger,view就可以插入了。

0 0
原创粉丝点击