MySQL
阿里云社区https://developer.aliyun.com/mirror目次
[*]
[*]一:数据库
[*]1.1
[*]二: MySQL数据库根本操作
[*]2.1 创建数据库:
[*]2.2 使用某个数据库:
[*]2.3 删除数据库:
[*]2.4 查询支持的存储引擎
[*]2.5 创建表:
[*]2.6 查看表结构:
[*]2.7 查看表结构详细信息:
[*]2.8 删除表:
[*]三:表的操作
[*]3.1 修改表名字:
[*]3.2 增加字段:
[*]3.2.1 在表的第一个位置增加字段:
[*]3.2.2在表的指定字段之后增加字段
[*]3.3 删除字段:
[*]3.4 修改字段:
[*]3.5 修改字段的名字:
[*]3.6 同时修改字段的名字和属性:
[*]3.7 修改字段的顺序:
[*]四:操作表的约束:
[*]4.1 设置非空约束:(NOT NULL ,NK)
[*]4.2 设置字段的默认值:(DEFAULT)
[*]4.3 设置唯一约束(UNIQUE ,UK)
[*]4.3.1 给某字段上的UK约束设置一个名字:
[*]4.4设置主键约束:
[*]4.4.1 单字段主键:
[*]4.4.1.1 给字段上的PK约束设置一个名字:
[*]4.4.2 多字段主键:
[*]4.5设置字段值主动增加(AUTO_INCREMENT)
[*]4.6设置外键约束(FOREING KEY ,FK)
[*]六: 索引的操作:
[*]6.1 创建和查看索引:
[*]
[*]6.1.1 创建表时创建平凡索引:
[*]6.1.1.2:效验索引:
[*]6.1.1.2 在已存在的表上创建平凡索引:
[*]6.1.1.3 通过SQL语句ALTER TABLE 创建平凡索引:
[*]6.1.2 创建和查看唯一索引:
[*]6.1.2.1 创建表时创建唯一索引:
[*]6.1.2.2在已经存在的表上创建唯一索引:
[*]6.1.2.3用SQL 语句ALTER TABLE 创建唯一索引:
[*]6.1.3 创建和查看全文索引:
[*]6.1.3.1:创建表时创建全文索引:
[*]6.1.3.2 在已经存在的表上创建全文索引
[*]6.1.3.3 通过SQL语句ALTER TABLE 创建全文索引
[*]6.1.4创建和查看多列索引
[*]6.1.4.1 创建表时创建多列索引
[*]6.1.4.2在已存在的表中创建多列索引
[*]6.1.4.3SQL语句ALTER TABLE 创建多列索引
[*]6.2删除索引
[*]6.2.1 删除索引的语句形式
[*]效验索引是否被使用:
[*]删除索引:
[*]效验是否还存在索引:
[*]七 视图的操作
[*]7.1 创建视图的语法形式:
[*]
[*]选择数据库:
[*]创建视图:
[*]查询视图操作:
[*]创建各种视图
[*]1.1 封装实现查询常量语句的视图,即所谓的常量视图
[*]1.2 封装使用聚合函数(SUM、MIN、MAX、COUNT等)查询语句的视图
[*]1.3 封装了实现排序功能(ORDRE BY)查询语句的视图
[*]1.4 封装了实现表内连接查询语句的视图
[*]1.5封装了实现表外连接(LEFT JOIN 和 RIGHT JOIN)查询语句的视图
[*]1.6 封装了实现子查询相关查询语句的视图
[*]1.7封装了实现记录联合(UNION和UNION ALL)查询语句的视图
[*]7.2 查看视图
[*]7.2.1 SHOW TABLES 语句查看视图名
[*]7.2.2 SHOW TABLE STATUS 语句查询视图详细信息
[*]SHOW TABLE 可以查看名为select_product视图的详细信息
[*]7.2.3 SHOW CREATE VIEW 语句查询视图界说信息
[*]viewname:参数表现为所要查看界说信息的视图名称
[*]7.2.4 DESCRIBE | DESC 语句查看视图计划信息
[*]7.2.5通过系统表查看视图信息
[*]系统表information_schema.views
[*]7.3 删除视图的语法形式
[*]7.4 修改视图
[*]7.4.1 CREATE OR REPLACE VIEW 语句修改视图
[*]
[*]7.4.1.1 已存在视图,但是有新的需求,可以先删除原视图,在建立视图:
[*]7.4.1.2 但先删除视图,在建立视图比较麻烦。可用如下语句进行实现更换视图:
[*]7.4.2 ALTER 语句修改视图
[*]7.5 利用视图操作根本表
[*]7.5.1 检索(查询)数据:
[*]7.5.2 利用视图操作根本表数据
[*]7.5.2.1 添加数据操作
[*]7.5.2.2 删除数据操作
[*]7.5.2.3 更新数据操作
[*]八 触发器
[*]8.1 创建触发器
[*]8.1.1 创建一条执行语句的触发器
[*]8.1.2 创建包含多条执行语句的触发器
[*]8.2 查看触发器
[*]8.2.1 通过SHOW TRIGGERS 语句查看触发器
[*]8.2.2 通过查看系统表triggers 实现查看触发器
[*]8.3 删除触发器
[*]8.3.1 通过DROP TRIGGER 语句删除触发器
[*]九 数据的操作
[*]9.1 插入数据记录
[*]9.1.1 插入完备数据记录
[*]9.1.2插入数据记录一部分
[*]9.1.3插入多条数据记录
[*]1.插入多条完备数据记录
[*]2.插入多条部分数据记录
[*]9.1.4 插入查询结果
[*]9.2 更新数据记录
[*]9.2.1 更新特定数据记录
[*]9.2.2 更新所有数据记录
[*]9.3 删除数据记录
[*]9.3.1 删除特定数据记录
[*]9.3.2 删除所有数据记录
[*]十 单表数据记录查询
[*]10.1 简单数据记录查询
[*]
[*]单表数据查询遵照原则:
[*]10.1.1 简单数据查询
[*]10.1.2 避免重复数据查询---DISTINCT
[*]10.1.3 实现数学四则运算数据查询
[*]10.1.4 设置显示格式数据查询
[*]10.2条件数据记录查询
[*]10.2.1 带关系运算符和逻辑运算符的条件数据查询
[*]1.单条件数据查询
[*]2.多条件数据查询
[*]10.2.2 带BETWEEN AND 关键字的范围查询
[*]1.符合范围的数据记录查询
[*]2.不符合范围的数据记录查询
[*]10.2.3 带IS NULL 关键字的空值查询
[*]1 空值数据记录查询
[*]2.不是空值数据记录查询
[*]10.2.4 带IN 关键字的集合查询
[*]1 在集合中数据记录查询
[*]3.关于集合查询注意点
[*]10.2.5 带LIKE关键字的暗昧查询
[*]通配符
[*]1.带"%"通配符的查询
[*]2.带"_"通配符的查询
[*]3.带LIKE关键字的暗昧查询的注意点
[*]10.3 排序数据记录查询
[*]
[*]排序数据记录查询方法
[*]10.3.1 按照单字段排序
[*]1.升序排序
[*]2.降序排序
[*]10.4 限制数据记录查询数量
[*]初始位置的方式
[*]10.4.1 不指定初始位置
[*]1.显示记录数小于查询结果
[*]2.显示记录数大于查询结果
[*]10.4.2 指定初始位置
[*]10.5 统计函数和分组数据记录查询
[*]10.5.1 MySQL支持的统计函数
[*]1.统计数据记录条数
[*]2.统计计算平均值
[*]3.统计计算求和
[*]4.统计计算最大值和最小值
[*]10.5.2 关于统计函数的注意点
[*]10.5.3 分组数据查询————简单分组查询
[*]10.5.4 分组数据查询————实现统计功能分组查询
[*]10.5.5 分组数据查询————实现多个字段分组查询
[*]10.5.6 分组数据查询————实现HAVING子句限定分组查询
[*]十一 多表数据记录查询
[*]11.1 关系数据操作
[*]11.1.1 并(UNION)
[*]11.1.2 笛卡尔积(CARTESIAN PRODUCR)
[*]11.1.3 内连接(INNER JOIN)
[*]1.自然连接(INNER JOIN)
[*]2.等值连接
[*]3.不等连接
[*]11.1.4 外连接(OUTER JOIN)
[*]1.左外连接(LEFT OUTER JOIN)
[*]2.右外连接(RIGHT OUTER JOIN)
[*]3.全外连接(FULL OUTER JOIN)
[*]11.2 内连接查询
[*]11.2.1自连接
[*]11.2.2 等值连接
[*]11.2.2.1 多张表等值连接(三张表)
[*]11.2.3 不等连接
[*]11.3 外连接查询
[*]
[*]外连接分为三类:
[*]11.3.1 左外连接
[*]11.3.2 右外连接
[*]11.4 合并查询数据记录
[*]
[*]1.带有关键字UNION的合并操作
[*]2.带关键字UNION ALL 的合并操作
[*]11.5 子查询
[*]11.5.1 返回结果为单行单列和单行多列子查询
[*]1.返回结果为单行单列子查询
[*]2.单行多列子查询
[*]11.5.2 返回结果为多行单列子查询
[*]1.带有关键字IN的子查询
[*]2.带有关键字ANY的子查询
[*]3.带有关键字ALL的子查询
[*]4.带有关键字EXISTS的子查询
[*]11.5.3 返回结果为多行多列子查询
[*]十二 使用MySQL运算符
[*]12.1 使用算术运算符
[*]12.2 使用比较运算符
[*]12.2.1 常用比较运算符
[*]12.2.2 实现特殊功能比较运算符
[*]12.3 使用逻辑运算符
[*]12.5 使用位运算符
[*]十三 使用MySQL常用函数
[*]13.1 使用字符串函数
[*]13.1.1 合并字符串函数CONCAT()和CONCAT_WS()
[*]13.1.2 比较字符串巨细函数STRCMP()
[*]13.1.3 获取字符串长度函数LENHT()和字符串函数CHAR_LENGTH()
[*]13.1.4 实现字母巨细写转换函数UPPER()和字符串函数LOWER()
[*]13.1.5 查找字符串
[*]1.返回字符串位置的FIND_IN_SET()函数
[*]2.返回指定字符串位置的FIELD()函数
[*]3.返回子字符串相匹配的开始位置(三个函数LOCATE()、POSITION()和INSTR() )
[*]4.返回指定位置的字符串的ELT()函数
[*]5.选择字符串的MAKE_SET()函数
[*]13.1.6 从现有的字符串中截取子字符串(LEFT(),RIGHT(),SUBSTRING(),MID())
[*]1.从左边或右边截取子字符串
[*]2.截取指定位置和长度子字符串
[*]13.1.7 去除字符串的首尾空格(LTRIM(),RTRIM(),TRIM())
[*]1.去除字符串开始处空格
[*]2.去除字符串结束处空格
[*]3.去除字符串首尾空格
[*]13.1.8 更换字符串
[*]1.INSERT(str,pos,len,newstr);
[*]2.使用REPLACE()函数
[*]13.2 使用数值函数
[*]13.2.1 获取随机数(RAND(),RAND(x))
[*]13.2.2 获取整数的函数(CEIL()(CEILING()),FLOOR())
[*]13.2.3 截取数值函数(TRUNCATE())
[*]13.2.4 四舍五入函数(ROUND())
[*]13.3 使用日期和时间函数
[*]13.3.1 获取当前日期和时间的函数
[*]1 获取当前日期和时间:
[*]2获取当前日期CURDATE(),CURRENT_DATE()
[*]3获取当前时间(CURTIME(),CURRENT_DATE())
[*]13.3.2通过各种方式显示日期和时间
[*]1.通过UNIX方式显示日期和时间
[*]2通过UTC方式显示日期和时间
[*]13.3.3获取日期和时间各部分值
[*]1.关于月的函数(MONTH())
[*]2.关于星期的函数(DAYNAME(),DAYOFWEEK(),WEEKDAY())
[*]3.关于天的函数
[*]4.获取指定的EXTRACT()函数
[*]13.3.4 计算日期和时间的函数
[*]1.与默认日期和时间操作
[*]2与指定日期和时间操作
[*]13.4 使用系统信息函数
[*]13.4.1 获取MySQL系统信息
[*]13.4.2 获取AUTO_INCREMENT约束的最后ID值
[*]13.4.3 其他函数
[*]
[*]流程函数
[*]实现特殊功能的函数
[*]十四 存储过程和函数的操作
[*]14.1 为什么使用存储过程和函数
[*]14.2 创建存储过程和函数
[*]
[*]14.2.1 创建存储过程语法形式
[*]14.2.2 创建函数语法形式
[*]14.2.3 创建简单的存储过程和函数
[*]14.3 关于存储过程和函数的表达式
[*]14.3.1 操作变量
[*]1 声明变量(DECLARE)
[*]2 赋值变量(SET),(SELECT...INTO)
[*]14.3.2 操作条件
[*]1.界说条件(DECLARE)
[*]2.界说处理程序
[*]14.3.3 使用游标
[*]1.声明游标
[*]2.打开游标(OPEN)
[*]3.使用游标(FETCH)
[*]4.关闭游标(CLOSE)
[*]14.3.4 使用流程控制
[*]1条件控制语句
[*]2.循环控制语句
[*]14.4 修改存储过程和函数(ALTER PROCEDURE和ALTER FUNCTION)
[*]
[*]1.修改存储过程
[*]14.4.2 修改函数
[*]14.5 删除存储过程和函数
[*]14.5.1通过DROP PROCEDURE语句删除存储过程
[*]14.5.2 通过DROP FUNCTION语句删除函数
[*]十五 MySQL事务
[*]15.1事务概述
[*]
[*]1.REDO日志
[*]2.UNDO日志
[*]15.2 MySQL事务控制语言
[*]15.3 MySQL事务隔离级别
[*]15.3.1 READ-UNCOMMITTED(读取未提交内容)
[*]15.3.2 READ-COMMITTED(读取提交内容)
[*]15.3.3 REPEATABLE-READ(可重读)
[*]15.3.4 Serializable(可串行化)
[*]15.4 InnoDB锁机制
[*]15.4.1 锁的类型
[*]1.共享锁
[*]2.排他锁
[*]3.意向锁
[*]15.4.2 锁粒度
[*]十六 MySQL安全性机制
[*]16.1 MySQL软件所提供的权限
[*]16.1.1 系统表mysql.user
[*]1.用户字段
[*]2.权限字段
[*]权限字段
[*]3.安全字段
[*]4.资源控制字段
[*]16.1.2 系统表mysql.db和mysql.host
[*]1.用户字段
[*]3.权限字段
[*]16.1.3其他权限表
[*]1.系统表mysql.tables_priv的表结构
[*]2.系统表columns_priv的表结构
[*]3.系统表procs_priv的表结构
[*]16.2 MySQL软件所提供的用户机制
[*]
[*]16.2.1 登岸和退出MySQL软件的完备下令
[*]16.2.2 创建平凡用户账户
[*]1.执行CREATE USER 语句来创建用户账户
[*]2.执行INSERT 语句来创建用户
[*]3.执行GRANT语句创建用户
[*]16.2.3 利用拥有超级权限用户root修改用户账户密码
[*]1.通过mysqladmin下令修改root用户密码
[*]2.通过SET下令修改密码修改root用户密码
[*]3.更新系统表mysql.user数据记录修改root用户密码
[*]16.2.4利用超级权限用户root修改平凡用户账户密码
[*]1.通过GRANT下令修改cjgong用户密码
[*]2.通过SET下令修改密码修改cjgong用户密码
[*]3.更新系统表mysql.user数据记录修改cjgong用户密码
[*]4.通过SET下令修改密码修改cjgong用户密码
[*]16.2.5删除平凡用户账号
[*]1.通过 DROP USER 语句删除平凡用户
[*]2.删除系统表mysql.user 数据记录实现删除cjgong用户记录
[*]十七 MySQL日志管理
[*]17.1 MySQL软件所支持的日志
[*]17.2 操作二进制日志
[*]17.2.1 启动二进制日志
[*]17.2.2 查看二进制日志
[*]17.2.3 停止二进制日志
[*]17.2.4 删除二进制日志
[*]17.3 操作错误日志
[*]17.3.1 启动错误日志
[*]17.3.2 查看错误日志
[*]17.3.3 删除错误日志
[*]17.4 通用查询日志
[*]17.4.1 启动通用查询日志
[*]通过设置环境变量general_log进行通用查询日志的动态控制,on表现开启
[*]
[*]
[*]
[*]查看相关的环境变量
[*]17.4.2 查看通用查询日志
[*]17.4.3 停止通用查询日志
[*]17.4.4 删除通用查询日志
[*]17.5慢查询日志
[*]17.5.1 启动慢查询日志
[*]17.5.2 查看慢查询日志
[*]17.5.3 分析慢查询日志
[*]17.5.4 停止慢查询日志
[*]17.5.5 删除慢查询日志
一:数据库
1.1
information_schema:主要存储系统中的数据库对象信息,
用户表信息、列信息、权限信息、字符信息、分区信息。
performance_schema :主要存储数据库服务器性能参数。
mysql:存储系统的用户权限信息
test:自动创建的测试数据库。二: MySQL数据库根本操作
2.1 创建数据库:
create database '名字';
如:create database jay; 2.2 使用某个数据库:
use jay;2.3 删除数据库:
drop database '名字';
如:drop database jay;2.4 查询支持的存储引擎
SHOW ENGINES;2.5 创建表:
create table table_name (
属性名 数据类型,
属性名 数据类型,
...
属性名 数据类型,
); --'table_name':所要创建的表的名字。2.6 查看表结构:
describetable_name;
如:desc |describejay;2.7 查看表结构详细信息:
show create table table_name;
如:show create table jay \G;2.8 删除表:
drop table table_name;
如:drop table jay;三:表的操作
3.1 修改表名字:
alter table old_table_name RENAME【to】new_table_name;3.2 增加字段:
alter tabletable_name ADD 属性名 数据类型;3.2.1 在表的第一个位置增加字段:
alter table table_name ADD 属性名 数据类型 FIRST;3.2.2在表的指定字段之后增加字段
alter tabletable_name ADD 属性名 数据类型 FIRST 属性名;3.3 删除字段:
alter table table_name DROP 属性名;3.4 修改字段:
alter table table_name MODIFY 属性名 数据类型;3.5 修改字段的名字:
alter tabel table_name CHANGE 旧属性名 新属性名 旧数据类型;3.6 同时修改字段的名字和属性:
alter table table_name CHANGE 旧属性名 新属性名 新数据类型;3.7 修改字段的顺序:
alter table table_name MODIFY 属性名1 数据类型
FIRST|AFTER 属性名2
PS:属性名1 、属性名2 必须是表中已存在的字段名。四:操作表的约束:
4.1 设置非空约束:(NOT NULL ,NK)
CREATE TABLE table_name (
属性名 数据类型 NOT NULL ,
... ...
);
PS:NOT NULL 保证所有记录中该字段都有值,用户插入记录时,
如果为空,则会报错;4.2 设置字段的默认值:(DEFAULT)
CREATE TABLE table_name (
属性名 数据类型 DEFAULT 默认值,
......
);
PS : 用户插入一条新纪录时,没有为某个字段赋值,
数据库会自动为此地段插入默认值;4.3 设置唯一约束(UNIQUE ,UK)
CREATE TABLE table_name (
属性名 数据类型 UNIQUE L,
... ...
);
PS:数据库表中的某个字段的内容不允许重复时,使用UK进行约束。4.3.1 给某字段上的UK约束设置一个名字:
CREATE TABLEt_dept (
属性名1数据类型,
属性名2 数据类型
... ...
CONSTRAINTuk_属性名1 UNIQUE(属性名1)
);4.4设置主键约束:
4.4.1 单字段主键:
CREATE TABLE t_dept(
属性名数据类型PRIMARY KEY
... ...
);4.4.1.1 给字段上的PK约束设置一个名字:
CREATEB TABLE t_dept(
属性名1数据类型,
CONSTRAINT pk_属性名1 PRIMARY KEY(属性名1)
); 4.4.2 多字段主键:
CREATE TABLE t_dept(
属性名数据类型,
... ...
CONSTRAINT 约束名 PRIMARY KEY(属性名1,属性名2,...)
); --约束名指的是:pk_dname_deptno 4.5设置字段值主动增加(AUTO_INCREMENT)
CREATE TABLE t_dept(
属性名数据类型AUTO_INCREMENT,
... ...
);4.6设置外键约束(FOREING KEY ,FK)
CREATE TABLE t_dept(
属性名 数据类型,
属性名 数据类型
......
CONSTRAINT外键约束名 FOREINGKEY(属性名1)
REFERENCES 表名(属性名2)
); --PS:外键约束名:用来标识约束名,
--属性名1:参数是子表设置外键的字段名,
--属性名2:参数是父表中设置主键约束的字段名。六: 索引的操作:
索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,
这些键存储在数据结构(B-树或哈希表)
索引分为:B型树索引(BTREE)哈希索引(HASH)
InnoDB和MyISAM存储引擎支持BTREE类型索引
MEMORY 存储引擎支持HASH类型索引
MySQL 默认为前者索引;
MySQL 支持6种索引:普通索引、唯一索引、全文索引、
单列索引、多列索引、空间索引
索引优点:提高查找速度,保证字段的唯一性。
缺点:过多的创建索引会占据许多磁盘空间6.1 创建和查看索引:
6.1.1 创建表时创建平凡索引:
CREATE TABLE t_dept(
属性名数据类型,
属性名数据类型,
... ...
属性名数据类型,
INDEX|KEY【索引名】(属性名1 【(长度)】【ASC|DESC】)
);
PS:INDEX|KEY 参数:指定字段为索引,
'索引名'参数:指定所创建索引名,
'属性名1':指定索引所关联的字段的名称,
'长度': 指定索引的长度,
ASC|DESC :用来指定为 升序|降序。
**
CREATE TABLE t_dept(
deptno INT,
dname VARCHAR(20),
loc VARCHAR(40),
INDEX index_deptno(deptno)
);
PS: MySQL 支持的储存引擎每个至少支持16个索引,
总索引长度至少256字节。6.1.1.2:效验索引:
校验索引是否创建成功,EXPLAIN:
EXPLAINSELECT * FROM t_dept WHERE deptno =1 \G;6.1.1.2 在已存在的表上创建平凡索引:
CREATE INDEX 索引名ON 表名(属性名【(长度)】【ASC|DESC】)
PS: CREATE INDEX 创建索引,‘索引名’:创建的索引名
ON:所要创建索引的表名称6.1.1.3 通过SQL语句ALTER TABLE 创建平凡索引:
ALTER TABLE tanle_nameADD INDEX|LEY
索引名(属性名 【(长度)】【ASC|DESC】)
PS: INDEX|LEY:创建普通索引
'索引名'所创建索引名
'属性名'指定索引关联的字段的名称
'长度'指索引的长度
ASC|DESC :用来指定为 升序|降序 6.1.2 创建和查看唯一索引:
6.1.2.1 创建表时创建唯一索引:
CREATE TABLE table_name(
属性名数据类型,
属性名数据类型,
... ...
属性名 数据类型,
UNIQUE INDEX|KEY 【索引名】(属性名1
【(长度)】【DESC|ASC】);
PS:UNIQUE INDEX 或 UNIQUE KEY 表时创建唯一索引。6.1.2.2在已经存在的表上创建唯一索引:
CREATE UNIQUE INDEX 索引名 ON 表名(属性名
【(长度)】【ASC|DESC】)6.1.2.3用SQL 语句ALTER TABLE 创建唯一索引:
ALTER TABLE table_name ADD UNIQUE INDEX |KEY
索引名(属性名【(长度)】【ASC|DESC】)6.1.3 创建和查看全文索引:
6.1.3.1:创建表时创建全文索引:
CREATE TABLE table_name(
属性名 数据类型,
属性名 数据类型,
... ...
属性名 数据类型,
FULLTEXT INDEX|KEY 【索引名】(属性名1 【(长度)】【ASC|DESC】)
ENGINE =MyISAM|InnoDB
); -- FULLTEXT INDEX或FULLTEXT KEY 表示创建全文索引6.1.3.2 在已经存在的表上创建全文索引
CREATE FULLTEXT INDEX 索引名
ON 表名(属性名【(长度)】【ASC|DESC】);
CREATE FULLTEXT INDEX 关键字表创建全文索引6.1.3.3 通过SQL语句ALTER TABLE 创建全文索引
ALTER TABLEtable_name ADD FULLTEXT INDEX|KEY
索引名(属性名【(长度)】【ASC|DESC】);6.1.4创建和查看多列索引
6.1.4.1 创建表时创建多列索引
CREATE TABLE table_name(
属性名数据类型,
属性名数据类型,
... ...
属性名数据类型,
INDEX|KEY 【索引名】(属性名1 【(长度)】【ASC|DESC】,
......
属性名n 【(长度)】【ASC|DESC】)
);--创建索引时,所关联的字段至少大于一个字段6.1.4.2在已存在的表中创建多列索引
CREATE INDEX 索引名
ON 表名(属性名 【(长度)】【ASC|DESC】,
... ...
属性名n 【(长度)】【ASC|DESC】
);
如: CRETAE INDEX index_loc
ON t_dept (dname,loc)
--index_loc:索引名
--t_dept :表名
--dname、loc :属性名
SHOW CREATE TABLE table_name \G;6.1.4.3SQL语句ALTER TABLE 创建多列索引
ALTER TABLE table_name
ADD INDEX|KEY 索引名 (属性名 【(长度)】【ASC|DESC】,
... ...
属性名n【(长度)】【ASC|DESC】
);
如:ALTER TABLE t_dept
ADD INDEX index_dname_loc(dname,loc);
SHOW CREATE TABLE t_dept \G;6.2删除索引
6.2.1 删除索引的语句形式
DROP INDEX index_name ON table_name;
-- index_name:索引名字
--table_name : 表对象效验索引是否被使用:
EXPLAIN SELECT * FROM t_dept WHERE dname='cjgong' \G;删除索引:
DROP INDEX index_dname_loc ON t_dept;效验是否还存在索引:
SHOW CREATE TABLE t_dept\G;
七 视图的操作
特点:
1.视图的列可来自不同的表,是表的抽象和在逻辑意义上建立的新关系
2.视图是由基本表(实表)产生的表(虚表)
3.视图的建立和删除不影响基本表
4.对视图内容的更新(添加、删除和修改)直接影响基本表
5.当视图来自多个基本表时,不允许添加和删除数据7.1 创建视图的语法形式:
CREATE VIEW view_name AS 查询语句;
--视图不能重名
--视图的功能实际上是封装了复杂的查询语句
如:数据库view 水果产物表 t_product
创建隐藏价格字段price的视图selectproduct选择数据库:
USE view;创建视图:
CREATE VIEW view_selectproduct
AS
SELECT id,nameFROM t_product;查询视图操作:
SELECT * FROM view_selectproduct;创建各种视图
如:现有两张分别表示学生和组的表t_student和t_group1.1 封装实现查询常量语句的视图,即所谓的常量视图
CREATE VIEW view_test1 AS SELECT 3.1415926;1.2 封装使用聚合函数(SUM、MIN、MAX、COUNT等)查询语句的视图
CREATE VIEW view_test2 AS SELECT COUNT(name)
FROM t_student;1.3 封装了实现排序功能(ORDRE BY)查询语句的视图
CREATE VIEW view_test3 AS SELECT name FROM t_student
ORDER BY id DESC;1.4 封装了实现表内连接查询语句的视图
CREATE VIEW view_test4 AS SELECT s.name
FROM t_student as s,t_group as g WHERE s.group_id=g.id
AND g.id=2; 1.5封装了实现表外连接(LEFT JOIN 和 RIGHT JOIN)查询语句的视图
CREATE VIEW view_test5 AS SELECT s.name FROM
t_student as s LEFT JOIN t_group as g ON s.group_id=g.id
WHEREg.id=2;1.6 封装了实现子查询相关查询语句的视图
CREATE VIEW view_test6 AS SELECT s.name
FROM t_student as s WHERE s.group_id IN (SELECT id
FROM t_group);1.7封装了实现记录联合(UNION和UNION ALL)查询语句的视图
CREATE VIEW view_test7 AS SELECT id,name
FROM t_student UNION ALL SELECT id,name FROM t_group;7.2 查看视图
7.2.1 SHOW TABLES 语句查看视图名
如: USE view;
SHOW TABLES;7.2.2 SHOW TABLE STATUS 语句查询视图详细信息
语法: SHOW TABLE STATUS 【FROM db_name】【LIKE 'pattern'】
如:查询view数据库的视图和表的详细信息
SHOW TABLE STATUS FROM view \G
返回信息解释如下:
-字段名 含义
-Name 表和视图的名
-Engine 标的存储引擎(在MySQL4.1.2之前,用type 表示)
-Version 表的.frm 文件的版本号
-Row_format 表的行存储格式
-Rows 表中行的数目
-Avg_row_length 表中行平均行长度
-Data_length 表数据文件的长度
-Max_data_length 表数据文件的最大长度
-Index_length 表索引文件的长度
-Data_free 表被整序后,但是未使用的字节的数目
-Auto_increment 表中下一个AUTO_INCREMENT值
-Create_time 表的创建时间
-Update_time 表的最后一次更新时间
-Check_time 表的最后一次检查的时间
-Collation 表的字符集
-Checksum 表的活性校验
-Create_options 表的额外选项
-Comment 表的注解SHOW TABLE 可以查看名为select_product视图的详细信息
SHOW TABLE STATUS FROM view LIKE
'view_select_product' \G;7.2.3 SHOW CREATE VIEW 语句查询视图界说信息
SHOW CREATE VIEW viewname;viewname:参数表现为所要查看界说信息的视图名称
7.2.4 DESCRIBE | DESC 语句查看视图计划信息
DESCRIBE | DESC viewname;7.2.5通过系统表查看视图信息
系统表information_schema.views
USE information_schema;
SELECT * FROM views WHERE
table_name='view_select_product'\G;7.3 删除视图的语法形式
DROP VIEW view_name 【,view_name】...
如:删除一个视图表:
DROP VIEW view_selectproduct
删除多个视图表:
DROP VIEW view_dselectproduct1,
view_selectproduct2,...;7.4 修改视图
7.4.1 CREATE OR REPLACE VIEW 语句修改视图
7.4.1.1 已存在视图,但是有新的需求,可以先删除原视图,在建立视图:
DROP VIEW view_selectproduct;
CREATE VIEW view_selectproduct AS SELECT name FROM t_product;7.4.1.2 但先删除视图,在建立视图比较麻烦。可用如下语句进行实现更换视图:
CREATE OR REPLACE view view_name AS 查询语句;
CREATE OR REPLACE view view_selectproduct
AS SELECT name FROM t_product;7.4.2 ALTER 语句修改视图
ALTER VIEW view_name AS 查询语句;
ALTER VIEWview_selectproduct AS SELECT name FROM t_product;7.5 利用视图操作根本表
7.5.1 检索(查询)数据:
SELECT * FROM view_selectproduct;7.5.2 利用视图操作根本表数据
7.5.2.1 添加数据操作
INSERT INTO view_product (id,name,price,order_id)
VALUES(11,'PEAR4',12.3,2);
或者INSERT INTO view_product VALUES(11,'PEAR4',12.3,2);7.5.2.2 删除数据操作
DELETE FROM view_product WHERE name='apple1';7.5.2.3 更新数据操作
UPDATE view_product SET price=3.5 WHERE name='pear1';八 触发器
触发器与编程语言的函数非常类似,都需要声明、执行,
且触发器的执行是由事件来触发。
使用触发器可以加强数据库表中数据的完整性约束和业务规则等。8.1 创建触发器
8.1.1 创建一条执行语句的触发器
CREATE TRIGGER trigger_name BEFORE|AFTER trigger_EVENT
ON table_name FOR EACH ROW trigger_STMT;PS :
trigger_name :表示所要创建的触发器的名字
BEFORE|AFTER :指定触发器执行的时间(触发器事件之前
执行|触发器事件之后执行)
trigger_EVENT:表触发事件,即触发器执行条件包含
DELETE、INSERT、UPDATE语句。
teble_name :表示触发事件操作表的名字
FOR EACH ROW :表示任何一条记录上的操作满足触发时间
都会触发该触发器。
trigger_STMT:表示激活触发器后被执行的语句如:两行表:部门表(t_dept)、日记表(t_diary),创建触发器实
现向部门表(t_dept)插入记录时,就会在插入之前向日记表
(t_diary)中插入当前时间;如下:
1.查看:
DESCRIBE t_dept; DESCRIBE t_diary;
2.创建触发器(tri_diarytime):
CREATE TRIGGER tri_diarytime BEFORE
INSERT ON t_dept FOR EACH ROW
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
3.效验:
INSERT INTO t_dept VALUES(1,'cjgongdept','SHangXi');
SELECT * FROM t_diary;8.1.2 创建包含多条执行语句的触发器
CREATE TRIGGERtrigger_name BEFORE|AFTER trigger_EVENT
ON table_name FOR EACH ROW BEIN trigger_STMT END PS:为了解决“;”问题,用SELIMITER关键字,如:“DELIMITER$$”,
可以用来实现将结束符号设置为“$$”.
如:两行表:部门表(t_dept)、日记表(t_diary),创建触发器实现向
部门表(t_dept)插入记录时,
就会在插入之前向日记表(t_diary)中插入两条记录;如下:
1.查看:
DESCRIBE t_dept; DESCRIBE t_diary;
2.创建触发器(tri_diarytime):
DELIMITER $$
CREATE TRIGGER tri_diarytime2 AFTER INSERT ON
t_dept FOR EACH ROW
BEGIN
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
INSERT INTO t_diary VALUES(NULL,'t_dept',now());
END
$$
DELIMITER;
PS:上述语句中,首先用“DELIMITER $$”语句设置结束符号为“$$”,
后再关键字BEGIN和END之间编写执行语句列表,
最后通过“DELIMITER;”语句将结束符号还原为默认结束符号“;”
3.效验:
INSERT INTO t_dept VALUES(1,'cjgongdept','SHangXi');
SELECT * FROM t_diary;8.2 查看触发器
8.2.1 通过SHOW TRIGGERS 语句查看触发器
错误提示:“ERROR 1359(HY000) Trigger already exits”:触发器已存在。
“ERROR 1235(42000)”:具有相同触发程序动作时间和事件的给定表,
不能存在两个触发器。 SHOW TRIGGERS\G ;
[*] Trigger表示触发器的名称
[*] Event 表示胡发起的激活事件
[*] Table 表示触发器对象触发事件所操作的表
[*] Student表示触发器激活执行时所执行的语句
[*] Timming表示触发器所执行的时间
8.2.2 通过查看系统表triggers 实现查看触发器
DESC triggers;
USE information_schema;
SELECT * FROMtriggers\G ;
查询指定触发器的详细信息:
SELECT * FROMTRIGGERS WHERE TRIGGER_NAME
='tri_diarytime2' \G;8.3 删除触发器
8.3.1 通过DROP TRIGGER 语句删除触发器
DROPTRIGGER trigger_name;
SHOW TRIGGERS \G;九 数据的操作
9.1 插入数据记录
9.1.1 插入完备数据记录
INSERT INTO table_name(field1,field2,field3,...fieldn)
VALUES(value1,value2,value3...valuen);
table_name:表示所要插入完整记录的表名
fieldn:表示表中的字段名字
value:表示所要插入的数值
最后参数filedn与参数valuen一一对应;
如:
#查看部门表t_dept:
DESCRIBE t_dept;
#插入完整数据记录:
INSERT INTO t_dept(deptno,dname,loc)VALUES(1,'cjgong1','shanghai');
#校验部门表t_dept中数据记录是否插入成功:
SELECT * FROM t_dept;
插入完整数据记录还可以省略字段参数:
INSERT INTO table_name VALUES(value1,value2,value3,...valuen);
INSERT INTO t_dept VALUES(2,'cjgong2','shanghai2');
SELECT * FROM t_dept;9.1.2插入数据记录一部分
INSERT INTO table_name(field1,field2,field3,...fieldn)
VALUES(value1,value2,value3...valuen);
如:
INSERT INTO t_dept(dname,loc)VALUES('cjgong1','shanghai');
#校验部门表t_dept中数据记录是否插入成功:
SELECT * FROM t_dept;9.1.3插入多条数据记录
1.插入多条完备数据记录
INSERT INTO table_name(field1,field2,field3,...fieldn)
VALUES(value11,value21,value31...valuen1),
(value12,value21,value32...valuen2),
(value13,value23,value33...valuen3),
...
(value1m,value2m,value3m...valuenm),
或者
INSERT INTO table_name
VALUES(value11,value21,value31...valuen1),
(value12,value21,value32...valuen2),
(value13,value23,value33...valuen3),
...
(value1m,value2m,value3m...valuenm),
m:参数表示一次插入m条完整数据记录如:
一次插入五条完整数据记录:
DESCRIBE t_dept;
INSERT INTO t_dept
VALUES(1,'cjgongdept1','shanghai1'),
VALUES(2,'cjgongdept2','shanghai2'),
VALUES(3,'cjgongdept3','shanghai3'),
VALUES(4,'cjgongdept4','shanghai4'),
VALUES(5,'cjgongdept5','shanghai5');
SELECT * FROM t_dept;2.插入多条部分数据记录
INSERT INTO table_name(field1,field2,field3,...fieldn)
VALUES(value11,value21,value31...valuen1),
(value12,value21,value32...valuen2),
(value13,value23,value33...valuen3),
...
(value1m,value2m,value3m...valuenm),
如:
INSERT INTO t_dept(dname,loc)
VALUES('cjgongdept1','shanghai1'),
VALUES('cjgongdept2','shanghai2'),
VALUES('cjgongdept3','shanghai3'),
VALUES('cjgongdept4','shanghai4'),
VALUES('cjgongdept5','shanghai5');
SELECT * FROM t_dept;9.1.4 插入查询结果
INSERT INTO table_name1(field1,field2,
field3,...fieldn)
SELECT (field21,field22,field23,...)
FROM table_name2
WHERE...
table_name1:参数表示所要插入数值的表
table_name2:参数表示所要插入数值是哪个表查询出来
参数(field11,field12,field13...fieldn):表示
表table_name1中所要插入值的字段
参数(field21,field22,field23...field2n):表示
表table_name2中所查询值的字段
如:
向部门表t_dept插入表t_loader中关于字段dname和loc的查询结果:
#查询各个表的信息:
DESCRIBE t_dept;
DESC t_loader;
#查询t_loader中的数据记录:
SELECT * FROM t_loader;
#插入查询结果的数据记录:
INSERT INTO t_dept(dname,loc) SELECT dname,loc
FROM t_loader;
#校验部门表t_dept中数据记录是否插入成功
SELECT * FROM t_dept;9.2 更新数据记录
9.2.1 更新特定数据记录
UPDATE table_name SET field1=value1,field2=value2,
field3=value3,WHERE CONDITION;
table_name:参数表示所要更新数据记录的表名
field:表示表中所要更新数值的字段名字
value:表示更新后的数值
CONDITION:指定更新满足条件的特定数据记录
如:
在部门表t_dept中使名称(字段dname)为cjgongdept1部门的地址(字段loc)
由shanghai1更新为shanghai2:
DESCRIBE t_dept;
SELECT * FROM t_dept;
UPDATE t_dept SET loc='shanghai2' WHERE dname='cjgongdept1';
SELCT * FROM t_dept;9.2.2 更新所有数据记录
UPDATE table_name SET field1=value1,field2=value2,field3=value3,
WHERE CONDITION;
如:
在部门表t_dept中使所有数据记录中部门地址(字段loc)都更新为shanxi8:
DESCRIBE t_dept;
SELECT * FROMt_dept;
UPDATE t_dept SET loc='shangxi8'WHERE deptno<6;
SELECT * FROMt_dept;
注意:在执行UPDATE时,如果没有关键字WHERE的语句,将更新所有的数据记录:
如:UPDATE t_deptSET loc='shangxi9';
SELECT * FROM t_dept;十一 多表数据记录查询
11.1 关系数据操作
11.1.1 并(UNION)
DELETE FROM table_name WHERE CONDITION
table_name:参数表示所要删除数据记录的表名
CONDITION:指定更新满足条件的特定数据记录
如:在部门表(t_dept)中删除名字(字段dname)为cjgongdept1的部门:
DESCRIBE t_dept;
SELECT * FROM t_dept;
DELETE FROM t_dept WHERE dname='cjgongdept1';
SELECT * FROM t_dept;11.1.2 笛卡尔积(CARTESIAN PRODUCR)
DELETE FROM table_name WHERE CONDITION
如:在部门表(t_dept)中删除所有数据记录:
DESCRIBE t_dept;
SELECT * FROM t_dept;
DELETE FROM t_dept WHERE deptno<6;
SELECT * FROM t_dept;
注意:如果没有关键字WHERE的语句,将删除所有的数据记
DELETE FROM t_dept;
SELECT * FROM t_dept;11.1.3 内连接(INNER JOIN)
[*]内连接(INNER JOIN)
[*]外连接(OUTER JOIN)
[*]交错连接(CROSS JOIN)
SELECT field1 field2... fieldn FROM table_name;
fieldn 表示所要查询的字段名字
table_name 表示查询数据记录的表名
1.自然连接(INNER JOIN)
1.简单数据查询
2.避免重复数据查询
3.实现数学四则运算数据查询
4.设置显示格式数据查询2.等值连接
1. 查询数据字段数据
SELECT empno,job,MGR,Hiredate,sal,comm,deptno
FROM t_employee;
2."*"符号的使用
SELECT * FROM table_name;
SELECT * FROM t_employee;
3.查询指定字段数据
SELECT empno,ename,sal FROM t_employee;3.不等连接
SELECT DISTINCT field1 field2 ...fieldn FROM table_name;
SELECT DISTINCT job FROM t_employee;11.1.4 外连接(OUTER JOIN)
- + 加法
- - 减法
- * 乘法
- /(DIV) 除法
- %(MOD) 求余1.左外连接(LEFT OUTER JOIN)
如:SELECT ename ,sal*12 FROM t_employee;
语法:SELECT field1 otherfield1,field2 otherfield2,
... fieldn otherfieldn FROM table_name;
SELECT ename ,sal*12 AS yearsalary FROM t_employee;
或者
SELECT ename ,sal*12 yearsalary FROM t_employee;2.右外连接(RIGHT OUTER JOIN)
SELECT CONCAT(ename,'雇员的年薪为: ',sal*12)yearsalary
FROM t_employee;3.全外连接(FULL OUTER JOIN)
SELECT field1 field2 ... fieldn FROM table_name
WHERE CONDITION
上述语句中通过参数CONDITION对数据进行条件查询:
带关系运算符和逻辑运算符的条件数据查询
带 BETWEEN AND 关键字的条件数据查询
带 IS NULL 关键字的条件数据查询
带 IN 关键字的条件数据查询
带 LIKE 关键字的条件数据查询11.2 内连接查询
比较运算符:
- 运算符 描述
- > 大于
- < 小于
- = 等于
- !=(<>) 不等于
- >= 大于等于
- <= 小于等于
逻辑运算符
- AND(&&) 逻辑与
- OR(||) 逻辑或
- XOR 逻辑异或
- NOT(!) 逻辑非11.2.1自连接
SELECT ename FROM t_employee WHERE job='CLERK';
或者
select ENAME from T_EMPLOYEE where JOB='clerk';11.2.2 等值连接
SELECT ename FROM t_employee WHERE job='CLERK'
&& sal=800;
或者
SELECT ename FROM t_employee WHERE job='CLERK'
AND sal=800;11.2.2.1 多张表等值连接(三张表)
SELECT field1 field2 ...fieldn FROM table_name
WHERE field BETWEEN VALUE1 AND VALUE2;11.2.3 不等连接
SELECT ename FROM t_employee WHERE sal
BETWEEN 1000 AND 2000;11.3 外连接查询
SELECT ename FROM e_employee WHERE sal
NOT BETWEEN 1000 AND 2000;外连接分为三类:
SELECT field1 field2 ...fieldn FROM table_name
WHERE fieldIS NULL;11.3.1 左外连接
SELECT ename FROM t_employee WHERE sal IS NULL;11.3.2 右外连接
SELECT ename FROM t_employee WHERE comm IS NOT NULL;11.4 合并查询数据记录
SELECT field1 field2 ...fieldn FROM table_name
WHERE field IN(value1,value2,value3...,valuen);
PS:value 表示集合中的值,关键字IN来判断字段field 的值是否在集合
(value1,value2,value3...,valuen)中如果field的值在集合中,
则满足查询条件,即被查询出来,否则不会被查询出来。1.带有关键字UNION的合并操作
SELECT ename FROM t_employee WHERE empno=7521
or empno=7782 or empno=7566 or empno=7788;
或者
SELECT ename FROM t_employee WHERE empno
IN(7521,7782,7566,7788);2.带关键字UNION ALL 的合并操作
1.查询的集合中如果存在NULL,则不会影响查询,如果使用关键字
NOT IN 查询集合中存在NULL,则不会有任何的查询结果。
如1:SELECT ename FROM t_employee IN (7521,7782,7566,7788,NULL);
如2: SELECT ename from t_employee NOT IN
(7521,7782,7566,7788,NULL);11.5 子查询
PS:所谓通配符,主要是用来实现匹配部分值得特殊字符。
SELECT field1,field2...fieldn FROM table_name WHERE
field LIKE value;
PS value:表示所匹配的字符串值,通过LIKE来判断字段field的值是否与
value字符串相匹配,
如果字段field的值与value值相匹配,则满足查询条件,
记录就会别查出来,否则不会被查出来。11.5.1 返回结果为单行单列和单行多列子查询
1.返回结果为单行单列子查询
“_”通配符,该通配符值能匹配单个字符。
“%”通配符,该通配符值可以匹配任意长度的字符串,既可以是0个字符,
1个字符,也可是多个字符。2.单行多列子查询
SELECT ename FROM t_employee WHERE ename LIKE 'A%';
或者
SELECT ename FROM t_employee WHERE ename LIKE 'a%';
查询不是以字母A开头的全部雇员可以执行逻辑运算符(NOT或!):
SELECT ename FROM t_employee WHERE NOT ename LIKE 'A%';11.5.2 返回结果为多行单列子查询
1.带有关键字IN的子查询
查询字段ename中第二个字母为A的数据记录:
SELECT ename FROM t_employee WHERE ename LIKE '_A%';
查询名字第二个不是以字母A开头的全部雇员可以执行逻辑运算符(NOT或!):
SELECT ename FROM t_employee WHERE NOT ename LIKE '_A%';2.带有关键字ANY的子查询
SELECT field1,field2...fieldn FROM table_name WHERE
field【NOT】LIKE value;
如:查询字段ename没有字母A的数据记录:
SELECT ename FROM t_employee WHERE ename NOT LIKE '%A%';
如:查询工资中带有5的全部雇员:
SELECT ename FROM t_employee WHERE sal LIKE '%5%';3.带有关键字ALL的子查询
SELECT field1,field2...fieldn FROM table_name WHERE
CONDITION ORDER BY fileldm1 [,fileldm2 ]
PS: fileldm 表示按照该字段进行排序
ASC 表示升序排序,DESC 表示降序排序
ORDER BY:设置多个不同字段进行排序4.带有关键字EXISTS的子查询
1.按照单字段排序
2.按照多字段排序11.5.3 返回结果为多行多列子查询
SELECT * FROM t_employee ORDER BY sal ASC;
或者
SELECT * FROM t_employee ORDER BY sal;
PS:mysql中ORDER BY 默认的排序顺序为升序。十二 使用MySQL运算符
12.1 使用算术运算符
SELECT *FROM t_employee ORDER BY mgr DESC;
PS:如果字段的值为空值(NULL),则该值为最小值,
因此在降序中最后一行显示,升序中第一行显示12.2 使用比较运算符
SELECT field1,field2...fieldn FROM table_name WHERE
CONDITION LIMIT OFFSET_START,ROW_COUNT;
PS:LIMIT:限制数据查询结果数量
OFFSET_START:表示数据记录的起始偏移量
ROW_COUNT:表示显示的行数17.5.4 停止慢查询日志
1.不指定初始位置方式
2.制定初始位置方式17.5.5 删除慢查询日志
关键字LIMIT,如果不指定初始位置,默认值为0,
表示从一条疾苦开始显示。
语法:LIMIT row_cunt;
row-count:表示显示roe_count 条数据查询结果数量。
如:row_count值小于查询结果的总数量,
将会从第一条数据记录开始,显示row_count条数据记录,
如果row_count值大于查询结果的总数量,将会显示所有查询结果。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]