阿里云社区https://developer.aliyun.com/mirror

目录

一:数据库

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 条数据
版权声明:程序员胖胖胖虎阿 发表于 2025年1月14日 上午8:49。
转载请注明:MySQL | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...