mysql做批量插入时如果存在就更新不存就插入_MySQL入门---3.

3a30e5df77b4ae0acaec94f84fdcae09.png

上一期我们学习了MySQL查询语句的相关知识,这一期,我们就来学习一下表的创建、修改以及表的联结等知识吧。

一、MySQL基础---表操作

1.MySQL表数据类型

MySQL支持多种数据类型,大致可以分为三类:数值、日期/时间、字符串(字符)类型。

  • 数值型有:

d5a31cb0b18f5acb77a8602b8126690a.png
  • 日期和时间类型有:

bb732944017ac18d66f2af92f4294531.png

若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

  • 字符串类型有:

497fd18cf222a5292a9fb101d7bed305.png

注:

(1)char与varchar比较

  • char(n)若存入字符数小于n,则以空格补于其后,查询时再讲空格去掉。所以char类型存储的字符串末尾不能有空格,varchar则不限
  • char(n)固定长度,char(5)不管存入几个字符,都将占用5个字符,varchar是存入的实际字符数+1个字节(n<=255)或+2个字节(n>255)
  • char类型的字符串检索速度要比varchar类型快

(2)varchar与text比较:

  • varchar可指定n,text不能,内部存储text是实际字符数+2个字节
  • text类型不能有默认值
  • varchar的查询速度快于text

2.用SQL语句创建表

2.1语句解释

CREATE 
  • 要创建的表名称,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER、INSERT等
  • 定义数据表中每一个列的名称和数据类型,如果创建多个列,要用逗号(,)隔开

例如:创建员工表tb_emp1

#创建表tb_emp1
CREATE TABLE tb_emp1
(
id INT(11),
NAME VARCHAR(25),
deptID INT(11),
salary float
);

#查看表结构

89797cab78206e30cffdc5a2fdce0c57.png
tb_emp1表结构

2.2约束

2.2.1主键约束(PRIMARY KEY)

  • 主键又称主码,是表中一列或多列的组合,唯一标识表中的一条记录,如学生编号可以标识每一位学生身份
  • 主键列的数据要唯一,不重复,不允许为空
  • 可以结合外键来定义不同数据表之间的关系,并且加快数据库查询速度

(1)单字段主键

单字段主键由一个字段组成,SQL语句格式可分为以下两种情况:

方法1--在定义列的同时指定主键

字段名 数据类型 PRIMARY KEY [默认值]

例:定义表tb_emp2,主键为id。

CREATE TABLE tb_emp2
(
id INT(11) PRIMARY KEY,
name VARCHAR(25),
deptID INT(11),
salary FLOAT
);

方法2--在定义完所有列之后指定主键

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]

例:创建表tb_emp3,主键为id。

CREATE TABLE tb_emp3
(
id INT(11),
name VARCHAR(25),
deptID INT(11),
salary FLOAT
PRIMARY KEY(id)
);

(2)多字段联合主键

PRIMARY KEY [字段1,字段2,...,字段n]

例:创建表tb_emp4,假设表中没有主键id,为了唯一确定一个员工,可以把name、deptID联合起来作为主键。

CREATE TABLE tb_emp4
(
name VARCHAR(25),
deptID INT(11),
salary FLOAT,
PRIMARY KEY(name, deptID)
);

2.2.2外键约束(FOREIGN KEY)

  • 外键用来在两个表的数据之间建立链接,可以是一列或多列,一个表可以有一个或多个外键
  • 一个表的外键往往是另一个表的主键
  • 外键的作用是保证数据的完整性、一致性,在删除表的时候,注意先删除表之间的链接关系
  • 对于两个具有关联关系的表而言,相关字段中主键所在的那个表即是主表(父表),外键所在的那个表为从表(字表)

语法:

[CONSTRAINT <外键名> FOREIGN KEY 字段名1 [, 字段名2,...] REFERENCES <主表名> 主键列1 [, 主键列2...]

例:创建表tb_emp5,并在tb_emp5表上创建外键约束。

#

2.2.3非空约束(NOT NULL)

非空约束指字段的值不能为空,若使用了非空约束的字段,在添加数据的时候没有指定值,数据库系统会报错。

字段名 数据类型 NOT NULL

例:定义数据表tb_emp6,指定员工的名称不能为空。

CREATE TABLE tb_emp6
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptID INT(11),
salary FLOAT
);

2.2.4唯一性约束(UNIQUE)

唯一性约束要求该列取值唯一,允许为空,但只能出现一个空值。

字段名 数据类型 UNIQUE

例:建立表tb_dept2,指定部门的名称唯一。

CREATE TABLE tb_dept2
(
id INT PRIMARY KEY,
name VARCHAR(22) UNIQUE,
location VARCHAR(50)
);

另一种方式:

[CONSTRAINT <约束名> UNIQUE(<字段名>)

同上例:

CREATE TABLE tb_dept2
(
id INT PRIMARY KEY,
name VARCHAR(22),
location VARCHAR(50)
CONSTRAINT STH UNIQUE(name)
);

2.2.5默认约束(DEFAULT)

默认约束指定某列的默认值

字段名 数据类型 DEFAULT 默认值

例:建立表tb_emp7,指定员工的部门编号默认为1111。

CREATE TABLE tb_emp7
(
id INT(11) PRIMARY KEY,
name VARCHAR(25) NOT NULL,
deptID INT(11) DEFAULT 1111,
salary FLOAT
);

2.2.6表的属性值自动增加(AUTO_INCREMENT)

  • AUTO_INCREMENT的初始值为1,每新增一条记录,字段值自动加1
  • 一个表只能有一个字段使用AUTO_INCREMENT约束,且该字段必须作为主键的一部分
字段名 数据类型 AUTO_INCREMENT

例:建立表tb_emp8,指定员工编号自动递增。

CREATE TABLE tb_emp8
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(25) NOT NULL,
deptID INT(11),
salary FLOAT
);

3.用SQL语句向表中添加数据

3.1语句解释

使用基本的INSERT语句插入数据,要求指定表名称和插入到新记录中的值。基本语法:

INSERT INTO table_name (column_list) VALUES (value_list);

table_name指定要插入数据的表名,column_list指定要插入数据的那些列,value_list指定每个列对应插入的数据。注意:使用该语句时字段和数据值的数量必须相同。

3.2多种添加方式

例1--指定列名插入:

#先创建person表
CREATE TABLE person
(
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT ' ',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL,
);

#插入数据
INSERT INTO person(id, name, age, info)
VALUES(1, 'Green', 21, 'Lawyer');

#查看结果
SELECT * FROM person;

298e58bb5d1438256d42b07c0226814b.png
数据插入结果

指定列名插入时,插入值的顺序可以与原表中列的顺序不同,但一定要与指定的列名顺序相同,不一定要使用全部列名,只要不违背约束条件就行(如非空约束)。

例2--不指定列名插入

#使用同上表person
INSERT INTO person
VALUES(2, 'Mary', 24, 'Musician');

在没有指定列名的情况下,插入值的顺序必须与表中列的顺序相同。

例3--插入多条数据

#创建person_old表
CREATE TABLE person_old
(
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(40) NOT NULL DEFAULT ' ',
age INT NOT NULL DEFAULT 0,
info CHAR(50) NULL
);

#插入数据
INSERT INTO person_old
VALUES (11, 'Harry', 20, 'student'), (12, 'Beckham', 31, 'police');

#查看数据
SELECT * FROM person_old;

db4b1b460e3ac6a3b032800a7aad7ac1.png
数据插入结果

4.用SQL语句删除表

删除表的时候要慎重,最好先做备份,以防表误删造成无法挽回的严重后果。

4.1DROP语句

4.1.1删除没有关联的表(可以同时删除多个表)

DROP TABLE [IF EXISTS] 表1, 表2, ..., 表n;

如果删除的表不存在,MySQL会提示一条错误信息,使用IF EXISTS参数后,表不存也不会报错,但会发出警告。

例:删除数据表tb_dept2。

DROP TABLE IF EXISTS tb_dept2;

4.1.2删除被其他表关联的主表

数据表之间存在外键关联的情况下,如果直接删除父表,结果会显示失败。如果必须要删除,可以先删除与它关联的字表,再删父表。当然,如果需要保留子表,只需将关联的表外键约束取消,然后就可以删除父表了。

4.2DELETE语句

从数据表中删除数据使用DELETE语句。DELETE语句允许WHERE子句(可选)指定删除条件。

DELETE FROM table_name [WHERE <condition>];

例:

DELETE FROM person; #删除person表所有记录
DELETE FROM person
WHERE id=1;  #删除person表中id为1的记录

4.3TRUNCATE语句

如果想删除表中所有的记录,还可以使用TRUNCATE语句,它将直接删除原来的表,并重新创建一个表。

TRUNCATE TABLE table_name;

#例
TRUNCATE TABLE person;

4.4多种删除方法区别

  • DROP语句是直接删除整张表(不可以设置删除条件,必须删除整张表)
  • DELETE语句是删除表中的记录,而不删除这张表,可以设置删除记录的条件
  • TRUNCATE语句也是直接删除整张表,但不同于DROP是,它删除表后又创建一个新的和原来表结构一模一样的空表
  • TRUNCATE与DROP语句的执行效率高于DELETE语句

5.用SQL修改表

5.1修改表名

ALTER TABLE <旧表名> RENAME <新表名>;

#例如:将表tb_emp1名字修改为ttbb_emp1
ALTER TABLE tb_emp1 RENAME ttbb_emp1; 

5.2修改列的数据类型/列名

5.2.1修改数据类型

ALTER TABLE <表名> MODIFY <字段名> <数据类型>

#例如
ALTER TABLE tb_emp1 MODIFY name CHAR(100);

5.2.2修改列名

ALTER TABLE <表名> CHANGE <旧列名> <新列名> <新数据类型>

#例如:将表tb_emp1中的name列改名为stu_name
ALTER TABLE tb_emp1 CHANGE name stu_name;

5.3添加/删除列

5.3.1添加列

ALTER TABLE <表名> ADD <新列名> <数据类型>;

#例如:给表tb_emp1添加新列address,数据类型为VARCHAR(50)
ALTER TABLE tb_emp1 ADD address VARCHAR(50); 

#添加列的时候设置约束条件
ALTER TABLE tb_emp1 ADD address VARCHAR(50) NOT NULL;

#在表的第一列添加一个列(FIRST关键字)
ALTER TABLE tb_emp1 ADD address VARCHAR(50) FIRST;

#在表的指定列之后添加一个列(AFTER关键字)
ALTER TABLE tb_emp1 ADD address VARCHAR(50) AFTER name;

5.3.2删除列

ALTER TABLE <表名> DROP <列名>;

#例如
ALTER TABLE tb_emp1 DROP name;

5.4添加/删除行

5.4.1添加行

INSERT INTO table_name (column_list) VALUES (value_list);

#另一种插入方式:将查询结果插入到表中
INSERT INTO table_name1 (column_list1)
SELECT (column_list2) FROM table_name2 WHERE (condition);

#例如:
INSERT INTO person(id, name, age, info)
SELECT id, name, age, info FROM person_old;

5.4.2删除行

DELETE FROM <表名> [WHERE <condition>];

5.5修改表中数据(UPDATE语句)

UPDATE table_name
SET column_name1 = value1, column_name2 = value2 ..., column_n = valuen
WHERE (condition);


#例如:在person表中,更新id值为11的记录,将age的值改为15,name值改为LiMing
UPDATE person SET age = 15, name = 'LiMing' WHERE id = 11;

6.项目实战

项目三:超过5名学生的课(难度:简单)

创建如下所示的courses 表 ,有: student (学生) 和 class (课程)。

例如,表:

+---------+------------+

| student | class |

+---------+------------+

| A | Math |

| B | English |

| C | Math |

| D | Biology |

| E | Math |

| F | Computer |

| G | Math |

| H | Math |

| I | Math |

| A | Math |

+---------+------------+

编写一个 SQL 查询,列出所有超过或等于5名学生的课。

应该输出:

+---------+

| class |

+---------+

| Math |

+---------+

Note:

学生在每个课中不应被重复计算。

参考

#

9a86c7ebd93d4038aa22b89602a802a6.png

项目四:交换工资(难度:简单)

创建一个 salary表,如下所示,有m=男性 和 f=女性的值 。

例如:

| id | name | sex | salary |

|----|------|-----|--------|

| 1 | A | m | 2500 |

| 2 | B | f | 1500 |

| 3 | C | m | 5500 |

| 4 | D | f | 500 |

交换所有的 f 和 m 值(例如,将所有 f 值更改为 m,反之亦然)。要求使用一个更新查询,并且没有中间临时表。

运行你所编写的查询语句之后,将会得到以下表:

| id | name | sex | salary |

|----|------|-----|--------|

| 1 | A | f | 2500 |

| 2 | B | m | 1500 |

| 3 | C | f | 5500 |

| 4 | D | m | 500 |

参考:

#

d9ea6d344654285892f21ec9b4829e15.png

二、MySQL基础---表联结

1.MySQL别名

1.1表的别名

当表的名字很长或者执行一些特殊查询时,为了方便操作或需要多次使用相同的表时,可以为表指定一个别名,用这个别名替代原来的名称。

表名 [AS] 表别名

AS关键字是可选的,加不加都可以

例:

SELECT 

1.2列的别名

列的名称很长或者列的名称不够直观的时候,可以给列取个别名,当然,计算的表达式也可以取别名;

列名 [AS] 列别名

例:

SELECT 

2.连接查询---内连接/外连接/交叉连接/自连接

通过连接操作可以查询从出放在不同表中的数据。当两个或多个表中存在相同意义的列时,便可以通过这些列对不同的表进行连接查询。

2.1内连接查询

2.1.1INNER JOIN内连接,获取两个表中列匹配关系的记录

SELECT column_list FROM table_name1
INNER JOIN table_name2
ON [condition];

在这里的查询语句中,两个表之间的关系通过INNER JOIN指定(MySQL默认关系为INNER JOIN,此处的INNER可以省略),连接条件用ON子句给出(连接条件对要连接的数据进行过滤,发生于表连接之前)。内连接形式大概如下:

ac38dd3d48234345efc557c1c32b7b65.png
INNER JOIN

例子:

#生成两个示例表
CREATE TABLE age
(
id CHAR(5) PRIMARY KEY,
age int
);
CREATE TABLE stu_score
(
id CHAR(5) PRIMARY KEY,
score int
);

#给两个表插入数据
INSERT INTO age
VALUES('1', 12), ('3', 13), ('5', 14), ('6', 15), ('8', 16);

INSERT INTO stu_score
VALUES('1', 78), ('3', 85), ('4', 67), ('7', 92), ('8', 88);

#内连接
SELECT * FROM age a
INNER JOIN stu_score s #指定连接方式
ON a.id = s.id;  #指定连接条件

e64800ab137abbc621a987abc0191ddc.png
INNER JOIN返回结果

2.1.2结合WHERE而不使用JOIN的内连接

实际上,不使用INNER JOIN也可以实现表之间的内连接。但是,这种连接方式在效率上不及INNER JOIN,原因是这种方式会先产生一张笛卡尔积表,然后再根据WHERE的条件过滤数据,即数据的过滤在表连接之后进行的,而ON对数据的过滤发生在表连接前

例:

#使用前面创建的表
SELECT * FROM age a, stu_score s
WHERE a.id = s.id;

8ce4c8e00c1927b88fb5bb53cda799cd.png
不使用JOIN的内连接

2.2外链接---LEFT JOIN/RIGHT JOIN

2.2.1左连接

LEFT JOIN是获取左表所有记录,即使右表没有对应匹配的记录。表连接的形式大概是:

56d3a795f123e67bcb61a0b49810b467.png

例子:

#同上表
SELECT * FROM age a
LEFT JOIN stu_score s
ON a.id = s.id;

89ec31b03881be9243d088d596c2f7ae.png
LEFT JOIN返回结果

2.2.2右连接

RIGHT JOIN是获取右表所有记录,即使左表没有对应匹配的记录。右连接的形式大概是:

0bcba28a7d42a3e0a9f374675f05b5ef.png

例子:

#

f64922dfb9da8b907ff0e9e0bd00773b.png
RIGHT JOIN返回结果

2.3交叉连接

CROSS JOIN子句从连接的表返回行的笛卡尔积,即用CROSS JOIN连接两个表,结果集是两表生成的笛卡尔积表,包含两个表所有的行以及所组合。形式大概如下:

11edac0a98643dbceca317c89d028d2f.png

例子:

#

1959099fe1452de781c4f4e1f67c9585.png
三种语句输出一致

2.4自连接

自连接就是对相同一个表的多次连接。

例:

SELECT 

74dff8a2d3dc7e18758668fab70e0458.png
自连接结果

3.UNION

  • 利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果输出
  • 合并时,两个表对应的列数和数据类型必须相同
  • 各个SELECT语句需用UNION或UNION ALL关键字分隔
  • UNION不使用关键字ALL,执行的时候删除重复的记录,返回的记录都是唯一的
  • 使用ALL关键字,则不剔除重复的记录
SELECT 

例子:

#

821be51c98b023852bafd1aeed7a482f.png
使用ALL关键字

fe0762fda7ae3f037fb5c2e351553244.png
不使用ALL关键字

4.各种连接查询的区别

  • JOIN连接是横向连接表数据,UNION是纵向连接表数据
  • JOIN连接和FROM table1, table2这种连接方式在没有指定连接条件时都会生成笛卡尔积表,但在指定连接条件后,JOIN使用的ON子句对数据的过滤是发生在表的连接前,因此不会直接产生笛卡尔积表,而是产生符合条件的表。而第二种方式需要WHERE子句来指定连接条件,WHERE子句对数据的过滤发生在表连接后,故需先产生一张笛卡尔积表,再做数据的过滤。因此,从效率上来看,JOIN连接方式优于后者。

5.SQL语句执行顺序

  1. From
  2. ON
  3. JOIN
  4. WHERE
  5. GROUP BY
  6. SELECT
  7. HAVING
  8. ORDER BY
  9. LIMIT

6.项目练习

项目五:组合两张表 (难度:简单)

在数据库中创建表1和表2,并各插入三行数据(自己造)

表1: Person

+-------------+---------+

| 列名 | 类型 |

+-------------+---------+

| PersonId | int |

| FirstName | varchar |

| LastName | varchar |

+-------------+---------+

PersonId 是上表主键

表2: Address

+-------------+---------+

| 列名 | 类型 |

+-------------+---------+

| AddressId | int |

| PersonId | int |

| City | varchar |

| State | varchar |

+-------------+---------+

AddressId 是上表主键

编写一个 SQL 查询,满足条件:无论 person 是否有地址信息,都需要基于上述两表提供 person 的以下信息:FirstName, LastName, City, State

参考:

#

61efb7d106305712486ccce88b5ad335.png

项目六:删除重复的邮箱(难度:简单)

编写一个 SQL 查询,来删除 email 表中所有重复的电子邮箱,重复的邮箱里只保留 Id 最小 的那个。

+----+---------+

| Id | Email |

+----+---------+

| 1 | a@b.com |

| 2 | c@d.com |

| 3 | a@b.com |

+----+---------+

Id 是这个表的主键。

例如,在运行你的查询语句之后,上面的 Person表应返回以下几行:

+----+------------------+

| Id | Email |

+----+------------------+

| 1 | a@b.com |

| 2 | c@d.com |

+----+------------------+

参考:

#

a1e4a0b9acf0155c79ba1d42682c933c.png

本期到此结束,欢迎后续继续学习下一期的内容~

上一期内容:

End小fa:MySQL入门---2.​zhuanlan.zhihu.com
4325586c3d09643035eaa0a0e117cf2e.png

参考

mysql(2)-- 由笛卡尔积现象分析数据库表的连接

Mysql 连接的使用 | 菜鸟教程

《MySQL5.7从入门到精通》 ---刘增杰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容提要 本书全面深入地介绍了MySQL的功能,主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、API应用指南,最大限度地帮助读者更快地学习和掌握MySQL数据库系统的设计和使用。本书覆盖了MySQL 5.0,讨论了新的程序设计接口(如PHP 5里的mysqli)和新的系统管理工具。 本书是MySQL数据库管理员和开发人员的必备参考书。 目录 第一部分 入门  第1章 什么是MySQL   1.1 什么是数据库   1.2 MySQL   1.3 MySQL的不足   1.4 MySQL的版本编号   1.5 MySQL的许可证   1.6 MySQL软件的替代品   1.7 小结  第2章 测试环境   2.1 是Windows还是UNIX/Linux   2.2 在Windows系统上安装MySQL和相关软件   2.3 在SUSE Linux 9.3系统上安装MySQL和相关软件   2.4 在Red Hat Enterprise Linux 4系统上安装MySQL和相关软件   2.5 编译MySQL软件的开发者版本(Linux)   2.6 配置Apache   2.7 配置PHP   2.8 配置MySQL  第3章 初级案例研究:MySQL+PHP   3.1 概述   3.2 数据库的开发   3.3 调查问卷   3.4 问卷调查结果的处理和显示   3.5 改进意见 第二部分 管理工具和用户操作界面  第4章 mysqlmysqladmin和mysqldump   4.1 mysql   4.2 mysqladmin   4.3 mysqldump  第5章 MySQL Administrator和MySQL Query Browser   5.1 安装   5.2 与MySQL服务器建立连接   5.3 MySQL Administrator   5.4 MySQL Query Browser  第6章 phpMyAdmin   6.1 phpMyAdmin的安装与配置   6.2 用户管理,保护MySQL   6.3 创建和编辑数据库   6.4 查看、插入和编辑数据   6.5 执行SQL命令   6.6 导入和导出   6.7 服务器管理   6.8 辅助功能  第7章 Microsoft Office和OpenOffice/StarOffice   7.1 安装Connector/ODBC   7.2 Microsoft Access   7.3 Microsoft Excel   7.4 安装Connector/J   7.5 OpenOffice/StarOffice Base   7.6 OpenOffice/StarOffice的Data Source视图 第三部分 基础知识  第8章 数据库设计概论   8.1 参考读物   8.2 数据表类型   8.3 MySQL数据类型   8.4 数据库设计技巧   8.5 规范化   8.6 层次关系的处理   8.7 关系   8.8 主键和外键   8.9 索引   8.10 视图   8.11 示例数据库mylibrary(图书管理)   8.12 示例数据库myforum(网上论坛)   8.13 示例数据库exceptions(用于特殊情况的测试)  第9章 SQL语言入门   9.1 简介   9.2 简单查询(SELECT)   9.3 对查询结果进行排序(ORDER BY)   9.4 筛选数据记录(WHERE,HAVING)   9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)   9.6 合并查询结果(UNION)   9.7 分组查询,统计函数(GROUP BY)   9.8 修改数据(INSERT、UPDATE和DELETE)   9.9 创建数据表、数据库和索引  第10章 SQL解决方案   10.1 字符串   10.2 日期和间   10.3 ENUM和SET数据类型   10.4 变量与条件表达式(IF、CASE)   10.5 在数据表间复制数据   10.6 统计报表   10.7 子查询   10.8 保证数据的一致性   10.9 找出冗余的数据记录   10.10 数据表设计方案的改进   10.11 对前n条或后n条记录进行处理   10.12 以随机方式选择数据记录   10.13 全文索引   10.14 锁定   10.15 事务  第11章 访问权限与信息安全   11.1 简介   11.2 急救   11.3 访问控制机制的内部工作原理   11.4 访问权限的设置工具   11.5 MySQL 4.1版本开始的安全密码验证   11.6 建立连接的问题   11.7 系统安全性  第12章 GIS函数   12.1 GIS数据格式   12.2 MySQL的GIS实现   12.3 SQL示例(冰川数据库)   12.4 SQL示例(opengeodb数据库)  第13章 存储过程和触发器   13.1 为什么要使用存储过程和触发器   13.2 初识SP   13.3 SP的实现   13.4 SP的管理   13.5 SP的语法和语言元素   13.6 SP应用示例   13.7 触发器  第14章 管理与服务器配置   14.1 基础知识   14.2 备份   14.3 数据库的迁移   14.4 导出和导入文本文件   14.5 日志   14.6 镜像机制   14.7 管理MyISAM数据表   14.8 InnoDB数据表的管理   14.9 MySQL服务器的优化   14.10 ISP数据库管理 第四部分 程序设计  第15章 PHP   15.1 mysql功能模块   15.2 mysqli的类、方法和属性   15.3 把数据库功能打包为一个类   15.4 把SELECT查询结果显示为一个表格   15.5 字符串、日期、间、BLOB和NULL   15.6 向关联数据表插入新数据记录   15.7 处理来自HTML表单的输入数据   15.8 分页显示查询结果   15.9 处理层次化数据   15.10 速度优化   15.11 Unicode   15.12 二进制数据(BLOB)和图像   15.13 存储过程   15.14 SP Administrator  第16章 Perl   16.1 编程技巧   16.2 示例:删除无效的数据记录(mylibrary)   16.3 CGI示例:图书管理(mylibrary)   16.4 CGI Unicode示例  第17章 Java(JDBC和Connector/J)   17.1 基础知识   17.2 程序设计技巧  第18章 C语言   18.1 MySQL C API(libmysqlclient)   18.2 Hello,World   18.3 与MySQL服务器建立连接   18.4 执行SQL命令   18.5 处理二进制数据和特殊字符   18.6 出错处理  第19章 Visual Basic 6/VBA   19.1 基础知识和术语   19.2 Connector/ODBC选项   19.3 ADO程序设计与Visual Basic 6/VBA   19.4 与MySQL服务器建立连接   19.5 转换器:从Microsoft SQL Server到MySQL   19.6 VBMySQLDirect  第20章 Visual Basic .NET和C#   20.1 ADO .NET与MySQL之间的通信   20.2 编程技巧   20.3 示例:把新图书记录存入mylibrary数据库   20.4 示例:把图像文件存入和读出一个BLOB数据列 第五部分 参考资料  第21章 SQL语法指南   21.1 语法   21.2 操作符   21.3 变量和常数   21.4 MySQL数据类型   21.5 SQL命令汇总表(按功能分类)   21.6 SQL命令指南(按字母表顺序排列)   21.7 SQL函数指南   21.8 GIS数据类型与GIS函数   21.9 与存储过程和触发器有关的语言元素  第22章 MySQL工具和选项   22.1 概述   22.2 通用选项和配置文件   22.3 mysqld程序(服务器)   22.4 mysqld_safe脚本(启动MySQL服务器)   22.5 mysql_install_db脚本(安装mysql数据库)   22.6 mysql_fix_privileges脚本(更新mysql数据库)   22.7 mysql_fix_extensions脚本(重命名MyISAM文件)   22.8 mysql程序(SQL命令解释器)   22.9 mysqladmin程序(日常管理)   22.10 mysqldump程序(数据的备份/导出)   22.11 mysqlimport程序(文本导入、批量导入)   22.12 mysqlshow程序(查看信息)   22.13 myisamchk程序(修复MyISAM文件)   22.14 myisampack程序(压缩MyISAM文件)  第23章 MySQL API应用指南   23.1 PHP API(mysql接口)   23.2 PHP API(mysqli接口)   23.3 Perl DBI   23.4 JDBC(Connector/J)   23.5 ADO .NET(Connector/Net)   23.6 C API 第六部分 附录  附录A 术语解释  附录B 本书的配套示例文件  附录C 参考书目
目 录<br><br>第一章MYSQL入门与初步 1<br>1.1 MYSQL简介 2<br>1.1.1 MySQL是什么? 2<br>1.1.2 我需要MySQL吗? 3<br>1.1.3 我需要付钱吗? 4<br>1.1.4 如何得到MySQL? 4<br>1.1.5总结 5<br>1.2 关系数据库管理系统 5<br>1.2.1 关系数据库系统 6<br>1.2.2 数据库系统的发展 7<br>1.2.3 与数据库系统通讯 8<br>1.2.4 MySQL的体系结构 8<br>1.2.5总结 8<br>1.3 MYSQL使用的SQL语言 9<br>1.3.1 表、列和数据类型 9<br>1.3.2函数 9<br>1.3.3 SQL的语句 9<br>1.3.4总结 10<br>1.4 MYSQL数据处理 10<br>1.4.1 MySQL的数据 10<br>1.4.1.1、字符串值 10<br>1.4.1.2数字值 11<br>1.4.1.3十六进制值 12<br>1.4.1.4日期和间值 12<br>1.4.1.4 NULL值 12<br>1.4.2列类型概述 12<br>1.4.3 数字列类型 14<br>1.4.3.1整数类型 15<br>1.4.3.2浮点数类型 16<br>1.4.4 日期和间类型 18<br>1.4.4.1 Y2K问题和日期类型 18<br>1.4.4.2 DATETIME,DATE和TIMESTAMP类型 18<br>1.4.4.3 TIME类型 19<br>1.4.4.4 YEAR类型 20<br>1.4.5 字符串类型 20<br>1.4.5.1 CHAR和VARCHAR类型 21<br>1.4.5.2 BLOB和TEXT类型 23<br>1.4.5.3 ENUM和SET类型 24<br>1.4.6总结 26<br>第二章 MySQL的安装 27<br>2.1 MYSQL系统的安装布局 28<br>2.1.1 二进制安装 28<br>2.1.2 RPM安装 28<br>2.1.3 源代码安装 28<br>2.1.4总结 29<br>2.2 安装MYSQL系统的分发 29<br>2.2.1 在Windows下的安装一个二进制分装 29<br>2.2.2 在Windows NT/2000下安装成系统服务 29<br>2.2.3 在Linux下安装一个RPM分发 31<br>2.2.4 在Linux下安装二进制分发 31<br>2.2.5 在Linux下安装源代码分发 32<br>2.2.6 总结 32<br>2.3 安装后期的的设置与测试 33<br>2.3.1建立启动MySQL的帐户 33<br>2.3.2 初始化授权表 33<br>2.3.3 测试服务器是否工作 34<br>2.3.4 自动运行和停止MySQL 36<br>2.3.5 更改root用户的密码 38<br>2.3.6 修改选项文件 38<br>2.3.7总结 41<br>2.4 系统的升级 41<br>2.4.1 备份数据库与其他配置文件 41<br>2.4.2 重新安装二进制分发 41<br>2.4.3重新安装源代码分发 41<br>2.4.4 升级一个RPM分发 42<br>2.4.5 检查数据库是否工作及完整 42<br>2.4.6总结 42<br>2.5在同一台机器上运行多个MYSQL服务器 42<br>2.5.1使用重新编译的方法 42<br>2.5.2使用指定服务器参数的方法 43<br>2.5.3有关选项文件的问题 44<br>2.5.4 总结 44<br>第三章 数据库的基本操作 46<br>3.1 MYSQL的启动与终止 47<br>3.1.1 直接运行守护程序 47<br>3.1.2 使用脚本mysql.server启动关闭数据库 48<br>3.1.3 使用mysqladmin实用程序关闭、重启数据库 49<br>3.1.4 启动或停止NT平台上的系统服务 50<br>3.1.5 使用选项文件提供服务器的参数 51<br>3.1.6 总结 51<br>3.2 MYSQL与客户机的连接 51<br>3.2.1建立和中止与服务器的连接 52<br>3.2.2利用选项文件简化连接 53<br>3.2.3 利用 mysql 的输入行编辑器 54<br>3.2.4 批处理模式连接 55<br>3.2.5 总结 56<br>3.3 有关数据库的操作 56<br>3.3.1 用SHOW显示已有的数据库 56<br>3.3.2 用Create Dabase 创建数据库 57<br>3.3.3 用DROP DATABASE删除数据库 57<br>3.3.4 使用mysqladmin工具创建和删除 58<br>3.3.5 直接在数据库目录中创建或删除 58<br>3.3.6 用USE选用数据库 58<br>3.3.7 总结 58<br>3.4 有关数据表的操作 59<br>3.4.1 用SHOW/ DESCRIBE语句显示数据表的信息 59<br>3.4.2 使用mysqlshow 工具得到信息 60<br>3.4.3 用CREATE TABLE 语句创建数据表 60<br>3.4.4利用 SELECT 的结果创建表 62<br>3.4.5 用ALTER TABLE语句修改表的结构 63<br>3.4.6 用DROP TABLE 语句删除数据表 64<br>3.4.7 总结 64<br>3.5 向数据表插入行记录 64<br>3.5.1 使用INSERT语句插入新数据 64<br>3.5.2 使用INSERT…SELECT语句插入从其他表选择的行 65<br>3.5.3 使用replace、replace…select语句插入 66<br>3.5.4 使用LOAD语句批量录入数据 66<br>3.5.5 总结 68<br>3.6 查询数据表中的记录 69<br>3.6.1 普通查询 69<br>3.6.2 条件查询 71<br>3.6.3 查询排序 73<br>3.6.4 查询分组与行计数 75<br>3.6.5 查询多个表 77<br>3.3.6总结 78<br>3.7 修改、删除数据记录 79<br>3.7.1 用update修改记录 79<br>3.7.2 用delete删除记录 79<br>3.7.3 总结 79<br>第四章 MYSQL高级特性 81<br>4.1 集合函数 82<br>4.1.1 行列计数 82<br>4.1.2统计字段值的数目 82<br>4.1.3 计算字段的平均值 83<br>4.1.4 计算字段值的和 84<br>4.1.5 计算字段值的极值 84<br>4.1.6 总结 86<br>4.2 操作日期和间 86<br>4.2.1 返回当前日期和间 86<br>4.2.2 自动记录数据的改变间 88<br>4.2.3 返回日期和间范围 90<br>4.2.5 比较日期和间 92<br>4.3 字符串模式匹配 93<br>4.3.1 标准的SQL模式匹配 93<br>4.3.2 扩展正则表达式模式匹配 94<br>4.3.3 总结 96<br>4.4 深入SELECT的查询功能 96<br>4.4.1 列和表的别名 96<br>4.4.1.1列的别名 96<br>4.4.1.2 在子句中使用列的别名 98<br>4.4.1.3表的别名 98<br>4.4.2 取出互不相同的记录 99<br>4.4.3 NULL值的问题 100<br>4.4.4 大小写敏感性 102<br>4.4.5 检索语句与多个表的连接 102<br>4.4.5.1 全连接 103<br>4.4.5.2 左连接 105<br>4.4.6 总结 108<br>4.5 索引属性 108<br>4.5.1 索引的特点 108<br>4.5.2 用Alter Table语句创建与删除索引 109<br>4.5.3 用CREATE\DROP INDEX创建索引 110<br>4.5.4 在创建表指定索引 111<br>4.5.5 总结 113<br>第五章 数据库的备份与恢复 114<br>5.1 数据库目录 115<br>5.1.1 数据目录的位置 115<br>5.1.2 数据库的表示法 116<br>5.1.3 数据库表的表示法 117<br>5.1.4 MySQL的状态文件 118<br>5.1.5 总结 120<br>5.2 重定位数据库目录的内容 120<br>5.2.3 重定位方法 120<br>5.2.1 重定位数据目录 121<br>5.2.2 重定位数据库 121<br>5.2.3 重定位数据库表 122<br>5.2.4 重定位状态文件 122<br>5.2.5 总结 123<br>5.3 备份和恢复数据表的方法 123<br>5.3.1 使用SQL语句备份和恢复 123<br>5.3.2使用mysqlimport恢复数据 125<br>5.3.3 使用mysqldump备份数据 126<br>5.3.4 用直接拷贝的方法备份恢复 129<br>5.3.5 总结 129<br>5.4 使用更新日志文件 130<br>5.4.1 启用日志 130<br>5.4.2 重写日志 130<br>5.4.3 恢复日志内容 130<br>5.4.4 总结 131<br>5.5 使用MYSQL内建复制功能 131<br>5.5.1 配置主服务器 131<br>5.5.2 配置从服务器 132<br>5.5.3 创建相互的主从关系 133<br>5.5.4 总结 133<br>5.5 总结:备份恢复数据的一般步骤 133<br>第六章 数据库的维护与修复 136<br>6.1 数据库表的检查、修复与优化 137<br>6.1.1 数据库表的维护工具 137<br>6.1.2 检查数据库表 138<br>6.1.3 修复数据库表 139<br>6.1.4优化数据库表 140<br>6.1.5指定维护过程中使用的内存 141<br>6.1.6总结 141<br>6.2 避免与 MYSQL 服务器交互作用 142<br>6.2.1锁定表的的方法 142<br>6.2.2 检查表的锁定协议 143<br>6.2.3 修复表的锁定协议 143<br>6.2.4 总结 144<br>6.3日志文件维护 144<br>6.3.1如何使用新的更新日志 144<br>6.3.2如何使用新的常规日志 145<br>6.3.3 总结 145<br>6.4 建立日常维护规范 145<br>6.4.1 建立一个数据库表维护规范 145<br>6.4.2 创建一个适用于定期维护的脚本 145<br>6.4.3 在unix中用cron定期检查表 146<br>6.3.4 在系统启动期间检查表 147<br>6.3.5 总结 148<br>第七章 数据库安全 149<br>7.1 MYSQL的权限系统 150<br>7.1.1授权表的结构 150<br>7.1.1.1授权表user、db和host的结构和作用 150<br>7.1.1.2授权表tables_priv和columns_priv的结构和作用 151<br>7.1.2用户的权限 152<br>7.1.2.1数据库和表的权限 152<br>7.1.2.2管理权限 153<br>7.1.3授权表列的内容 153<br>7.1.3.1作用域列内容 153<br>7.1.3.2授权表User、Db和Host的权限列的内容 155<br>7.1.3.3授权表tables_priv和columns_priv的权限列的内容 155<br>7.1.4权限系统工作原理 155<br>7.1.4.1权限系统工作的一般过程 155<br>7.1.4.2存取控制, 阶段1:连接证实 156<br>7.1.4.3存取控制,阶段2:请求证实 159<br>7.1.5 总结 161<br>7.2 设置用户与并授权 162<br>7.2.1使用SHOW GRANTS语句显示用户的授权 162<br>7.2.2 使用GRANT语句创建用户并授权 162<br>7.2.2.1 GRANT语句的语法 162<br>7.2.2.2创建用户并授权的实例 164<br>7.2.3 直接修改授权表创建用户并授权 164<br>7.2.4 总结 165<br>7.3 撤销用户与授权 165<br>7.3.1 使用REVOKE语句撤销授权 165<br>7.3.2 直接修改授权表撤销用户或授权 166<br>7.3.3 总结 167<br>7.4 设置密码 167<br>7.4.1 使用myadmin实用程序 167<br>7.4.2使用语句SET PASSWORD 168<br>7.4.3 直接修改授权表 168<br>7.4.4 重新设置一个遗忘的root口令 168<br>7.4.5 总结 169<br>7.5 权限修改何生效 169<br>7.5.1 服务器重新启动的情况 170<br>7.5.2 被服务器立即应用的情况 170<br>7.5.3 直接修改授权表的情况 170<br>7.5.4 对现有客户连接的影响情况 170<br>7.5.5 总结 170<br>7.6 授权原则 170<br>7.6.1 只有root用户拥有授权表的改写权 170<br>7.6.2 关于用户、口令及主机的设置 171<br>7.6.3 授予用户合适的权限 171<br>7.6.4 MySQL权限系统无法完成的任务 173<br>7.6.5 总结 173<br>7.7 MYSQL的其它安全问题 173<br>7.7.1 不在客户机的命令行上提供密码 173<br>1可以在命令行上提供密码 173<br>7.7.2 使用SSH加密客户机连接 174<br>7.7.3不要使用Unix的root用户运行MySQL守护进程 174<br>7.7.4数据库目录的安全 174<br>7.7.4.1可能的安全漏洞 174<br>7.7.4.2在Unix设置合适的数据库目录权限 175<br>7.7.4.3在NT系统中设置合适的数据库目录权限 175<br>7.7.5影响安全的mysqld选项 175<br>7.7.6 总结 176<br>第八章 数据库优化 177<br>8.1 索引的使用 178<br>8.1.1索引对单个表查询的影响 178<br>8.1.2索引对多个表查询的影响 180<br>8.1.3多列索引对查询的影响 181<br>8.1.4索引的作用 182<br>8.1.5 索引的弊端 182<br>8.1.6 选择索引的准则 183<br>8.1.7 总结 184<br>8.2 数据类型的问题 184<br>8.2.1 有助于效率的类型选择 184<br>8.2.2 有关BLOB和TEXT类型 185<br>8.2.3 使用ANALYSE过程检查表列 186<br>8.2.3 总结 187<br>8.3 SQL查询的优化 187<br>8.3.1 使用EXPLAIN语句检查SQL语句 187<br>8.3.2 SELECT 查询的速度 188<br>8.3.2.1 MySQL怎样优化WHERE子句 188<br>8.3.2.2 MySQL怎样优化LEFT JOIN 190<br>8.3.2.3 MySQL怎样优化LIMIT 190<br>8.3.4 记录转载和修改的速度 191<br>8.3.4.1 INSERT查询的速度 191<br>8.3.4.2 UPDATE查询的速度 193<br>8.3.4.3 DELETE查询的速度 193<br>8.3.4索引对有效装载数据的影响 193<br>8.3.5 总结 194<br>8.4 数据库表的处理 194<br>8.4.1 选择一种表类型 194<br>8.4.1.1 静态(定长)表的特点 195<br>8.4.1.2 动态表的特点 196<br>8.4.1.3 压缩表的特点 196<br>8.4.1.4 内存表的特点 197<br>8.4.2 数据库表的数量的问题 197<br>8.4.3 数据库表级锁定的问题 198<br>1、对此一个主要的问题如下: 198<br>2、INSERT DELAYED 在客户机方的作用 199<br>8.4.4 对表进行优化 200<br>8.4.5 总结 201<br>8.5 服务器级优化 201<br>8.5.1 磁盘问题 201<br>8.5.2硬件问题 202<br>8.5.3 服务器参数的选择 202<br>8.5.4编译和链接怎样影响MySQL的速度 203<br>8.5.5 总结 203<br>思考题答案 206<br>附录一 MYSQL 语言参考 217<br>1.1 数据类型参考:怎么写字符串和数字 217<br>1.1.1 字符串 217<br>1.1.2 数字 219<br>1.1.3 十六进制值 219<br>1.1.4 NULL值 219<br>1.1.5 数据库、表、索引、列和别名的命名 220<br>1.1.5.1 名字的大小写敏感性 221<br>1.2 用户变量 222<br>1.3 列类型 222<br>1.3.1 列类型存储需求 225<br>数字类型 226<br>日期和间类型 226<br>串类型 226<br>1.3.2 数字类型 227<br>1.3.3 日期和间类型 229<br>1.3.3.1 Y2K问题和日期类型 230<br>1.3.3.2 DATETIME, DATE和TIMESTAMP类型 230<br>1.3.3.3 TIME类型 233<br>1.3.3.4 YEAR类型 234<br>1.3.4 字符串类型 234<br>1.3.4.1 CHAR和VARCHAR类型 234<br>1.3.4.2 BLOB和TEXT类型 235<br>1.3.4.3 ENUM类型 236<br>1.3.4.4 SET类型 237<br>1.3.5 为列选择正确的类型 238<br>1.3.6 列索引 238<br>1.3.7 多列索引 239<br>1.3.8 使用来自其他数据库引擎的列类型 239<br>1.4 用在SELECT和WHERE子句中的函数 240<br>1.4.1 分组函数 240<br>1.4.2 常用的算术操作 241<br>1.4.3 位函数 242<br>1.4.4 逻辑运算 242<br>1.4.5 比较运算符 243<br>1.4.6 字符串比较函数 246<br>1.4.7 类型转换运算符 248<br>1.4.8 控制流函数 248<br>1.4.9 数学函数 249<br>1.4.10 字符串函数 255<br>1.4.11 日期和间函数 262<br>1.4.12 其他函数 269<br>1.4.13 与GROUP BY子句一起使用的函数 272<br>1.5 CREATE DATABASE句法 274<br>1.6 DROP DATABASE句法 274<br>1.7 CREATE TABLE句法 274<br>1.1.1 隐含的列说明改变 279<br>1.8 ALTER TABLE句法 280<br>1.9 OPTIMIZE TABLE句法 282<br>1.10 DROP TABLE句法 283<br>1.11 DELETE句法 283<br>1.12 SELECT句法 284<br>1.13 JOIN句法 286<br>1.14 INSERT句法 287<br>1.15 REPLACE句法 290<br>1.16 LOAD DATA INFILE句法 291<br>1.17 UPDATE句法 296<br>1.18 USE句法 297<br>1.20 KILL句法 298<br>1.22 EXPLAIN句法(得到关于SELECT的信息) 303<br>1.23 DESCRIBE句法 (得到列的信息) 307<br>1.24 LOCK TABLES/UNLOCK TABLES句法 308<br>1.25 SET OPTION句法 309<br>1.26 GRANT和REVOKE句法 310<br>1.27 CREATE INDEX句法 313<br>1.29 注释句法 314<br>1.30 CREATE FUNCTION/DROP FUNCTION句法 315<br> <br>2.1 各种MYSQL程序概述 318<br>myisamchk 318<br>make_binary_release 318<br>msql2mysql 318<br>mysql 318<br>mysqlaccess 319<br>mysqladmin 319<br>mysqlbug 319<br>mysqld 319<br>mysqldump 319<br>mysqlimport 319<br>mysqlshow 319<br>mysql_install_db 319<br>replace 319<br>safe_mysqld 319<br>2.2 MYSQLADMIN 319<br>2.3 MYSQLDUMP 320<br>2.4 MYSQLIMPORT 323<br>2.5 MYISAMPACK 324<br>2.6 MYISAMCHK 332<br><br><br>
内容提要 -------------------------------------------------------------------------------- 本书全面深入地介绍了MySQL的功能,主要内容包括MySQL、PHP、Apache、Perl等组件的安装与功能简介,mysql等一些重要系统管理工具和用户操作界面的使用,MySQL数据库系统设计的基础知识与用不同语言设计MySQL数据库的过程,以及SQL语法、工具、选项、API应用指南,最大限度地帮助读者更快地学习和掌握MySQL数据库系统的设计和使用。本书覆盖了MySQL 5.0,讨论了新的程序设计接口(如PHP 5里的mysqli)和新的系统管理工具。   本书是MySQL数据库管理员和开发人员的必备参考书。 目录 -------------------------------------------------------------------------------- 第一部分 入门  第1章 什么是MySQL   1.1 什么是数据库   1.2 MySQL   1.3 MySQL的不足   1.4 MySQL的版本编号   1.5 MySQL的许可证   1.6 MySQL软件的替代品   1.7 小结  第2章 测试环境   2.1 是Windows还是UNIX/Linux   2.2 在Windows系统上安装MySQL和相关软件   2.3 在SUSE Linux 9.3系统上安装MySQL和相关软件   2.4 在Red Hat Enterprise Linux 4系统上安装MySQL和相关软件   2.5 编译MySQL软件的开发者版本(Linux)   2.6 配置Apache   2.7 配置PHP   2.8 配置MySQL  第3章 初级案例研究:MySQL+PHP   3.1 概述   3.2 数据库的开发   3.3 调查问卷   3.4 问卷调查结果的处理和显示   3.5 改进意见 第二部分 管理工具和用户操作界面  第4章 mysqlmysqladmin和mysqldump   4.1 mysql   4.2 mysqladmin   4.3 mysqldump  第5章 MySQL Administrator和MySQL Query Browser   5.1 安装   5.2 与MySQL服务器建立连接   5.3 MySQL Administrator   5.4 MySQL Query Browser  第6章 phpMyAdmin   6.1 phpMyAdmin的安装与配置   6.2 用户管理,保护MySQL   6.3 创建和编辑数据库   6.4 查看、插入和编辑数据   6.5 执行SQL命令   6.6 导入和导出   6.7 服务器管理   6.8 辅助功能  第7章 Microsoft Office和OpenOffice/StarOffice   7.1 安装Connector/ODBC   7.2 Microsoft Access   7.3 Microsoft Excel   7.4 安装Connector/J   7.5 OpenOffice/StarOffice Base   7.6 OpenOffice/StarOffice的Data Source视图 第三部分 基础知识  第8章 数据库设计概论   8.1 参考读物   8.2 数据表类型   8.3 MySQL数据类型   8.4 数据库设计技巧   8.5 规范化   8.6 层次关系的处理   8.7 关系   8.8 主键和外键   8.9 索引   8.10 视图   8.11 示例数据库mylibrary(图书管理)   8.12 示例数据库myforum(网上论坛)   8.13 示例数据库exceptions(用于特殊情况的测试)  第9章 SQL语言入门   9.1 简介   9.2 简单查询(SELECT)   9.3 对查询结果进行排序(ORDER BY)   9.4 筛选数据记录(WHERE,HAVING)   9.5 涉及多个数据表的关联查询(LEFT/RIGHT JOIN)   9.6 合并查询结果(UNION)   9.7 分组查询,统计函数(GROUP BY)   9.8 修改数据(INSERT、UPDATE和DELETE)   9.9 创建数据表、数据库和索引  第10章 SQL解决方案   1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值