数据库操作
创建数据库
CREATE DATABASE '数据库名称' [库选项];
(1)’数据库名称’ 可以是字母、数字和下划线组成的任意字符串。 可选参数
(2)[库选项] 用于设置此数据库的相关特性,如字符集 CHARSET,校对集 COLLATE
为防止重名报错,可以这样写:
CREATE DATABASE IF NOT EXISTS '数据库名称' [库选项];
db.opt 文件:
default-character-set=latinl #默认字符集
default-collation=latin1_swedish_ci #默认校对集
查阅数据库
查看 mySQL 服务器下所有数据库
SHOW DATABASES
MySQL 自动安装的数据库:
information_schema:MySQL 服务器的数据字典(保存所有数据表和库的结构信息)
performance_schema:MySQL 服务器的性能字典(保存全局变量等的设置)
mysql:负责 MySQL 服务器自己需要使用的控制和管理信息,如用户权限关系等
sys:系统数据库,包括了存储过程、自定义函数等信息
查看指定数据库的创建信息
SHOW CREATE DATABASE '数据库名称';
选择数据库
USE '数据库名称';
在登录 MySQL 服务器时选择数据库:
mysql - u 用户名 - p 密码 数据库名
删除数据库
DROP DATABASE '数据库名称';
为了避免删除不存在的数据库:
DROP DATABASE IF EXISTS '数据库名称';
数据表操作
创建数据表
USE '数据库名';
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 表名
(字段名1 字段类型 [字段属性]
字段名2 字段类型 [字段属性]
字段名3 字段类型 [字段属性]
......
)[表选项]
(1) [TEMPORARY] 表示临时表,仅在当前会话中可见,并且在会话关闭时自动删除; 可选参数
(2) 字段名 指的是数据表的列名;
(3) 字段类型 设置字段中保存的数据类型,如时间日期类型等;
(4) 字段属性 指字段的某些特殊约束条件 可选参数
(5) 表选项 用于设置表的相关特性,如存储引擎(ENGINE)、字符集(CHARSET)和校对集(COLLATE)。 可选参数
使用以下代码可以省略 USE 语句
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 数据库名.表名
(字段名1 字段类型 [字段属性]
字段名2 字段类型 [字段属性]
字段名3 字段类型 [字段属性]
......
)[表选项]
查看数据表
SHOW TABLES [LIKE 匹配模式];
(1)[LIKE 匹配模式] 若不添加表示查看当前数据库中的所有数据表;若添加则按照“匹配模式”查看数据表。其中匹配模式符有两种,分别为“%”和“_”。前者表示匹配一个或多个字符,代表任意长度的字符串,长度也可以为 0,后者仅可以匹配一个字符。LIKE 后的匹配模式必须用’’包括起来。 可选参数
查看数据表相关信息
SHOW TABLE STATUS [FROM 数据库名] [LIKE 匹配模式];
结果会包含以下参数:
字段名称 | 描述 |
---|---|
Name | 数据绑定名称 |
Engine | 数据表的存储引擎 |
Version | 数据表的结构文件(如lib_user_temp.frm)版本号 |
Row_format | 记录的存储格式,Dynamic表示动态、Fixed表示固定、Compressed表示压缩、Redundant表示冗余、Compacctbioassay紧凑 |
Data_length | 数据文件的长度(MyISAM存储引擎)或为集群索引分配的内存(InnoDB存储引擎),均以为字节为单位 |
Create_time | 数据表的创建时间 |
Collation | 数据表的校对集 |
修改数据表
修改数据表的名称
语法格式1
ALTER TABLE 旧表名 RENAME [TO|AS] 新表名;
语法格式2
RENAME TABLE 旧表名1 TO 新表名1 [,旧表名2 TO 新表名2]...
修改表选项
ALTER TABLE 表名 表选项 [=] 值;
例如: ALTER TABLE my_goods CHARSET = utf8;
查看表结构
查看数据表的字段信息
语法格式1:查看所有字段的信息
{DESCRIBE|DESC} 数据表名;
语法格式2:查看指定字段的信息
{DESCRIBE|DESC} 数据表名 字段名;
结果中包含以下参数:
Field:字段名称
Type:字段的数据类型
Null:该字段是否可以为空
Key:该字段是否已设置了索引
Default:表示该字段是否有默认值
Extra:表示获取到的与该字段相关的附加信息
查看数据表的创建语句
SHOW CREATE TABLE 表名;
结果中包含以下参数:
Table:表示查询的表的名称
Create Table:表示创建该数据表的SQL语句
查看数据表的结构
语法格式1
SHOW [FULL] COLUMNS FROM 数据表名 [FROM 数据表名];
语法格式2
SHOW [FULL] COLUMNS FROM 数据库名.数据表名;
(1) 可选项FULL表示显示详细内容,在不添加的情况下查询结果与DESC结果相同;在添加FULL选项时此语句不仅可以查看到DESC语句查看的信息,还可以查看到字段的权限、COMMENT字段的注释信息等。
修改表结构
修改字段名
ALTER TABLE 数据表名 CHANGE [COLUMN] 旧字段名 新字段名 字段类型 [字段属性];
修改字段类型
ALTER TABLE 数据表名 MODIFY [COLUMN] 字段名 新类型 [字段属性];
修改字段位置
ALTER TABLE 数据表名
MODIFY [COLUMN] 字段名1 数据类型 [字段属性] [FIRST|AFTER 字段名2];
新增字段
语法格式1:新增一个字段,并可指定其位置
ALTER TABLE 数据表名
ADD [COLUMN] 新字段名 字段类型 [FIRST|AFTER 字段名]
语法格式2:同时新增多个字段
ALTER TABLE 数据表名
ADD [COLUMN] (新字段名1 字段类型1,新字段名2 字段类型2, ...)
删除字段
ALTER TABLE 数据表名 DROP [COLUMN] 字段名;
删除数据表
DROP [TEMPORARY] TABLE [IF EXISTS] 数据表1 [,数据表2]....;
数据操作
添加数据
为所有字段添加数据
INSERT [INTO] 数据表名 {VALUES | VALUE}(值1[,值2]...);
(1)[INTO] 可选项
(2)VALUES和VALUE 任选一种,通常情况下使用 VALUES
为部分字段添加数据
除了为数据表中所有字段添加数据外,还可以通过指定字段名的方式增加数据。其中指定的字段名可以是数据表中全部的字段,也可以是部分的字段。基本语法格式如下:
INSERT [INTO] 数据表名 (字段名1 [,字段名 2] ···)
{VALUES | VALUE} (值 1 [,值 2] ···);
在上述语法中,“(字段名1 [,字段名 2] ···)”字段列表中,多个字段名之间使用逗号分隔,且字段名的编写顺序可与表结构(字段位置)不同,只需保证值列表“(值 1 [,值 2] ···)”中的数据与其对应即可。未添加的数据的字段系统会自动为该字段添加默认值NULL(空的)。
除此之外,MySQL中还提供了另外一种使用INSERT语句为指定字段添加数据的方式。基本语法格式如下:
INSERT [INTO] 数据表名
SET 字段名 1 = 值 1 [,字段名 2 = 值 2]···;
例如:
INSERT INTO goods SET id = 3, name = 'Mobile phone';
一次添加多行数据
在实际开发中,向一张数据表中同时插入多条记录时,重复地书写以上INSERT指令,操作不仅繁琐,且不方便阅读。因此,可以使用MySQL提供的另外一种插入数据的语法完成多数据插入。基本语法格式如下:
INSERT [INTO] 数据表名 [(字段列表)]
{VALUES | VALUE} (值列表) [,(值列表)] ···;
在上述语法中,多个“值列表”之间使用逗号(,)分隔。其中,“字段列表”在省略时,插入的数据需严格按照数据表创建的顺序插入,否则“值列表”插入的数据仅需与字段列表中的字段相对应即可。
例如,将以上一次插入一条记录的操作修改成以下形式,完成一次添加多行数据。
mysql>INSERT INTO goods VALUES
->(1,'notebook',4998,'High cost performance'),
->(2,'笔记本',9998,'续航时间超过10个小时'),
->(3,'Mobile phone', NULL, NULL);
需注意的是,在多数据插入时,若一条数据插入失败,则整个插入语句都会失败。
查询数据
查询表中全部数据
查询数据表中所有字段的数据,可以使用星号“*”通配符代替数据表中的所有字段名,基本语法格式如下:
SELECT * FROM 数据表名;
查询表中部分字段
查询数据时,可在SELECT语句的字段列表中指定要查询的字段。基本语法格式如下:
SELECT {字段名1, 字段名2, 字段名3, ···} FROM 数据表名;
上述语法中,字段列表“字段名1, 字段名2, 字段名3, ···”中,若列出数据表中所有的字段名,则表示查询表中全部数据。
简单条件查询数据
在查询数据时,若想要查询出符合条件的相关数据记录时,可以使用WHERE实现。基本语法如下:
SELECT * | {字段名1,字段名2,字段名3,···}
FROM 数据表名 WHERE 字段名 = 值;
上述语法表示获取“字段名”等于指定“值”的数据记录,数据的内容中可以是表的部分字段或全部字段。
修改数据
修改数据是数据库中常见操作,通常用于对表中的部分记录进行修改。语法如下:
UPDATE 数据表名
SET 字段名1=值1 [, 字段名 2=值2,···]
[WHERE 条件表达式]
上述语法中,若实际使用时没有添加WHERE条件,那么表中所有对应的字段都会被修改成统一的值,因此在修改数据时,请谨慎操作。
删除数据
删除数据是指对表中存在的记录进行删除。
DELETE FROM 数据表名 [WHERE 条件表达式];
在上述语法中,“数据表名”指定要执行删除操作的表,WHERE条件为可选参数,用于设置删除的条件,满足条件的记录会被删除。
在执行修改操作和删除操作时一定要谨慎!!请务必对数据库定期备份保存!
换行、缩进与结尾分隔符
MySQL中的SQL语句可以单行或多行书写,多行书写时可以按回车键换行,每行中的SQL语句看一眼使用空格和缩进增强语句的可读性,在SQL语句完成时通常情况下使用分号(;)结尾,在命令行窗口中也可以使用”\g”结尾,效果与分号相同。另外,在命令行窗口中,还可以使用”\G”结尾,如 SHOW DATABASES\G 将显示结果以每条记录(一行数据)为一组,将所有的字段纵向排列展示。
大小写问题
MySQL的关键字在使用是不区分大小写,如 SHOW DATABASES 与 show database 都表示获取当前MySQL服务器中有哪些数据库。另外,MySQL中的所有数据库名称、数据表名称、字段名称默认情况下在Windows系统下都忽视大小写,在Linux系统下数据库与数据表名称则区分大小写,通常开发时推荐使用小写。
反引号的使用
在项目开发中,为了避免用户自定义的名称与系统中的命令(如关键字)冲突,最好使用反引号(``)包裹数据库名称、字段名称和数据表名称。
内容有中文报错问题
在MySQL中,若创建的数据表未指定字符集,则数据表及表中的字段将使用默认的字符集latinl。因此,若用户插入的数据中含有中文,则会出现错误提示。例如,向goods表中输入含有中文输入含有中文的数据,具体SQL语句及执行结果如下:
mysql>INSERT INTO goods
-> VALUES(2,`笔记本`,9998,`续航时间超过10个小时`);
ERROR 1366 (HY000): Incorrect string value:'\xB1\xCA\xBC\xC7\xB1\xBE' for column 'name' at row 1.
为了解决以上中文插入的问题,通常在创建数据表时添加表选项,设置数据表的字符集,如下所示:
CREATE TABLE goods(
字段 ...
)DEFAULT CHARSET utf8;
上述语法中,DEFAULT CHARSET表示设置字符集,utf8字符集支持世界上大多数国家的字符,通常推荐使用此字符集。
另外,对于已经添加数据的数据表,则可以通过ALTER TABLE … CHANGE/MODIFY 完成对表字段字符集的设置,在使用时需要注意它们语法不同。下面以修改goods表中name和description字段的字符集为例进行演示。具体SQL语句及执行结果如下:
mysql>ALTER TABLE goods
->MODIFY name VARCHAR(32) CHARACER SET utf-8,
->MODIFY description VARCHAR(255) CHARACTER SET utf-8;
Query OK, 1 row affected (0.02 sec)
Records:1 Duplicates:0 Warnings:0
上述SQL语句中,在同时修改多个字段时,使用逗号(,)分隔。修改完成后,可以再次向goods表中插入以上含有中文的数据,可以看到Query OK 成功插入的