目录
数据库基本知识
- 数据库
数据库:存放数据的仓库
数据库的发展:人工管理、文件系统、数据库系统、高级数据库
数据库种类:层次数据库、网络式数据库、关系型数据库
数据库特点:实现数据冗余,减少数据冗余;特定的数据类型;数据独立性;数据控制。
数据表:是由行和列组成,行(记录),列(字段)
数据类型:整数、浮点数、小数、二进制、时间、字符串
主键: 在表中唯一表示每一条记录。逐渐的列上不能出现两个相同的值或空值 - 数据库组成
数据库:存储数据
数据库管理系统(DBMS):管理数据库的软件
数据库应用程序:管理数据库的软件
SQL:结构化查询语言
数据库定义语言DDL | 数据库操作语言DML | 数据库查询语言 | 数据库控制语言DCL |
---|---|---|---|
DROP CREATE ALTER | INSERT UPDATE DELETE | SELECT | GRANT REVOKE COMMIT ROLLBACK |
数据库的访问接口:ODBC JDBC ADO.NET PDO
ODBC( 开放数据库互联),所有SQL数据库都可以使用这个接口
JDBC:Java API
ADO.NET:.NET
PDO:PHP5以上版本,用到这个接口
MySQL数据库简介
- 常见的数据库
oracle、DB2 、SQLserver、MySQL、postgresql - 两种架构
LAMP:Linux+Apache+MySQL+PHP
LNMP:Linux+Nginx+MySQL+PHP
Apache的性能比较高,但是安全性比较差。Nginx可以作代理服务器,功能很强大。 - 数据库架构
C/S架构(主从) - MySQL概述
MySQL由瑞典MySQL AB公司研发,目前属于Oracle公司
MySQL是一个开源的关系型数据库管理系统 - MySQL版本
社区版:完全免费
企业服务器版:收费
MySQL-5.7.x:版本号由主版本号、发行级别(次版本号)和发行版本组成。此系列版本是新的稳定版本,增加了很多功能,如:监控功能等。
MySQL-5.6.x:稳定的版本,只是对漏洞进行修复,但没有增加功能。
MySQL-5.7.8及之后的版本,新加支持JSON格式,代替了XML。增强了性能,改变了INNODB存储引擎的可扩展性。 - 优势
速度快、开源免费、简单易用、可移植性。 - MySQL语法规范
关键字与函数名必须全部大写
数据库名、表名、字段名全部小写
SQL语句必须以分号结尾
MySQL数据库安装
windows下安装较容易,这里介绍在linux下安装MySQL(v 5.6)。
- 下载安装包
[root@VM_39_157_centos ~]# wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
- 安装安装包
[root@VM_39_157_centos ~]# rpm -ivh mysql-community-release-el7-5.noarch.rpm
或`yum localinstall mysql-community-release-el7-5.noarch.rpm`
- 安装mysql-server
[root@VM_39_157_centos ~]# yum install mysql-server
- 授权
[root@VM_39_157_centos ~]# chown mysql:mysql -R /var/lib/mysql
- 初始化MySQL
[root@VM_39_157_centos ~]# mysqld --initialize
- 开启MySQL服务
[root@VM_39_157_centos ~]# systemctl start mysqld
- 检查服务状态
[root@VM_39_157_centos ~]# systemctl status mysqld
- 设置计算机启动后自动开启MySQL服务
[root@VM_39_157_centos ~]# systemctl enable mysqld
- 设置用户密码
[root@VM_39_157_centos ~]# mysqladmin -uroot password '123456'
- 停止MySQL服务
[root@VM_39_157_centos ~]# systemctl stop mysqld
数据库常用存储引擎
- mysql目录与文件
mysql数据目录:[root@instance-mtfsf05r]# ls /var/lib/mysql
mysql配置文件:[root@instance-mtfsf05r]# vim /etc/my.cnf
- mysql中的存储引擎
mysql的核心是存储引擎,引擎是指数据库底层软件或者组件
mysql引擎分类:处理事务安全的引擎、除了安全外其它事件。mysql数据库中不需要同一个服务器使用同一中存储引擎,可以针对表或数据库采用不同的引擎。
查看存储引擎:mysql> SHOW ENGINES\G;
,mysql默认引擎InnoDB。
常见的存储引擎:InnoDB、MySAM、Memory、CSV
InnoDB存储引擎:是事务型的,只有innoDB支持事务和外键(5.5版本以后采用InnoDB作为默认存储引擎),提供提交、回滚、系统崩溃前恢复安全性操作支持行索引专门为处理大数量的数据而设计的。
MyISAM存储引擎(web数据存库存储不支持事务):混合使用命令减少碎片的产生,最大索引64,最大长度1000B,支持全文索引;使用MyISAM引擎创建的数据库,产生三个文件,文件的名字与表名开始。扩展名指出文件的类型。frm文件存储表定义(.MYD)、索引(.MYI)。
Memory存储引擎:存放到内存中。只有Memory支持hash索引 - 如何选择存储引擎
如果要求提交、回滚、系统奔溃前恢复的安全性操作,使用innoDB引擎。如果数据表主要用来插入和查询操作的,使用MyISAM引擎。临时数据存放、不需要很高的企业安全性,可以使用Memory引擎。使用Memory引擎主要是用来存放查询的结果。
数据库基本操作
- 检查3306端口是否被监听
[root@instance-mtfsf05r ~]# netstat -anlpt|grep 3306
如被监听说明mysql可正常启动。 - 查看数据库
SHOW DATABASES;
- 创建数据库
CREATE DATABASE [IF NOT EXISTS] test;
CREATE DATABASE [IF NOT EXISTS] test [DEFAULT] CHARACTER SET gbk;
或CREATE DATABASE [IF NOT EXISTS] test [DEFAULT] CHARACTER SET = gbk;
(指定编码) - 修改数据库
ALTER DATABASE test [DEFAULT] CHARACTER SET = utf8
- 删除数据库
DROP DATABASE [IF EXISTS] test
数据表基本操作
- 表创建的格式
按行和按列的方式存储,每一行唯一一条记录,每一列代表记录中的某个字段或域。
创建表的格式:
CREATE TABLE [IF NOT EXISTS] 表名
(
字段1 数据类型 [列级别约束],
[表级别约束条件]
)
- 表级约束与列级约束
列级约束中除了NOT NULL、DEFAULT约束之外,既可以在列定义时声明,也可以在列定义后声明。表级约束只能在列定义后声明。
根据约束字段数目的多少,只针对一个字段为列级约束,针对2个或2个以上的字段称为表级约束。 - 单字段主键与多字段主键
主键:主键上的字段数据唯一,不能重复,可以加快数据查询速度。
单字段主键(由一个字段组成)主键有两种方式设置:
CREATE TABLE [IF NOT EXISTS] 表名
(
id int(32) PRIMARY KEY,
)
CREATE TABLE [IF NOT EXISTS] 表名
(
id int(32),
PRIMARY KEY(id)
)
多字段联合主键(由多个字段组成):
CREATE TABLE t3
(
id int(32),
name varchar(11),
PRIMARY KEY(id,name)
);
- 外键
一个表可以有一个或多个外键;外键可以是空的或者默认值;其作用是保证数据的完整性;定义外键之后,不允许删除另一个表中记录。
主表:具有主键的表(t1)
从表:具有外键的表(t2)
t1表:
mysql> CREATE TABLE t1
( id int(8),
name varchar(32),
PRIMARY KEY(id)
);
t2表:
mysql> CREATE TABLE t2
( id int(8),
name varchar(32),
PRIMARY KEY(id),
CONSTRAINT test01 FOREIGN KEY(id) REFERENCES t1(id)
);
外键列和参照列必须创建索引,如果外键列不存在索引,MySQL将自动创建索引。mysql> CREATE TABLE t2 ( id int(8),name varchar(32), PRIMARY KEY(id),FOREIGN KEY(id) REFERENCES t1(id));
从表的外键字段要与主表的主键字段具有相似的数据类型,其中数字的长度或是否有符号必须相同,字符的长度可以不同。
外键约束的要求:主表与从表必须使用相同的存储引擎,准确来讲数据库表的存储引擎只能是innoDB。
- 约束
非空约束
(NOT NULL):字段内容不允许为空。唯一性约束
(unique key):唯一约束可以保证记录的唯一性;唯一约束的字段可以为空值;每张表可以存在多个唯一约束。
mysql> create table t4 (
id int(32) primary key,
name varchar(32),
unique key(name)
);
或:
mysql> create table t4 (
id int(32) primary key,
name varchar(32) UNIQUE
);
默认约束
:sex ENUM('1','2',''3) DEFAULT '3'
属性值自动增加
:AUTO_INCREAMENT;默认起始值是1,每次增加1;可以是整数,也可以是浮点数(小数位数必须是0)
AUTO_IINCREMENT必须和Primary Key一起使用,PRIMARY KEY不必须和AUTO_INCREMENT一起使用。
- 数据表的结构
查看表结构:DESC 表名;
或DESCRIBE 表名;
或:SHOW CREATE TABLE 表名;
Field:字段名称
Type:数据类型
Null:是否为空
Key:PRI主键、UNI UNIQUE
Default:默认值
Extra:扩展的一些值(设置增加的属性) - 修改表名
ALTER TABLE 表名 RENAME [TO] 新表名;
- 修改表的字段类型
ALTER TABLE 表名 MODIFY 字段名 字段类型;
- 修改字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 字段类型;
添加字段
ALTER TABLE 表名 ADD 新字段 字段类型;
在第一列中添加:ALTER TABLE 表名 ADD 新字段 字段类型 FIRST;
在最后一列中添加:ALTER TABLE 表名 ADD 新字段 字段类型 AFTER;
在某列字段添加后添加新字段:ALTER TABLE 表名 ADD 新字段 字段类型 AFTER 某列字段;
添加多个字段:ALTER TABLE 表名 ADD 新字段 字段类型 [约束],新字段 字段类型 [约束];
添加多个字段不能指定位置关系,只能在原数据表的基础上添加。
- 删除字段
ALTER TABLE 表名 DROP 字段名
删除多个字段:ALTER TABLE 表名 DROP 字段名,DROP 字段名,DROP ……;
- 修改字段默认值
ALTER TABLE 表名 ALTER 字段名 SET DEFAULT 默认值;
- 删除字段的默认值
ALTER TABLE 表名 ALTER 字段名 DROP DEFAULT;
添加约束
添加主键约束:ALTER TABLE 表名 ADD CONSTRAINT 约束名 PRIMARY KEY(字段名);
添加唯一约束:ALTER TABLE 表名 ADD UNIQUE(字段名);
添加外键约束:ALTER TABLE 表名 ADD FOREIGN KEY(子表外键) REFERENCES 父表名(父表主键);
父表已有主键且存在约束,子表中主键自动创建索引。
删除约束
删除主键约束:ALTER TABLE 表名 DROP PRIMARY KEY;
不需要指定主键约束的名称,一张表只有一个主键约束。
删除唯一约束:SHOW INDEX FROM 表名;``ALTER TABLE 表名 DROP INDEX 索引名;
删除外键约束:查看外键名称SHOW CREATE TABLE 表名\G;
,ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;
删除外键约束,但是会存在索引,需要删除索引ALTER TABLE 表名 DROP INDEX 外键(字段)名;
- 修改表的存储引擎
ALTE TABLE 表名 ENGINE=MyISAM
- 删除未关联的表
DROP TABLE [IF EXISTS] 表名;
删除已被关联的表
如果直接删除父表,会删除失败,破坏表的完整性。如果非要删除,可以先删除与其关联的子表,再删除父表。但是,通常我们需要保存子表,所以需要先删除子表的外键约束条件,再删除父表。ALTER TABLE 子表 DEOP TABLE FOREIGN KEY 外键约束名;
MySQL数据类型
- 数字类型
- TINYINT
占用1个字节,1Byte = 8 bit,有符号:-27~27-1;无符号 0~28-1( -128~127, 0~255) - SMALLINT
占用2个字节,有符号:215~215-1; 无符号:0~216-1( -32768~32767, 0~65535) - MEDIUMINT
占用3个字节,有符号:223~215-1; 无符号:0~223-1( -8388608~8388607, 0~16777215) - INT
占用4个字节,有符号:231~231-1; 无符号:0~232-1( -214748648~214748647, 0~4294967295) - BIGINT
占用8个字节,有符号:263~263-1; 无符号:0~264-1( -9223372036854778~9223372036854777, 0~184467440703709551615)
创建表的时候,如果没有指定数据类型的宽度,系统会自动指定宽度。tinyint(4)、smallint(6)、mediumint(9)、int(11)、bigint(20)
- 浮点型
- FLOAT
FLOAT[(M,D)],单精度浮点类型,占4个字节
M:总位数
D:小数的位数 DOUBLE
DOUBLE[(M,D)],双精度浮点类型,占8个字节插入数据位数多于定义的小数点位数,四舍五入取值
- 定点数类型
DECIMAL(M,D) 取值范围和DOUBLE(M,D)相同,但定点数以字符串方式存储 - 日期与时间类型
- YEAR
格式:YYYY
占用空间:1字节
表示范围:1901~2155
mysql> CREATE TABLE t5(t YEAR);
mysql> INSERT INTO t5 values (2000),('2000')
可以用字符串表示还可以用数字格式。 - DATE
格式:YYYY-MM-DD
占用空间:3字节
范围:0000-00-00 ~ 9999-12-31insert t8 values ('9999-12-31');
- TIME
格式:HH:MM:SS
占用空间:3字节
范围:-838:59:59'/'838:59:59
mysql> insert t6 values ('00:00:00'); - DATETIME
格式:YYYY-MM-DD HH:MM:SS
占用空间:8字节
范围:0000-00-00 00:00:00 ~ 9999-12-31 23:59:59
mysql> insert t7 values('0000-00-00 00:00:00');
mysql> insert t7 values('9999,12~31 00:00:00');#也可以 TIMESTAMP
格式:YYYYMMDD HHMMSS
占用空间:8字节跨时区问题,很多用数字来表示。
- 文本字符串型
- CHAR
占用空间:0-255字节,定长字符串
自动删除尾部多余的空格,处理速度比VARCHAR要快一些,但是浪费存储空间。 - VARCHAR
占用空间:0-65535 字节,变长字符串
CHAR类型是定常类型(不足补空格)、VARCHAR是变长类型(不足不会不补空格),CHAR可以不指定长度,默认是1。但是,VARCHAR必须指定长度。CREATE TABLE t ( name char(6), pwd varchar(6) ); insert t values ('a ','a '); select concat('(',name,')',concat('(',pwd,')') from t;
CHAR比VARCHAR要严格,会删去多余的空格。 - TINYTEXT
占用空间:0-255字节,短文本字符串 - MEDIUMTEXT
占用空间:0-16 777 215字节,中等长度文本数据 LONGTEXT
占用空间:0-4 294 967 295字节,极大文本数据MyISAM最好使用固定长度的数据代替可边长数据的列,使整个表静态化,提高检索效率。
查看当前数据库:SHOW DATABASE()
查看数据表:SHOW TABLES FROM DBName;
数据库查询-基本的查询语句
- select语句
查询使用select语句,select语句的基本结构:SELECT 字段列表 FROM 表名 [WHERE 条件;]
查询多个字段使用逗号隔开;查询所有字段,使用“*”号。
FROM:指定数据来源的表
WHERE:是可选参数,指定查询条件
数据库查询-单表查询
单表查询:从一张表中查询数据
- 查询所有字段
SELECT *FROM 表名;
SELECT 所有字段名(逗号隔开) FROM 表名
除非使用表中的所有数据,最好不适用通配符。使用通配符可以节省输入查询语句的时间,但是获取不需要的列会增加查询的时间。 - 查询指定字段
SELECT 列名(字段名) FROM 表名;
- 查询指定记录
使用where字段去指定查询记录范围,SELECT 字段名 FROM 表名 WHERE 查询条件;
使用IN与NOT IN关键字查询:
IN:指定的范围
NOT IN:不在指定的范围SELECT 字段名 FROM 表名 WHERE 字段名 IN/NOT IN (……);
BETWEEN…AND…SELECT 字段名 FROM 表名 WHERE 字段名 BETWEEN 起始 AND 结束;
LIKESELECT 字段名FROM 表名 WHERE 字段名 LIKE '%';
SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '_';
%匹配任意长度、任意数量的字符
_匹配任意一个字符 - 查询空值的字段
SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL;
- 多条件查询
AND:满足所有条件
OR:两组任意一个条件 - 查询结果排序
ORDER BY:对查询结果进行排序SELECT 字段名 FROM 表名 ORDER BY (根据的)字段名
数据库查询-合并查询结果并去重
UNION ALL:合并查询结果,不去重SELECT 字段 FROM 表名 WHERE 条件 UNION ALL SELECT SELECT 字段 FROM 表名 WHERE 条件
UNION:合并查询结果,去重SELECT 字段 FROM 表名 WHERE 条件 UNION SELECT SELECT 字段 FROM 表名 WHERE 条件
数据库查询-正则表达式查询
^ | $ | . | * | + | [集合] | [^] | {n,} | {n,m} | string |
---|---|---|---|---|---|---|---|---|---|
匹配开头字符 | 匹配结尾字符 | 匹配任意单个字符 | 匹配任意个字符 | 匹配前面的字符1~n次 | 匹配范围中的任意字符 | 匹配不再范围内的任何字符 | 匹配前面的字符至少n次 | 匹配前面的字符至少n次,最大m次 | 匹配包含任意字符串的文本 |
- 匹配某个或某些字符
SELECT *FROM 表名 WHERE 某字段 REGEXP 'A'
:匹配包含A的数据 - 查询特定字符开头
SELECT *FROM 表名 WHERE 某字段 REGEXP '^A'
:匹配字符A开头的数据 - 查询特定结尾
SELECT *FROM 表名 WHERE 某字段 REGEXP '$A'
:匹配A结尾的数据 - 用符号.替代任意一个字符
SELECT *FROM 表名 WHERE 某字段 REGEXP '.'
:匹配任意一个字符 - 使用+和*匹配0个或多个字符
SELECT *FROM 表名 WHERE 某字段 REGEXP '^a*'
:匹配字符A开头,后面有任意多的字符的数据
数据插入方式
- 插入单条记录
INSERT [INTO] 表名 SET 字段 = 值
INSERT [INTO] 表名 (字段1,字段2,…) VALUES (值1,值2,…);
INSERT [INTO] 表名 VALUES (值1,值2,……);
(按照字段顺序赋值) - 插入多条记录
表中只有一个字段插入多条数据:INSERT [INTO] 表名 VALUES (值1),(值2)……;
多个字段插入数据:INSERT [INTO] 表名 (字段1,字段2,…) VALUES (值1,值2),(值1,值2)……;
将查询结果插入数据表:INSERT [INTO] 表1 (字段1,字段2) SELECT (字段3,字段4) FROM 表2 [WHERE条件]
效率问题:插入多条记录,一个单行INSERT插入多行数据的语句等同于多个单行插入的INSERT语句。多个单行插入语句比单个插入多行数据的语句执行效率高。因为mysql执行单个插入多行数据的语句需要使用多条INSERT语句块。 - 使用INSERT…SELECT…插入数据
将表2字段的数据插入到表1字段:INSERT INTO 表1(表1字段) SELECT 表2字段 FROM 表2;
数据表中数据的更新与删除
- 单表更新
UPDATE 表名 SET 字段1 = 值1,字段2 = 值2,,,WHERE 条件;
多表更新
以内连接的两表为例,参照一张表更新另一张表:
结构:UPDATE 表1 INNER JOIN 表2 ON 表1字段 = 表2字段 SET ……
例子:UPDATE goods INNER JOIN goods_cates ON good_cate = cate_name SET goods_cate = cate_id;
实现的实际目标是:参照商品分类表(goods_cates),将商品表(goods)中的商品所属分类(goods_cate)与商品分类表中的分类id对应起来。当商品分类表中的cate_id的值发生改变,使用此语句可更新商品表中的goods_cate的值。- 单表删除
DELETE FROM 表名 WHERE 某字段 = 某值
多表删除
结构:DELETE FROM 表1 LEFT JOIN 表2 ON 表1关联字段 = 表2关联字段 WHERE 表1.表1字段 = 表2.表2字段;
例子:DELETE FROM t1 LEFT JOIN t2 ON t1.good_name = t2.goods_name WHERE t1.goods_id>t2.goods_id;
删除表t1中goods_id大于表2中的goods_id的数据。
数据库索引
- 索引的含义
索引是存储在磁盘空间中的数据库结构,包含数据表中所欲创建索引的记录。所有存储引擎都支持大于或等于16个索引,索引长度265字节以上。 - 索引存储类型
BTREE:MyISAM、InnoDB支持BTREE
HASH:Memory、HEAP支持HASH - 索引的特点
创建唯一索引,可以保证数据表中的每一行数据唯一;加快数据库的查询速度;加快表与表之间的连接 - 普通索引
允许定义索引的列中插入重复值和空值 - 唯一索引
索引列的值可以为空,但是必须唯一。唯一索引分为组合索引和主键索引。
组合索引:组合的字段值也必须唯一
主键索引:不允许有空值 - 单列索引
一个索引只包含一个列,但是一个表可以有多个单个索引。 - 组合索引
组合多个字段创建索引,使用最左侧字段才能使用索引。 - 全文检索索引
FULLTEXT,支持全文查找,允许定义索引的列中插入重复值和空值。仅支持CHAR VARCHAR TEXT类型的字段中创建。 - 索引的设计要求
索引并不是越多越好(占用磁盘空间、降低管理语句的性能,如INSERT UPDATE、DELETE语句的性能,当表中的数据更改的同时索引会进行调整和更新);避免对经常发成变动的数据表建立索引;数据量比较小无须创建索引
索引的创建
- 创建索引的方式
CREATE TABLE:创建表的同时创建索引
ALTER TABLE已:存在的表中创建索引
CREATE INDEX:已存在的表中添加索引 - 创建索引的格式
CREATE TABLE 表名(字段1,字段2,… [UNIQUE|FULLTEXT|SPATIAL] [INDEX|KEY] 索引名称(字段1,字段2,,[(索引长度)]))
- 普通索引的创建
CREATE TABLE test(id INT,name VARCHAR(40),year YEAR NOT NULL,INDEX(year));
SHOW CREATE TABLE test\G;
正在使用的索引:EXPLAIN SELETC *FROM test WHERE year = 2019\G;
- 唯一索引
CREATE TABLE test(id INT NOT NULL,name VARCHAR(40),UNIQUE INDEX index_id (id));
EXPLAIN SELETC *FROM test WHERE id= 1\G;
- 组和索引
CREATE TABLE test(id INT NOT NULL,name VARCHAR(40),INDEX composite_index (id,name(100)));
EXPLAIN SELECT *FROM test WHERE name = 'thanlon' ;
组合字段创建索引,最左侧字段才能使用索引,name不是最左侧字段,id是最左侧字段:EXPLAIN SELECT *FROM test WHERE id = 1
EXPLAIN SELECT *FROM test WHERE id = 1 AND name = 'thanlon';
- 全文索引
CREATE TABLE test(id INT,name VARCHAR(20) NOT NULL,FULLTEXT INDEX index_fulltext(name)) ENGINE = MyISAM;
EXPLAIN SELECT *FROM test WHERE name = 'thanlon' ;
注意:创建索引的字段必须支持全文索引,5.7默认使用InnoDB,但是它不支持全文索引,需要将特定表改为MyISAM存储引擎。 - 空间索引
MyISQM类型的表中创建,索引字段不能为NULL,CREATE TABLE test(name GEOMETRY NOT NULL,SPATIAL INDEX spatial_name(name))ENGINE = MyISAM;
索引的删除
- ALTER TABLE删除索引
ALTER TABLE 表名 DROP INDEX 索引名;
- DROP TABLE删除索引
DROP INDEX 索引名 ON 表名;
单表视图应用
- 视图的含义
提高数据的安全性;视图与真实的表一样具有行和列;视图可以理解为一种虚拟的表 - 视图的作用
- 简单化
简化对数据的操作,经常使用的查询可以被定义为视图,使用户不用指定全部的查询条件。 - 安全性
通过视图,用户可以查看和修改用户所能看到的字段。对于其它字段,用户是看不到也不能修改的。
- 创建视图的格式
CREATE[OR REPLACE][ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE|}] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCASDED | CASCASDED ] CHECK OPTION]
CREATE:创建视图
REPLACE:替换已经创建的视图
ALGORITHM:视图选择算法
UNDEFINED:mysql自动选择的算法
MERGE:将使用的视图语句与定义合并起来
TEMPTABLE:将试图结果存入临时表,然后用临时表来存储语句。
VIEW:视图的名称
column_list:属性列
SELECT_statement :SELECT语句
CASCASDED :默认值,表示更新视图时要满足所有相关视图和表的条件
LOCAL:更新视图时满足该视图本身定义 - 创建视图
CREATE TABLE test(id int,uid int);
CREATE VIEW view_name AS SELECT id,uid,id*uid FROM test;
SELECT *FROM view_name
多表视图应用
- 创建视图
CREATE TABLE stu(id int,name varchar(30));
CREATE TABLE stu_info(id int,glass varchar(30));
INSERT INTO stu VALUES (1,'thanlon'),(2,'kiku');
INSERT INTO stu_info VALUES (1,'Maria'),(2,'Mike');
CREATE VIEW view_name (id,name,glass) AS SELECT stu.id,stu.name,stu_info.glass FROM stu,stu_info WHERE stu. id = stu_info.id;
- 查看视图结构:
DESCRIBE view_name;
- 查看视图基本信息:
SHOW TABLE STATUS LIKE 'view_name '\G;
- 查看表的基本信息
SHOW TABLE STATUS LIKE 'stu '\G;
- 查看视图详细信息
SHOW CREATE VIEW view_name\G;
- 删除视图
DROP VIEW view_name
单语句触发器应用
- 触发器
当定义的事件发生,被mysql自动调用。 - 创建触发器的语法格式
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt;
trigger_name:标识触发器名,自定义
trigger_time:标识触发时机,可以指定before或after
trigger_event:标识触发事件,包括INSERT、UPDATE、DELETE
tb_name:标识建立触发器的表名,在哪张表中建立触发器
trigger_stmt:触发器程序体,触发程序可以使用begin和end作为开始和结束,中间包含多条语句 - 创建触发器