马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
阿里云社区https://developer.aliyun.com/mirror
目次
一:数据库
1.1
- information_schema:主要存储系统中的数据库对象信息,
- 用户表信息、列信息、权限信息、字符信息、分区信息。
- performance_schema :主要存储数据库服务器性能参数。
- mysql:存储系统的用户权限信息
- test:自动创建的测试数据库。
复制代码 二: MySQL数据库根本操作
2.1 创建数据库:
- create database '名字';
- 如:create database jay;
复制代码 2.2 使用某个数据库:
2.3 删除数据库:
- drop database '名字';
- 如:drop database jay;
复制代码 2.4 查询支持的存储引擎
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
复制代码 选择数据库:
创建视图:
- 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)”:具有相同触发程序动作时间和事件的给定表,
- 不能存在两个触发器。
复制代码 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;
复制代码 十一 多表数据记录查询
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 [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;
复制代码 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 field IS 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 [ASC|DESC] [,fileldm2 [ASC|DESC]]
- PS: fileldm 表示按照该字段进行排序
- ASC 表示升序排序,DESC 表示降序排序
- ORDER BY:设置多个不同字段进行排序
复制代码 4.带有关键字EXISTS的子查询
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 停止慢查询日志
17.5.5 删除慢查询日志
- 关键字LIMIT,如果不指定初始位置,默认值为0,
- 表示从一条疾苦开始显示。
- 语法:LIMIT row_cunt;
- row-count:表示显示roe_count 条数据查询结果数量。
- 如:row_count值小于查询结果的总数量,
- 将会从第一条数据记录开始,显示row_count条数据记录,
- 如果row_count值大于查询结果的总数量,将会显示所有查询结果。
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |