MySQL

打印 上一主题 下一主题

主题 1058|帖子 1058|积分 3174

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

目次

一:数据库

1.1
  1. information_schema:主要存储系统中的数据库对象信息,
  2. 用户表信息、列信息、权限信息、字符信息、分区信息。
  3. performance_schema :主要存储数据库服务器性能参数。
  4. mysql:存储系统的用户权限信息
  5. test:自动创建的测试数据库。
复制代码
二: MySQL数据库根本操作

2.1 创建数据库:
  1. create database '名字';
  2. 如:create database jay;
复制代码
2.2 使用某个数据库:
  1. use jay;
复制代码
2.3 删除数据库:
  1. drop database '名字';
  2. 如:drop database jay;
复制代码
2.4 查询支持的存储引擎
  1. SHOW ENGINES;
复制代码
2.5 创建表:
  1.     create table table_name (               
  2.         属性名   数据类型,
  3.         属性名   数据类型,
  4.          ...
  5.         属性名   数据类型,
  6.    ); --'table_name':所要创建的表的名字。
复制代码
2.6 查看表结构:
  1. describe  table_name;
  2. 如:desc |describe  jay;
复制代码
2.7 查看表结构详细信息:
  1. show create table table_name;
  2. 如:show create table jay \G;
复制代码
2.8 删除表:
  1. drop table table_name;
  2. 如:drop table jay;
复制代码
三:表的操作

3.1 修改表名字:
  1. alter table old_table_name RENAME  【to】new_table_name;
复制代码
3.2 增加字段:
  1. alter table  table_name ADD 属性名 数据类型;
复制代码
3.2.1 在表的第一个位置增加字段:
  1. alter table table_name ADD 属性名 数据类型 FIRST;
复制代码
3.2.2在表的指定字段之后增加字段
  1. alter table  table_name ADD 属性名 数据类型 FIRST 属性名;
复制代码
3.3 删除字段:
  1. alter table table_name DROP 属性名;
复制代码
3.4 修改字段:
  1. alter table table_name MODIFY 属性名 数据类型;
复制代码
3.5 修改字段的名字:
  1. alter tabel table_name CHANGE 旧属性名 新属性名 旧数据类型;
复制代码
3.6 同时修改字段的名字和属性:
  1. alter table table_name CHANGE 旧属性名 新属性名 新数据类型;
复制代码
3.7 修改字段的顺序:
  1. alter table table_name MODIFY 属性名1 数据类型
  2. FIRST|AFTER 属性名2
  3. PS:属性名1 、属性名2 必须是表中已存在的字段名。
复制代码
四:操作表的约束:

4.1 设置非空约束:(NOT NULL ,NK)
  1. CREATE TABLE table_name (
  2.    属性名 数据类型   NOT NULL ,
  3.    ...   ...
  4.     );
  5. PS:NOT NULL 保证所有记录中该字段都有值,用户插入记录时,
  6.    如果为空,则会报错;
复制代码
4.2 设置字段的默认值:(DEFAULT)
  1. CREATE TABLE table_name (
  2.     属性名 数据类型   DEFAULT   默认值,
  3.    ...  ...
  4.   );
  5. PS : 用户插入一条新纪录时,没有为某个字段赋值,
  6.      数据库会自动为此地段插入默认值;
复制代码
4.3 设置唯一约束(UNIQUE ,UK)
  1. CREATE TABLE table_name (
  2.    属性名   数据类型    UNIQUE L,
  3.     ...   ...
  4.   );
  5. PS:数据库表中的某个字段的内容不允许重复时,使用UK进行约束。
复制代码
4.3.1 给某字段上的UK约束设置一个名字:
  1. CREATE TABLE  t_dept (
  2.        属性名1  数据类型,
  3.        属性名2   数据类型
  4.       ...   ...
  5. CONSTRAINT  uk_属性名1   UNIQUE(属性名1)
  6.     );
复制代码
4.4  设置主键约束:

4.4.1 单字段主键:
  1. CREATE TABLE t_dept(
  2. 属性名  数据类型  PRIMARY KEY
  3.     ...   ...
  4.   );
复制代码
4.4.1.1 给字段上的PK约束设置一个名字:
  1.   CREATEB TABLE t_dept(
  2.      属性名1  数据类型,
  3.   CONSTRAINT pk_属性名1 PRIMARY KEY(属性名1)
  4.     );
复制代码
4.4.2 多字段主键:
  1. CREATE TABLE t_dept(
  2. 属性名  数据类型,
  3. ...   ...
  4. CONSTRAINT 约束名 PRIMARY KEY(属性名1,属性名2,...)
  5. );          --约束名指的是:pk_dname_deptno
复制代码
4.5  设置字段值主动增加(AUTO_INCREMENT)
  1. CREATE TABLE t_dept(
  2. 属性名  数据类型  AUTO_INCREMENT,
  3. ...   ...
  4. );
复制代码
4.6  设置外键约束(FOREING KEY ,FK)
  1. CREATE TABLE t_dept(
  2. 属性名 数据类型,
  3. 属性名 数据类型
  4. ...  ...
  5. CONSTRAINT  外键约束名 FOREING  KEY(属性名1)
  6.        REFERENCES 表名(属性名2)
  7.    );   --PS:外键约束名:用来标识约束名,
  8.         --属性名1:参数是子表设置外键的字段名,
  9.         --属性名2:参数是父表中设置主键约束的字段名。
复制代码
六: 索引的操作:
  1. 索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,
  2. 这些键存储在数据结构(B-树或哈希表)
  3. 索引分为:B型树索引(BTREE)哈希索引(HASH)
  4. InnoDB和MyISAM存储引擎支持BTREE类型索引
  5. MEMORY 存储引擎支持HASH类型索引
  6. MySQL 默认为前者索引;
  7. MySQL 支持6种索引:普通索引、唯一索引、全文索引、
  8. 单列索引、多列索引、空间索引
  9. 索引优点:提高查找速度,保证字段的唯一性。
  10. 缺点:过多的创建索引会占据许多磁盘空间
复制代码
6.1 创建和查看索引:

6.1.1 创建表时创建平凡索引:
  1. CREATE TABLE t_dept(
  2. 属性名  数据类型,
  3. 属性名  数据类型,
  4. ...   ...
  5. 属性名  数据类型,
  6. INDEX|KEY【索引名】(属性名1 【(长度)】【ASC|DESC】)
  7. );
  8. PS:INDEX|KEY 参数:指定字段为索引,
  9. '索引名'参数:指定所创建索引名,
  10. '属性名1':指定索引所关联的字段的名称,
  11. '长度': 指定索引的长度,
  12. ASC|DESC :用来指定为 升序|降序。
  13. **
  14. CREATE TABLE t_dept(
  15.   deptno INT,
  16.   dname VARCHAR(20),
  17.   loc   VARCHAR(40),
  18. INDEX index_deptno(deptno)
  19.   );
  20. PS: MySQL 支持的储存引擎每个至少支持16个索引,
  21.     总索引长度至少256字节。
复制代码
6.1.1.2:效验索引:
  1.   校验索引是否创建成功,EXPLAIN:
  2.   EXPLAIN  SELECT * FROM t_dept WHERE deptno =1 \G;
复制代码
6.1.1.2 在已存在的表上创建平凡索引:
  1.   CREATE INDEX 索引名  ON 表名(属性名【(长度)】【ASC|DESC】)
  2. PS: CREATE INDEX 创建索引,‘索引名’:创建的索引名
  3.     ON:所要创建索引的表名称
复制代码
6.1.1.3 通过SQL语句ALTER TABLE 创建平凡索引:
  1. ALTER TABLE tanle_name  ADD INDEX|LEY
  2. 索引名(属性名 【(长度)】【ASC|DESC】)
  3. PS: INDEX|LEY:创建普通索引
  4.     '索引名'所创建索引名
  5.     '属性名'指定索引关联的字段的名称
  6.     '长度'指索引的长度
  7.      ASC|DESC :用来指定为 升序|降序
复制代码
6.1.2 创建和查看唯一索引:

6.1.2.1 创建表时创建唯一索引:
  1. CREATE TABLE table_name(
  2.     属性名  数据类型,
  3.     属性名  数据类型,
  4.     ...      ...
  5.     属性名   数据类型,
  6.     UNIQUE INDEX|KEY 【索引名】(属性名1
  7.     【(长度)】【DESC|ASC】);
  8.    PS:UNIQUE INDEX 或 UNIQUE KEY 表时创建唯一索引。
复制代码
6.1.2.2  在已经存在的表上创建唯一索引:
  1.    CREATE UNIQUE INDEX 索引名 ON 表名(属性名
  2.   【(长度)】【ASC|DESC】)
复制代码
6.1.2.3  用SQL 语句ALTER TABLE 创建唯一索引:
  1.    ALTER TABLE table_name ADD UNIQUE INDEX |KEY
  2.    索引名(属性名【(长度)】【ASC|DESC】)
复制代码
6.1.3 创建和查看全文索引:

6.1.3.1:创建表时创建全文索引:
  1. CREATE TABLE table_name(
  2. 属性名 数据类型,
  3. 属性名 数据类型,
  4. ...     ...
  5. 属性名   数据类型,
  6. FULLTEXT INDEX|KEY 【索引名】(属性名1 【(长度)】【ASC|DESC】)
  7. ENGINE =MyISAM|InnoDB
  8. ); -- FULLTEXT INDEX或FULLTEXT KEY 表示创建全文索引
复制代码
6.1.3.2 在已经存在的表上创建全文索引
  1. CREATE FULLTEXT INDEX 索引名
  2. ON 表名(属性名【(长度)】【ASC|DESC】);
  3. CREATE FULLTEXT INDEX 关键字表创建全文索引
复制代码
6.1.3.3 通过SQL语句ALTER TABLE 创建全文索引
  1. ALTER TABLE  table_name ADD FULLTEXT INDEX|KEY
  2. 索引名(属性名【(长度)】【ASC|DESC】);
复制代码
6.1.4  创建和查看多列索引

6.1.4.1 创建表时创建多列索引
  1.   CREATE TABLE table_name(
  2.   属性名  数据类型,
  3.   属性名  数据类型,
  4.   ...     ...
  5.   属性名  数据类型,
  6.   INDEX|KEY 【索引名】(属性名1 【(长度)】【ASC|DESC】,
  7.                      ...  ...
  8.                      属性名n 【(长度)】【ASC|DESC】)
  9.   );  --创建索引时,所关联的字段至少大于一个字段
复制代码
6.1.4.2在已存在的表中创建多列索引
  1.   CREATE INDEX 索引名
  2.        ON 表名  (属性名 【(长度)】【ASC|DESC】,
  3.                   ...    ...
  4.                  属性名n 【(长度)】【ASC|DESC】
  5.        );
  6. 如: CRETAE INDEX index_loc
  7.       ON t_dept (dname,loc)
  8.       --index_loc:索引名
  9.       --t_dept :表名
  10.       --dname、loc :属性名
  11.      SHOW CREATE TABLE table_name   \G;
复制代码
6.1.4.3  SQL语句ALTER TABLE 创建多列索引
  1. ALTER TABLE table_name
  2. ADD INDEX|KEY 索引名 (属性名 【(长度)】【ASC|DESC】,
  3.                      ...     ...
  4.                      属性名n  【(长度)】【ASC|DESC】
  5.                     );
  6. 如:ALTER TABLE t_dept
  7.     ADD INDEX index_dname_loc(dname,loc);
  8.      SHOW CREATE TABLE t_dept   \G;
复制代码
6.2  删除索引

6.2.1 删除索引的语句形式
  1. DROP INDEX index_name ON table_name;
  2. -- index_name:索引名字
  3. --table_name : 表对象
复制代码
效验索引是否被使用:
  1. EXPLAIN SELECT * FROM t_dept WHERE dname='cjgong' \G;
复制代码
删除索引:
  1. DROP INDEX index_dname_loc ON t_dept;
复制代码
效验是否还存在索引:

SHOW CREATE TABLE t_dept  \G;
七 视图的操作
  1. 特点:
  2. 1.视图的列可来自不同的表,是表的抽象和在逻辑意义上建立的新关系
  3. 2.视图是由基本表(实表)产生的表(虚表)
  4. 3.视图的建立和删除不影响基本表
  5. 4.对视图内容的更新(添加、删除和修改)直接影响基本表
  6. 5.当视图来自多个基本表时,不允许添加和删除数据
复制代码
7.1 创建视图的语法形式:
  1. CREATE VIEW view_name AS 查询语句;
  2. --视图不能重名
  3. --视图的功能实际上是封装了复杂的查询语句
  4. 如:数据库view   水果产物表 t_product
  5.    创建隐藏价格字段price的视图selectproduct
复制代码
选择数据库:
  1.      USE view;
复制代码
创建视图:
  1.     CREATE VIEW view_selectproduct
  2.       AS  
  3.       SELECT id,name  FROM t_product;
复制代码
查询视图操作:
  1.     SELECT * FROM view_selectproduct;
复制代码
创建各种视图
  1. 如:现有两张分别表示学生和组的表t_student和t_group
复制代码
1.1 封装实现查询常量语句的视图,即所谓的常量视图
  1. CREATE VIEW view_test1 AS SELECT 3.1415926;
复制代码
1.2 封装使用聚合函数(SUM、MIN、MAX、COUNT等)查询语句的视图
  1. CREATE VIEW view_test2 AS SELECT COUNT(name)
  2. FROM t_student;
复制代码
1.3 封装了实现排序功能(ORDRE BY)查询语句的视图
  1. CREATE VIEW view_test3 AS SELECT name FROM t_student
  2. ORDER BY id DESC;
复制代码
1.4 封装了实现表内连接查询语句的视图
  1. CREATE VIEW view_test4 AS SELECT s.name
  2. FROM t_student as s,t_group as g WHERE s.group_id=g.id
  3. AND g.id=2;
复制代码
1.5封装了实现表外连接(LEFT JOIN 和 RIGHT JOIN)查询语句的视图
  1. CREATE VIEW view_test5 AS SELECT s.name FROM
  2. t_student as s LEFT JOIN t_group as g ON s.group_id=g.id
  3. WHEREg.id=2;
复制代码
1.6 封装了实现子查询相关查询语句的视图
  1. CREATE VIEW view_test6 AS SELECT s.name
  2. FROM t_student as s WHERE s.group_id IN (SELECT id
  3. FROM t_group);
复制代码
1.7封装了实现记录联合(UNION和UNION ALL)查询语句的视图
  1. CREATE VIEW view_test7 AS SELECT id,name
  2. FROM t_student UNION ALL SELECT id,name FROM t_group;
复制代码
7.2 查看视图

7.2.1 SHOW TABLES 语句查看视图名
  1. 如: USE view;
  2.      SHOW TABLES;
复制代码
7.2.2 SHOW TABLE STATUS 语句查询视图详细信息
  1. 语法: SHOW TABLE STATUS 【FROM db_name】【LIKE 'pattern'】
  2. 如:查询view数据库的视图和表的详细信息
  3.      SHOW TABLE STATUS FROM view \G
  4.      返回信息解释如下:
  5.   -  字段名                   含义
  6.   -  Name              表和视图的名
  7.   -  Engine            标的存储引擎(在MySQL4.1.2之前,用type 表示)
  8.   -  Version           表的.frm 文件的版本号
  9.   -  Row_format        表的行存储格式
  10.   -  Rows              表中行的数目
  11.   -  Avg_row_length    表中行平均行长度
  12.   -  Data_length       表数据文件的长度
  13.   -  Max_data_length   表数据文件的最大长度
  14.   -  Index_length      表索引文件的长度
  15.   -  Data_free         表被整序后,但是未使用的字节的数目
  16.   -  Auto_increment    表中下一个AUTO_INCREMENT值
  17.   -  Create_time       表的创建时间
  18.   -  Update_time       表的最后一次更新时间
  19.   -  Check_time        表的最后一次检查的时间
  20.   -  Collation         表的字符集
  21.   -  Checksum          表的活性校验
  22.   -  Create_options    表的额外选项
  23.   -  Comment           表的注解
复制代码
SHOW TABLE 可以查看名为select_product视图的详细信息
  1.   SHOW TABLE STATUS FROM view LIKE
  2.   'view_select_product' \G;
复制代码
7.2.3 SHOW CREATE VIEW 语句查询视图界说信息
  1. SHOW CREATE VIEW viewname;
复制代码
viewname:参数表现为所要查看界说信息的视图名称

7.2.4 DESCRIBE | DESC 语句查看视图计划信息
  1. DESCRIBE | DESC viewname;
复制代码
7.2.5通过系统表查看视图信息

系统表information_schema.views
  1.    USE information_schema;
  2.    SELECT * FROM views WHERE
  3.    table_name='view_select_product'\G;
复制代码
7.3 删除视图的语法形式
  1. DROP VIEW view_name 【,view_name】...
  2. 如:删除一个视图表:
  3.     DROP VIEW view_selectproduct
  4.   删除多个视图表:
  5.    DROP VIEW view_dselectproduct1,
  6.    view_selectproduct2,...;
复制代码
7.4 修改视图

7.4.1 CREATE OR REPLACE VIEW 语句修改视图

7.4.1.1 已存在视图,但是有新的需求,可以先删除原视图,在建立视图:
  1.   DROP VIEW view_selectproduct;
  2.   CREATE VIEW view_selectproduct AS SELECT name FROM t_product;
复制代码
7.4.1.2 但先删除视图,在建立视图比较麻烦。可用如下语句进行实现更换视图:
  1.   CREATE OR REPLACE view view_name AS 查询语句;
  2.   CREATE OR REPLACE view view_selectproduct
  3.   AS SELECT name FROM t_product;
复制代码
7.4.2 ALTER 语句修改视图
  1.   ALTER VIEW view_name AS 查询语句;
  2.   ALTER VIEW  view_selectproduct AS SELECT name FROM t_product;
复制代码
7.5 利用视图操作根本表

7.5.1 检索(查询)数据:
  1. SELECT * FROM view_selectproduct;
复制代码
7.5.2 利用视图操作根本表数据

7.5.2.1 添加数据操作
  1.     INSERT INTO view_product (id,name,price,order_id)
  2.     VALUES(11,'PEAR4',12.3,2);
  3.    或者INSERT INTO view_product VALUES(11,'PEAR4',12.3,2);
复制代码
7.5.2.2 删除数据操作
  1.   DELETE FROM view_product WHERE name='apple1';
复制代码
7.5.2.3 更新数据操作
  1.   UPDATE view_product SET price=3.5 WHERE name='pear1';
复制代码
八 触发器
  1.   触发器与编程语言的函数非常类似,都需要声明、执行,
  2.   且触发器的执行是由事件来触发。
  3.   使用触发器可以加强数据库表中数据的完整性约束和业务规则等。
复制代码
8.1 创建触发器

8.1.1 创建一条执行语句的触发器
  1. CREATE TRIGGER trigger_name BEFORE|AFTER trigger_EVENT
  2. ON table_name FOR EACH ROW trigger_STMT;
复制代码
  1. PS :
  2. trigger_name :表示所要创建的触发器的名字
  3. BEFORE|AFTER :指定触发器执行的时间(触发器事件之前
  4.                执行|触发器事件之后执行)
  5. trigger_EVENT:表触发事件,即触发器执行条件包含
  6.                DELETE、INSERT、UPDATE语句。
  7. teble_name :  表示触发事件操作表的名字
  8. FOR EACH ROW :表示任何一条记录上的操作满足触发时间
  9.                都会触发该触发器。
  10. trigger_STMT:表示激活触发器后被执行的语句
复制代码
  1. 如:两行表:部门表(t_dept)、日记表(t_diary),创建触发器实
  2. 现向部门表(t_dept)插入记录时,就会在插入之前向日记表
  3. (t_diary)中插入当前时间;如下:
  4.      1.查看:
  5.           DESCRIBE t_dept; DESCRIBE t_diary;
  6.      2.创建触发器(tri_diarytime):
  7.           CREATE TRIGGER tri_diarytime BEFORE
  8.           INSERT ON t_dept FOR EACH ROW
  9.           INSERT INTO t_diary VALUES(NULL,'t_dept',now());
  10.      3.效验:
  11.          INSERT INTO t_dept VALUES(1,'cjgongdept','SHangXi');
  12.          SELECT * FROM t_diary;
复制代码
8.1.2 创建包含多条执行语句的触发器
  1.       CREATE TRIGGER  trigger_name BEFORE|AFTER trigger_EVENT
  2.       ON table_name FOR EACH ROW BEIN trigger_STMT END
复制代码
  1. PS:为了解决“;”问题,用SELIMITER关键字,如:“DELIMITER$$”,
  2. 可以用来实现将结束符号设置为“$$”.
  3. 如:两行表:部门表(t_dept)、日记表(t_diary),创建触发器实现向
  4.     部门表(t_dept)插入记录时,
  5.     就会在插入之前向日记表(t_diary)中插入两条记录;如下:
  6.      1.查看:
  7.        DESCRIBE t_dept; DESCRIBE t_diary;
  8.      2.创建触发器(tri_diarytime):
  9.        DELIMITER $$
  10.        CREATE TRIGGER tri_diarytime2 AFTER INSERT ON
  11.        t_dept FOR EACH ROW
  12.        BEGIN
  13.        INSERT INTO t_diary VALUES(NULL,'t_dept',now());
  14.        INSERT INTO t_diary VALUES(NULL,'t_dept',now());
  15.        END
  16.        $$
  17.        DELIMITER;
  18.     PS:上述语句中,首先用“DELIMITER $$”语句设置结束符号为“$$”,
  19.     后再关键字BEGIN和END之间编写执行语句列表,
  20.     最后通过“DELIMITER;”语句将结束符号还原为默认结束符号“;”
  21.     3.效验:
  22.       INSERT INTO t_dept VALUES(1,'cjgongdept','SHangXi');
  23.       SELECT * FROM t_diary;
复制代码
8.2 查看触发器

8.2.1 通过SHOW TRIGGERS 语句查看触发器
  1. 错误提示:“ERROR 1359(HY000) Trigger already exits”:触发器已存在。
  2.         “ERROR 1235(42000)”:具有相同触发程序动作时间和事件的给定表,
  3.          不能存在两个触发器。
复制代码
  1. SHOW TRIGGERS  \G ;        
复制代码

    1. Trigger  表示触发器的名称
    复制代码
    1. Event    表示胡发起的激活事件
    复制代码
    1. Table    表示触发器对象触发事件所操作的表
    复制代码
    1. Student  表示触发器激活执行时所执行的语句
    复制代码
    1. Timming  表示触发器所执行的时间
    复制代码
8.2.2 通过查看系统表triggers 实现查看触发器
  1.    DESC triggers;
  2.    
  3.    USE information_schema;
  4.    SELECT * FROM  triggers  \G ;
  5. 查询指定触发器的详细信息:
  6.    SELECT * FROM  TRIGGERS WHERE TRIGGER_NAME
  7.    ='tri_diarytime2' \G;
复制代码
8.3 删除触发器

8.3.1 通过DROP TRIGGER 语句删除触发器
  1. DROP  TRIGGER trigger_name;
  2. SHOW TRIGGERS \G;
复制代码
九 数据的操作

9.1 插入数据记录

9.1.1 插入完备数据记录
  1. INSERT INTO table_name(field1,field2,field3,...fieldn)
  2. VALUES(value1,value2,value3...valuen);
  3. table_name:表示所要插入完整记录的表名
  4. fieldn:表示表中的字段名字
  5. value:表示所要插入的数值
  6. 最后参数filedn与参数valuen一一对应;
  7. 如:
  8. #查看部门表t_dept:
  9. DESCRIBE t_dept;
  10. #插入完整数据记录:
  11. INSERT INTO t_dept(deptno,dname,loc)VALUES(1,'cjgong1','shanghai');
  12. #校验部门表t_dept中数据记录是否插入成功:
  13. SELECT * FROM t_dept;
  14. 插入完整数据记录还可以省略字段参数:
  15. INSERT INTO table_name VALUES(value1,value2,value3,...valuen);
  16. INSERT INTO t_dept VALUES(2,'cjgong2','shanghai2');
  17. SELECT * FROM t_dept;
复制代码
9.1.2插入数据记录一部分
  1. INSERT INTO table_name(field1,field2,field3,...fieldn)
  2. VALUES(value1,value2,value3...valuen);
  3. 如:
  4. INSERT INTO t_dept(dname,loc)VALUES('cjgong1','shanghai');
  5. #校验部门表t_dept中数据记录是否插入成功:
  6. SELECT * FROM t_dept;
复制代码
9.1.3插入多条数据记录

1.插入多条完备数据记录
  1.    INSERT INTO table_name(field1,field2,field3,...fieldn)
  2.    VALUES(value11,value21,value31...valuen1),
  3.          (value12,value21,value32...valuen2),
  4.          (value13,value23,value33...valuen3),
  5.          ...
  6.          (value1m,value2m,value3m...valuenm),
  7.   或者
  8.   INSERT INTO table_name
  9.   VALUES(value11,value21,value31...valuen1),
  10.         (value12,value21,value32...valuen2),
  11.         (value13,value23,value33...valuen3),
  12.         ...
  13.         (value1m,value2m,value3m...valuenm),
  14.   m:参数表示一次插入m条完整数据记录
复制代码
  1. 如:
  2. 一次插入五条完整数据记录:
  3.    DESCRIBE t_dept;
  4.    INSERT INTO t_dept
  5.        VALUES(1,'cjgongdept1','shanghai1'),
  6.        VALUES(2,'cjgongdept2','shanghai2'),
  7.        VALUES(3,'cjgongdept3','shanghai3'),
  8.        VALUES(4,'cjgongdept4','shanghai4'),
  9.        VALUES(5,'cjgongdept5','shanghai5');
  10.    SELECT * FROM t_dept;
复制代码
2.插入多条部分数据记录
  1.    INSERT INTO table_name(field1,field2,field3,...fieldn)
  2.    VALUES(value11,value21,value31...valuen1),
  3.          (value12,value21,value32...valuen2),
  4.          (value13,value23,value33...valuen3),
  5.          ...
  6.          (value1m,value2m,value3m...valuenm),
  7.     如:
  8.       INSERT INTO t_dept(dname,loc)
  9.       VALUES('cjgongdept1','shanghai1'),
  10.       VALUES('cjgongdept2','shanghai2'),
  11.       VALUES('cjgongdept3','shanghai3'),
  12.       VALUES('cjgongdept4','shanghai4'),
  13.       VALUES('cjgongdept5','shanghai5');
  14.       SELECT * FROM t_dept;
复制代码
9.1.4 插入查询结果
  1.   INSERT INTO table_name1(field1,field2,
  2.   field3,...fieldn)
  3.   SELECT (field21,field22,field23,...)
  4.   FROM table_name2
  5.   WHERE...
  6.    table_name1:参数表示所要插入数值的表
  7.    table_name2:参数表示所要插入数值是哪个表查询出来
  8.    参数(field11,field12,field13...fieldn):表示
  9.    表table_name1中所要插入值的字段
  10.    参数(field21,field22,field23...field2n):表示
  11.    表table_name2中所查询值的字段
  12.   如:
  13.   向部门表t_dept插入表t_loader中关于字段dname和loc的查询结果:
  14.   #查询各个表的信息:
  15.    DESCRIBE t_dept;
  16.    DESC t_loader;
  17.   #查询t_loader中的数据记录:
  18.    SELECT * FROM t_loader;
  19.   #插入查询结果的数据记录:
  20.    INSERT INTO t_dept(dname,loc) SELECT dname,loc
  21.    FROM t_loader;
  22.   #校验部门表t_dept中数据记录是否插入成功
  23.    SELECT * FROM t_dept;
复制代码
9.2 更新数据记录

9.2.1 更新特定数据记录
  1.   UPDATE table_name SET field1=value1,field2=value2,
  2.   field3=value3,WHERE CONDITION;
  3.   table_name:参数表示所要更新数据记录的表名
  4.   field:表示表中所要更新数值的字段名字
  5.   value:表示更新后的数值
  6.   CONDITION:指定更新满足条件的特定数据记录
  7.   如:
  8.   在部门表t_dept中使名称(字段dname)为cjgongdept1部门的地址(字段loc)
  9.   由shanghai1更新为shanghai2:
  10.   DESCRIBE t_dept;
  11.   SELECT * FROM t_dept;
  12.   UPDATE t_dept SET loc='shanghai2' WHERE dname='cjgongdept1';
  13.   SELCT * FROM t_dept;
复制代码
9.2.2 更新所有数据记录
  1. UPDATE table_name SET field1=value1,field2=value2,field3=value3,
  2. WHERE CONDITION;
  3. 如:
  4. 在部门表t_dept中使所有数据记录中部门地址(字段loc)都更新为shanxi8:
  5. DESCRIBE t_dept;
  6. SELECT * FROM  t_dept;
  7. UPDATE t_dept SET loc='shangxi8'WHERE deptno<6;
  8. SELECT * FROM  t_dept;
  9. 注意:在执行UPDATE时,如果没有关键字WHERE的语句,将更新所有的数据记录:
  10. 如:UPDATE t_dept  SET loc='shangxi9';
  11. SELECT * FROM t_dept;
复制代码
十一 多表数据记录查询

11.1 关系数据操作

11.1.1 并(UNION)
  1.    DELETE FROM table_name WHERE CONDITION
  2.    table_name:参数表示所要删除数据记录的表名
  3.    CONDITION:指定更新满足条件的特定数据记录
  4.    如:在部门表(t_dept)中删除名字(字段dname)为cjgongdept1的部门:
  5.      DESCRIBE t_dept;
  6.      SELECT * FROM t_dept;
  7.      DELETE FROM t_dept WHERE dname='cjgongdept1';
  8.      SELECT * FROM t_dept;
复制代码
11.1.2 笛卡尔积(CARTESIAN PRODUCR)
  1.      DELETE FROM table_name WHERE CONDITION
  2.   如:在部门表(t_dept)中删除所有数据记录:
  3.      DESCRIBE t_dept;
  4.      SELECT * FROM t_dept;
  5.      DELETE FROM t_dept WHERE deptno<6;
  6.      SELECT * FROM t_dept;
  7.   注意:如果没有关键字WHERE的语句,将删除所有的数据记
  8.      DELETE FROM t_dept;
  9.      SELECT * FROM t_dept;
复制代码
11.1.3 内连接(INNER JOIN)


  • 内连接(INNER JOIN)
  • 外连接(OUTER JOIN)
  • 交错连接(CROSS JOIN)
    1. SELECT field1 field2  ... fieldn FROM table_name;
    2.         fieldn 表示所要查询的字段名字
    3.         table_name 表示查询数据记录的表名
    复制代码
1.自然连接(INNER JOIN)
  1.   1.简单数据查询
  2.   2.避免重复数据查询
  3.   3.实现数学四则运算数据查询
  4.   4.设置显示格式数据查询
复制代码
2.等值连接
  1. 1. 查询数据字段数据
  2.   SELECT empno,job,MGR,Hiredate,sal,comm,deptno
  3.   FROM t_employee;
  4. 2."*"符号的使用
  5.   SELECT * FROM table_name;
  6.   SELECT * FROM t_employee;
  7. 3.查询指定字段数据
  8. SELECT empno,ename,sal FROM t_employee;
复制代码
3.不等连接
  1. SELECT DISTINCT field1 field2 ...fieldn FROM table_name;
  2. SELECT DISTINCT job FROM t_employee;
复制代码
11.1.4 外连接(OUTER JOIN)
  1.   -     +      加法
  2.   -     -      减法
  3.   -     *      乘法
  4.   -     /(DIV)      除法
  5.   -     %(MOD)    求余
复制代码
1.左外连接(LEFT OUTER JOIN)
  1. 如:SELECT ename ,sal*12 FROM t_employee;
  2. 语法:SELECT field1 [AS] otherfield1,field2 [AS] otherfield2,
  3. ... fieldn [AS] otherfieldn FROM table_name;
  4. SELECT ename ,sal*12 AS yearsalary FROM t_employee;
  5. 或者
  6. SELECT ename ,sal*12 yearsalary FROM t_employee;
复制代码
2.右外连接(RIGHT OUTER JOIN)
  1. SELECT CONCAT(ename,'雇员的年薪为: ',sal*12)yearsalary
  2. FROM t_employee;
复制代码
3.全外连接(FULL OUTER JOIN)
  1. SELECT field1 field2 ... fieldn FROM table_name
  2. WHERE CONDITION
  3. 上述语句中通过参数CONDITION对数据进行条件查询:
  4. 带关系运算符和逻辑运算符的条件数据查询
  5. 带 BETWEEN AND 关键字的条件数据查询
  6. 带 IS NULL 关键字的条件数据查询
  7. 带 IN 关键字的条件数据查询
  8. 带 LIKE 关键字的条件数据查询
复制代码
11.2 内连接查询
  1. 比较运算符:
  2. -    运算符       描述
  3. -      >         大于
  4. -      <         小于
  5. -      =         等于
  6. -      !=(<>)    不等于
  7. -      >=       大于等于
  8. -      <=       小于等于
  9. 逻辑运算符
  10. -     AND(&&)    逻辑与
  11. -     OR(||)     逻辑或
  12. -     XOR        逻辑异或
  13. -     NOT(!)     逻辑非
复制代码
11.2.1自连接
  1. SELECT ename FROM t_employee WHERE job='CLERK';
  2. 或者
  3. select ENAME from T_EMPLOYEE where JOB='clerk';
复制代码
11.2.2 等值连接
  1. SELECT ename FROM t_employee WHERE job='CLERK'
  2. && sal=800;
  3. 或者
  4. SELECT ename FROM t_employee WHERE job='CLERK'
  5. AND sal=800;
复制代码
11.2.2.1 多张表等值连接(三张表)
  1. SELECT field1 field2 ...fieldn FROM table_name
  2. WHERE field BETWEEN VALUE1 AND VALUE2;
复制代码
11.2.3 不等连接
  1. SELECT ename FROM t_employee WHERE sal
  2. BETWEEN 1000 AND 2000;
复制代码
11.3 外连接查询
  1. SELECT ename FROM e_employee WHERE sal
  2. NOT BETWEEN 1000 AND 2000;
复制代码
外连接分为三类:
  1.   SELECT field1 field2 ...fieldn FROM table_name
  2.   WHERE field  IS NULL;
复制代码
11.3.1 左外连接
  1. SELECT ename FROM t_employee WHERE sal IS NULL;
复制代码
11.3.2 右外连接
  1. SELECT ename FROM t_employee WHERE comm IS NOT NULL;
复制代码
11.4 合并查询数据记录
  1.   SELECT field1 field2 ...fieldn FROM table_name
  2.   WHERE field IN(value1,value2,value3...,valuen);
  3. PS:value 表示集合中的值,关键字IN来判断字段field 的值是否在集合
  4.     (value1,value2,value3...,valuen)中如果field的值在集合中,
  5.     则满足查询条件,即被查询出来,否则不会被查询出来。
复制代码
1.带有关键字UNION的合并操作
  1. SELECT ename FROM t_employee WHERE empno=7521
  2. or empno=7782 or empno=7566 or empno=7788;
  3. 或者
  4. SELECT ename FROM t_employee WHERE empno
  5. IN(7521,7782,7566,7788);
复制代码
2.带关键字UNION ALL 的合并操作
  1. 1.查询的集合中如果存在NULL,则不会影响查询,如果使用关键字
  2. NOT IN 查询集合中存在NULL,则不会有任何的查询结果。
  3. 如1:SELECT ename FROM t_employee IN (7521,7782,7566,7788,NULL);
  4. 如2: SELECT ename from t_employee NOT IN
  5.      (7521,7782,7566,7788,NULL);
复制代码
11.5 子查询
  1.   PS:所谓通配符,主要是用来实现匹配部分值得特殊字符。
  2.   SELECT field1,field2...fieldn FROM table_name WHERE
  3.   field LIKE value;
  4. PS value:表示所匹配的字符串值,通过LIKE来判断字段field的值是否与
  5.           value字符串相匹配,
  6.     如果字段field的值与value值相匹配,则满足查询条件,
  7.     记录就会别查出来,否则不会被查出来。
复制代码
11.5.1 返回结果为单行单列和单行多列子查询

1.返回结果为单行单列子查询
  1. “_”通配符,该通配符值能匹配单个字符。
  2. “%”通配符,该通配符值可以匹配任意长度的字符串,既可以是0个字符,
  3. 1个字符,也可是多个字符。
复制代码
2.单行多列子查询
  1.   SELECT ename FROM t_employee WHERE ename LIKE 'A%';
  2.   或者
  3.   SELECT ename FROM t_employee WHERE ename LIKE 'a%';
  4.   查询不是以字母A开头的全部雇员可以执行逻辑运算符(NOT或!):
  5.   SELECT ename FROM t_employee WHERE NOT ename LIKE 'A%';
复制代码
11.5.2 返回结果为多行单列子查询

1.带有关键字IN的子查询
  1.   查询字段ename中第二个字母为A的数据记录:
  2.   SELECT ename FROM t_employee WHERE ename LIKE '_A%';
  3.   查询名字第二个不是以字母A开头的全部雇员可以执行逻辑运算符(NOT或!):
  4.   SELECT ename FROM t_employee WHERE NOT ename LIKE '_A%';
复制代码
2.带有关键字ANY的子查询
  1.    SELECT field1,field2...fieldn FROM table_name WHERE
  2.   field【NOT】LIKE value;
  3.   如:查询字段ename没有字母A的数据记录:
  4. SELECT ename FROM t_employee WHERE ename NOT LIKE '%A%';
  5. 如:查询工资中带有5的全部雇员:
  6.   SELECT ename FROM t_employee WHERE sal LIKE '%5%';
复制代码
3.带有关键字ALL的子查询
  1. SELECT field1,field2...fieldn FROM table_name WHERE
  2.   CONDITION ORDER BY fileldm1 [ASC|DESC] [,fileldm2 [ASC|DESC]]
  3. PS: fileldm 表示按照该字段进行排序
  4.      ASC 表示升序排序,DESC 表示降序排序
  5.      ORDER BY:设置多个不同字段进行排序
复制代码
4.带有关键字EXISTS的子查询
  1.   1.按照单字段排序
  2.   2.按照多字段排序
复制代码
11.5.3 返回结果为多行多列子查询
  1.   SELECT * FROM t_employee ORDER BY sal ASC;
  2.   或者
  3.   SELECT * FROM t_employee ORDER BY sal;
  4.   PS:mysql中ORDER BY 默认的排序顺序为升序。
复制代码
十二 使用MySQL运算符

12.1 使用算术运算符
  1.   SELECT *FROM t_employee ORDER BY mgr DESC;
  2.   PS:如果字段的值为空值(NULL),则该值为最小值,
  3.       因此在降序中最后一行显示,升序中第一行显示
复制代码
12.2 使用比较运算符
  1. SELECT field1,field2...fieldn FROM table_name WHERE
  2. CONDITION LIMIT OFFSET_START,ROW_COUNT;
  3. PS:LIMIT:限制数据查询结果数量
  4.     OFFSET_START:表示数据记录的起始偏移量
  5.     ROW_COUNT:表示显示的行数
复制代码
17.5.4 停止慢查询日志
  1. 1.不指定初始位置方式
  2. 2.制定初始位置方式
复制代码
17.5.5 删除慢查询日志
  1.   关键字LIMIT,如果不指定初始位置,默认值为0,
  2.   表示从一条疾苦开始显示。
  3.   语法:LIMIT row_cunt;
  4.   row-count:表示显示roe_count 条数据查询结果数量。
  5.   如:row_count值小于查询结果的总数量,
  6.   将会从第一条数据记录开始,显示row_count条数据记录,
  7.   如果row_count值大于查询结果的总数量,将会显示所有查询结果。
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表