阿里云社区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.4 设置主键约束:
- 4.5 设置字段值自动增加(AUTO_INCREMENT)
- 4.6 设置外键约束(FOREING KEY ,FK)
- 六: 索引的操作:
- 6.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.3 SQL语句ALTER TABLE 创建多列索引
- 6.2 删除索引
- 七 视图的操作
- 7.1 创建视图的语法形式:
- 7.2 查看视图
- 7.3 删除视图的语法形式
- 7.4 修改视图
- 7.5 利用视图操作基本表
- 八 触发器
- 8.1 创建触发器
- 8.2 查看触发器
- 8.3 删除触发器
- 九 数据的操作
- 9.1 插入数据记录
- 9.2 更新数据记录
- 9.3 删除数据记录
- 十 单表数据记录查询
- 10.1 简单数据记录查询
- 10.2 条件数据记录查询
- 10.3 排序数据记录查询
- 10.4 限制数据记录查询数量
- 10.5 统计函数和分组数据记录查询
- 十一 多表数据记录查询
- 11.1 关系数据操作
- 11.2 内连接查询
- 11.3 外连接查询
- 11.4 合并查询数据记录
- 11.5 子查询
- 十二 使用MySQL运算符
- 12.1 使用算术运算符
- 12.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.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 使用系统信息函数
- 十四 存储过程和函数的操作
- 14.1 为什么使用存储过程和函数
- 14.2 创建存储过程和函数
- 14.3 关于存储过程和函数的表达式
- 14.4 修改存储过程和函数(ALTER PROCEDURE和ALTER FUNCTION)
- 14.5 删除存储过程和函数
- 十五 MySQL事务
- 15.1事务概述
- 15.2 MySQL事务控制语言
- 15.3 MySQL事务隔离级别
- 15.4 InnoDB锁机制
- 十六 MySQL安全性机制
- 16.1 MySQL软件所提供的权限
- 16.2 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.3 操作错误日志
- 17.4 通用查询日志
- 通过设置环境变量general_log进行通用查询日志的动态控制,on表示开启
一:数据库
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 查看表结构:
```
describe table_name;
如:desc |describe jay;
```
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 table table_name ADD 属性名 数据类型;
```
3.2.1 在表的第一个位置增加字段:
```
alter table table_name ADD 属性名 数据类型 FIRST;
```
3.2.2在表的指定字段之后增加字段
```
alter table table_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 TABLE t_dept (
属性名1 数据类型,
属性名2 数据类型
... ...
CONSTRAINT uk_属性名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 外键约束名 FOREING KEY(属性名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:
EXPLAIN SELECT * 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_name ADD 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 TABLE table_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.3 SQL语句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,name FROM t_product;
```
查询视图操作:
```
SELECT * FROM view_selectproduct;
```
创建各种视图
```
如:现有两张分别表示学生和组的表t_student和t_group
```
1.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 VIEW view_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 TRIGGER trigger_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 * FROM triggers \G ;
查询指定触发器的详细信息:
SELECT * FROM TRIGGERS WHERE TRIGGER_NAME
='tri_diarytime2' \G;
```
8.3 删除触发器
8.3.1 通过DROP TRIGGER 语句删除触发器
```
DROP TRIGGER 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 * FROM t_dept;
UPDATE t_dept SET loc='shangxi8'WHERE deptno<6;
SELECT * FROM t_dept;
注意:在执行UPDATE时,如果没有关键字WHERE的语句,将更新所有的数据记录:
如:UPDATE t_dept SET loc='shangxi9';
SELECT * FROM t_dept;
```
9.3 删除数据记录
9.3.1 删除特定数据记录
```
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;
```
9.3.2 删除所有数据记录
```
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;
```
十 单表数据记录查询
10.1 简单数据记录查询
```
SELECT field1 field2 ... fieldn FROM table_name;
fieldn 表示所要查询的字段名字
table_name 表示查询数据记录的表名
```
单表数据查询遵循原则:
```
1.简单数据查询
2.避免重复数据查询
3.实现数学四则运算数据查询
4.设置显示格式数据查询
```
10.1.1 简单数据查询
```
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;
```
10.1.2 避免重复数据查询---DISTINCT
```
SELECT DISTINCT field1 field2 ...fieldn FROM table_name;
SELECT DISTINCT job FROM t_employee;
```
10.1.3 实现数学四则运算数据查询
```
- + 加法
- - 减法
- * 乘法
- /(DIV) 除法
- %(MOD) 求余
```
```
如:SELECT ename ,sal*12 FROM t_employee;
语法:SELECT field1 [AS] otherfield1,field2 [AS] otherfield2,
... fieldn [AS] otherfieldn FROM table_name;
SELECT ename ,sal*12 AS yearsalary FROM t_employee;
或者
SELECT ename ,sal*12 yearsalary FROM t_employee;
```
10.1.4 设置显示格式数据查询
```
SELECT CONCAT(ename,'雇员的年薪为: ',sal*12)yearsalary
FROM t_employee;
```
10.2 条件数据记录查询
```
SELECT field1 field2 ... fieldn FROM table_name
WHERE CONDITION
上述语句中通过参数CONDITION对数据进行条件查询:
带关系运算符和逻辑运算符的条件数据查询
带 BETWEEN AND 关键字的条件数据查询
带 IS NULL 关键字的条件数据查询
带 IN 关键字的条件数据查询
带 LIKE 关键字的条件数据查询
```
10.2.1 带关系运算符和逻辑运算符的条件数据查询
```
比较运算符:
- 运算符 描述
- > 大于
- < 小于
- = 等于
- !=(<>) 不等于
- >= 大于等于
- <= 小于等于
逻辑运算符
- AND(&&) 逻辑与
- OR(||) 逻辑或
- XOR 逻辑异或
- NOT(!) 逻辑非
```
1.单条件数据查询
```
SELECT ename FROM t_employee WHERE job='CLERK';
或者
select ENAME from T_EMPLOYEE where JOB='clerk';
```
2.多条件数据查询
```
SELECT ename FROM t_employee WHERE job='CLERK'
&& sal=800;
或者
SELECT ename FROM t_employee WHERE job='CLERK'
AND sal=800;
```
10.2.2 带BETWEEN AND 关键字的范围查询
```
SELECT field1 field2 ...fieldn FROM table_name
WHERE field BETWEEN VALUE1 AND VALUE2;
```
1.符合范围的数据记录查询
```
SELECT ename FROM t_employee WHERE sal
BETWEEN 1000 AND 2000;
```
2.不符合范围的数据记录查询
```
SELECT ename FROM e_employee WHERE sal
NOT BETWEEN 1000 AND 2000;
```
10.2.3 带IS NULL 关键字的空值查询
```
SELECT field1 field2 ...fieldn FROM table_name
WHERE field IS NULL;
```
1 空值数据记录查询
```
SELECT ename FROM t_employee WHERE sal IS NULL;
```
2.不是空值数据记录查询
```
SELECT ename FROM t_employee WHERE comm IS NOT NULL;
```
10.2.4 带IN 关键字的集合查询
```
SELECT field1 field2 ...fieldn FROM table_name
WHERE field IN(value1,value2,value3...,valuen);
PS:value 表示集合中的值,关键字IN来判断字段field 的值是否在集合
(value1,value2,value3...,valuen)中如果field的值在集合中,
则满足查询条件,即被查询出来,否则不会被查询出来。
```
1 在集合中数据记录查询
```
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);
```
3.关于集合查询注意点
```
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);
```
10.2.5 带LIKE关键字的模糊查询
```
PS:所谓通配符,主要是用来实现匹配部分值得特殊字符。
SELECT field1,field2...fieldn FROM table_name WHERE
field LIKE value;
PS value:表示所匹配的字符串值,通过LIKE来判断字段field的值是否与
value字符串相匹配,
如果字段field的值与value值相匹配,则满足查询条件,
记录就会别查出来,否则不会被查出来。
```
通配符
```
“_”通配符,该通配符值能匹配单个字符。
“%”通配符,该通配符值可以匹配任意长度的字符串,既可以是0个字符,
1个字符,也可是多个字符。
```
1.带"%"通配符的查询
```
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%';
```
2.带"_"通配符的查询
```
查询字段ename中第二个字母为A的数据记录:
SELECT ename FROM t_employee WHERE ename LIKE '_A%';
查询名字第二个不是以字母A开头的全部雇员可以执行逻辑运算符(NOT或!):
SELECT ename FROM t_employee WHERE NOT ename LIKE '_A%';
```
3.带LIKE关键字的模糊查询的注意点
```
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%';
```
10.3 排序数据记录查询
```
SELECT field1,field2...fieldn FROM table_name WHERE
CONDITION ORDER BY fileldm1 [ASC|DESC] [,fileldm2 [ASC|DESC]]
PS: fileldm 表示按照该字段进行排序
ASC 表示升序排序,DESC 表示降序排序
ORDER BY:设置多个不同字段进行排序
```
排序数据记录查询方法
```
1.按照单字段排序
2.按照多字段排序
```
10.3.1 按照单字段排序
1.升序排序
```
SELECT * FROM t_employee ORDER BY sal ASC;
或者
SELECT * FROM t_employee ORDER BY sal;
PS:mysql中ORDER BY 默认的排序顺序为升序。
```
2.降序排序
```
SELECT *FROM t_employee ORDER BY mgr DESC;
PS:如果字段的值为空值(NULL),则该值为最小值,
因此在降序中最后一行显示,升序中第一行显示
```
10.4 限制数据记录查询数量
```
SELECT field1,field2...fieldn FROM table_name WHERE
CONDITION LIMIT OFFSET_START,ROW_COUNT;
PS:LIMIT:限制数据查询结果数量
OFFSET_START:表示数据记录的起始偏移量
ROW_COUNT:表示显示的行数
```
初始位置的方式
```
1.不指定初始位置方式
2.制定初始位置方式
```
10.4.1 不指定初始位置
```
关键字LIMIT,如果不指定初始位置,默认值为0,
表示从一条疾苦开始显示。
语法:LIMIT row_cunt;
row-count:表示显示roe_count 条数据
相关文章
暂无评论...