视图必须具有唯一的列名,不得有重复,就像基表那样。 修改视图:alter view viewname as SQL; 删除视图:drop view viewname;
alter view case_view as select cases.id as '编号',user.name as '姓名',goods.name as '名称' from user inner join(cases inner join goods on cases.goods_id=goods.id) on user.id=cases.user_id; 数据字典
数据库的数据字典---实际上是一个数据库 它记录着数据库管理系统中的其他数据库的操作 mysql数据库字典:information_schema use information_schema select * from views; --------------------------- MYSQL的事务与引擎
--------------------------- 什么是 事务(transaction)
所谓事务,它是一个操作序列。这些操作要么都执行,要么都不执行,他是一个不可分割的工作单位
事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性 mysql表类型:
在mysql中有多种表的类型,但是分为两类 : 事务类型:InnoDB、BDB
非事务类型:MYISAM、MERGE、MEMORY(HEAP)
InnoDB和BDB存储引擎提供事务安全表。BDB被包含在mac支持它的操作系统发布的mysql-max二制分发版里。InnoDB也默认被包括在所有mysql5.1二进制分发版里
InnoDB是为处理巨大数据量时的最大性能设计。它的cpu效率可能是任何其他基于磁盘的关系数据库引擎所有不能匹敌的。
MYISAM管理非事务表。他提供高速存储和检索,以及全文搜索能力。 ISAM数据表是mysql最原始的数据表,有三个文件,分别是: .frm,存放数据表的结构定义
.isd,数据文件,存放数据表中的各个数据行的内容 .ism,索引文件,存放数据表的所有索引信息。
MYISAM是数据表是ISAM数据表的继承者,也是三个文件,分别是: .frm,结构定义文件; .MYD,数据文件; .MYI,索引文件。
BDB数据表用两个文件 来表示,分别是; .frm,结构定义文件 .DB,数据表数据和索引文件
INNODB:由于采用表空间的概念来管理数据表,所以他只有一个与数据表对应.frm文件,同一目录下的其他文件表示为空间,存储数据表的数据和索引
HEAP数据表是一个存在与内存中的表,所以他的数据和索引都存在于内存中,文件系统中只有一个.frm文件,及定义结构,当mysql关闭后数据都将消失。 定义表的的类型
create table test(id int)engine=heap; 事务表币非事务表有几大优势:
更安全。即使mysql崩溃或遇到硬件问题 ,要么自动恢复,要么从备份加事务日志恢复,你可以取回数据
你可以合并许多语句,并用commit语句同时接受她们全部(如果autocommit被禁止掉)
你可以执行rollback来忽略你的改变(如果autocommit被禁止掉) 如果更新失败,你的所有改变都变回原来。(用非事务安全表,所有发生的改变都是永久的)
事务安全存储引擎可以给那些当前用 读得到许多更新的表提供 更好的部署。
非事务表自身有几大优点:
非事务表自身有几大优点,因为没有事务开支,所有优点都能出现: 更快
需要更更少的磁盘空间 执行更新需要更少的内存
你可以在同一个语句中合并事务安全和非事务安全表来获得两者最好的情况。尽管如此,在autocommit被禁止掉的事务里,变换到非事务安全表依旧即使提交并且不会被回滚 如何在innodb中实现事务:
begin://告知服务器我要开始一个事物 rollback://如果事务发生异常,那么数据回滚 commit://事务执行成功,进行数据提交 mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test11 values(1,'zhangs'); Query OK, 1 row affected (0.00 sec) mysql> select * from test11;
+------+--------+ | id | name | +------+--------+ | 1 | zhangs | +------+--------+ 1 row in set (0.00 sec) mysql> end;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server
version for the right syntax to use near 'end' at line 1 mysql> rollback;
Query OK, 0 rows affected (0.00 sec) mysql> select * from test11; Empty set (0.00 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) mysql> select * from test11; Empty set (0.00 sec) 修改表类型
sql语句:alter table tablename engine=innodb;
注意:不可以将mysql系统表比如‘user’或‘host’转换成innodb类型。系统表必须为myisam类型 对myisam进行事务处理---锁
lock table tablename(read,write)
lock table 可以对表进行加锁控制,以保证用户并发访问时非事务表的数据一致性
unlock tables 释放锁 mysql 之index(索引) 什么是索引?
索引被用来快速找出在一个列上用一特定值的行。没有索引,mysql不得不首先以第一条记录开始并然后读完整个表直到他找出相关的行,表越大,花费时间越多。如果表对于查询的列有一个索引,mysql能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。 索引的作用:
快速找出匹配一个where子句的行 当执行连接时,从其他表检索行
对特定的索引列找出max()或min()值 mysql中的索引:
索引实际上是一个分离的列表,具有一个指向全表的指针 myisam表,索引被存储为分离文件 innodb,索引存储为表空间的一部分
mysql有四种类型的索引:主键(primary key)、唯一索引(unique)、全文索引(full index)、普通索引(index) 创建index
1、create index indexname on tablename(columnname); indexname(索引名称) tablename(表名称)
columnname(要创建索引的字段名称)
2、alter table tablename add index indexname(columnname); 查看索引----show keys from tablename;