1.1 启动、停止 MySQL 服务器
【方式1】图形化界面方式操作。Windows + R 快捷键调出如下窗口,并输入命令:services.msc,回车,打开 Windows 服务管理器,在服务器的列表中找到 MySQL 服务并右键单击,在弹出的快捷菜单中,完成 MySQL 服务的各种操作(启动、重新启动、停止、暂停和恢复)如下图所示:
【方式2】在命令提示符下启动、停止MySQL服务器。命令如下:
-- 你安装的什么版本的数据库后面就写什么,笔者安装的是mysql80
net start mysql80 --启用MySQL服务器
net stop mysql80 --停止MySQL服务器
【示例1】连接mysql服务器。password表示你安装mysql数据库时设置的密码。命令如下:
\> mysql -uroot -h127.0.0.1 -ppassword
\>mysql -uroot -h127.0.0.1 -pmysql
注意:在连接MySQL服务器时,MySQL服务器所在地址(如127.0.0.1)可以省略不写。另外在通过 -p 参数指定密码时,参数 -p 和密码之间不要写空格,即直接在 -p 的后面写上密码,输入完命令语句后,按Enter键即可连接MySQL服务器。或者输入完-p之后,按Enter键再输入密码(以加密的方式显示),然后按Enter键即可成功连接MySQL服务器。如下图所示:
【示例2】断开MySQL服务器。在MySQL提示符下输入“exit”或者“quit”命令断开MySQL连接。格式如下:
mysql> quit;
mysql> exit; --两种方式都可
2.1 创建数据库 语法:CREATE DATABASE 数据库名;
【示例1】创建名称为test的数据库。具体代码如下:
mysql> CREATE DATABASE test;
运行效果如下图所示:
【示例2】其他命令创建数据库。具体代码如下:
mysql> CREATE SCHEMA db_test; --使用SCHEMA创建数据库
mysql> CREATE DATABASE db_test_gbk CHARACTER SET=GBK; --创建指定字符集的数据库
mysql> CREATE DATABASE db_test_utf8 CHARSET=utf8;
--创建数据库前判断是否存在同名数据库。在MySQL中,不允许同一系统中存在两个相同名称的数据库
mysql> CREATE DATABASE IF NOT EXISTS db_library;
2.2 查看数据库语法:SHOW DATABASES;
2.3 选择数据库:USE 数据库名;
--选择名称为db_library的数据库
mysql> USE db_library;
运行效果如下图所示:
2.4 修改数据库:ALTER DATABASE;(了解)
--修改上面创建的数据库db_test_gbk
mysql> ALTER DATABASE db_test_gbk
-> DEFAULT CHARACTER SET utf8
-> DEFAULT COLLATE utf8_general_ci;
2.5 删除数据库:DROP DATABASE 数据库名;
--删除名称为db_test_gbk的数据库
mysql> DROP DATABASE db_test_gbk;
2.6 数据库存储引擎的应用。
【示例1】查询支持的全部存储引擎。
--\G:让结果显示得更加美观
mysql> SHOW ENGINES \G;
【示例2】查询默认的存储引擎。
mysql> SHOW VARIABLES LIKE '%storage_engine%';
在 MySQL 数据库中,每一条数据都有其数据类型。MySQL 支持的数据类型,主要分成 3 类:数字类型、字符串(字符)类型、日期和时间类型。
3.1.1 数字类型总体可以分成整型和浮点型两类,详细内容如表1和表2所示:
数 据 类 型 | 取 值 范 围 | 说 明 | 单 位 |
---|---|---|---|
TINYINT | 符号值:-127~127 无符号值:0~255 | 最小的整数 | 1字节 |
BIT | 符号值:-127~127 无符号值:0~255 | 最小的整数 | 1字节 |
BOOL | 符号值:-127~127 无符号值:0~255 | 最小的整数 | 1字节 |
SMALLINT | 符号值:- 32768~32767 无符号值:0~65535 | 小型整数 | 2字节 |
MEDIUMINT | 符号值:- 8388608~8388607 无符号值:0~16777215 | 中型整数 | 3字节 |
INT | 符号值:- 2147683648~2147683647 无符号值:0~4294967295 | 标准整数 | 4字节 |
BIGINT | - 9223372036854775808~9223372036854775807 无符号:0~18446744073709551615 | 大整数 | 8字节 |
3.1.2 字符串类型可以分为 3 类:普通的文本字符串类型(CHAR和VARCHAR)、可变类型(TEXT和BLOB)和特殊类型(SET和ENUM)。它们之间都有一定的区别,取值的范围不同,应用的地方也不同。
普通的文本字符串类型,即 CHAR 和 VARCHAR 类型,CHAR 列的长度被固定为创建表所声明的长度,取值在 1~255 之间;VARCHAR 列的值是变长的字符串,取值和 CHAR 一样。下面介绍普通的文本字符串类型如下表所示:
TEXT 和 BLOB 类型。它们的大小可以改变,TEXT 类型适合存储长文本,而 BLOB 类型适合存储二进制数据,支持任何数据,例如文本、声音和图像等。下面介绍 TEXT 和 BLOB 类型,如下表所示:
数 据 类 型 | 最大长度(字节数) | 说 明 |
---|---|---|
TINYBLOB | 2^8~1(225) | 小BLOB字段 |
TINYTEXT | 2^8~1(225) | 小TEXT字段 |
BLOB | 2^16~1(65 535) | 常规BLOB字段 |
TEXT | 2^16~1(65 535) | 常规TEXT字段 |
MEDIUMBLOB | 2^24~1(16 777 215) | 中型BLOB字段 |
MEDIUMTEXT | 2^24~1(16 777 215) | 中型TEXT字段 |
LONGBLOB | 2^32~1(4 294 967 295) | 长BLOB字段 |
LONGTEXT | 2^32~1(4 294 967 295) | 长TEXT字段 |
特殊类型 SET 和 ENUM。特殊类型 SET 和 ENUM 的介绍如下表所示:
数 据 类 型 | 最大值 | 说 明 |
---|---|---|
Enum (“value1”, “value2”, …) | 65 535 | 该类型的列只可以容纳所列值之一或为NULL |
Set (“value1”, “value2”, …) | 64 | 该类型的列可以容纳一组值或为NULL |
说明:在创建表时,使用字符串类型时应遵循以下原则:
3.1.3 日期和时间数据类型
日期和时间类型包括:DATETIME、DATE、TIMESTAMP、TIME和YEAR。其中的每种类型都有其取值的范围,如赋予它一个不合法的值,将会被 0
代替。下面介绍日期和时间数据类型,如下表所示:
数 据 类 型 | 取值范围 | 说 明 |
---|---|---|
DATE | 1000-01-01 9999-12-31 | 日期,格式YYYY-MM-DD |
TIME | -838:58:59 835:59:59 | 时间,格式HH:MM:SS |
DATETIME | 1000-01-01 00:00:00 9999-12-31 23:59:59 | 日期和时间,格式YYYY-MM-DD HH:MM:SS |
TIMESTAMP | 1970-01-01 00:00:00 2037年的某个时间 | 时间标签,在处理报告时使用显示格式取决于M的值 |
YEAR | 1901-2155 | 年份可指定两位数字和四位数字的格式 |
创建数据表使用 CREATE TABLE语 句。语法如下:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 数据表名
[(create_definition,…)][table_options] [select_statement]
CREATE TABLE 语句的参数说明如下表所示:
关键字 | 说明 |
---|---|
TEMPORARY | 如果使用该关键字,表示创建一个临时表 |
IF NOT EXISTS | 该关键字用于避免表存在时MySQL报告的错误 |
create_definition | 这是表的列属性部分。MySQL要求在创建表时,表要至少包含一列 |
table_options | 表的一些特性参数 |
select_statement | SELECT语句描述部分,用它可以快速地创建表 |
下面介绍列属性 create_definition 部分,每一列定义的具体格式如下:
col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
[PRIMARY KEY ] [reference_definition]
属性 create_definition 的参数说明如下表所示:
关键字 | 说明 |
---|---|
col_name | 字段名 |
type | 字段类型 |
NOT NULL | NULL | 指出该列是否允许是空值,系统一般默认允许为空值,所以当不允许为空值时,必须使用NOT NULL |
DEFAULT default_value | 表示默认值 |
AUTO_INCREMENT | 表示是否是自动编号,每个表只能有一个AUTO_INCREMENT列,并且必须被索引 |
PRIMARY KEY | 表示是否为主键。一个表只能有一个PRIMARY KEY。如表中没有一个PRIMARY KEY,而某些应用程序需要PRIMARY KEY,MySQL将返回第一个没有任何NULL列的UNIQUE键,作为PRIMARY KEY |
reference_definition | 为字段添加注释 |
以上是创建一个数据表的一些基础知识,它看起来十分复杂,但在实际的应用中使用最基本的格式创建数据表即可,具体格式如下:
CREATE TABLE table_name(列名1 属性,列名2 属性…);
【示例1】使用 CREATE TABLE 语句在 MySQL 数据库 test 中创建一个名为 tb_bookinfo 的数据表,该表包括 id、barcode、bookname、typeid、author、ISBN、price、page、bookcase和inTime等字段。具体步骤如下。
mysql> USE test;
Database changed
mysql> CREATE TABLE tb_bookinfo(
-> barcode VARCHAR(30),
-> bookname VARCHAR(70),
-> typeid INT(10) UNSIGNED,
-> author VARCHAR(30),
-> ISBN VARCHAR(20),
-> price FLOAT(8,2),
-> page INT(10) UNSIGNED,
-> bookcase INT(10) UNSIGNED,
-> inTime DATE,
-> del TINYINT(1) DEFAULT '0',
-> id INT(11) NOT NULL);
Query OK, 0 rows affected, 6 warnings (0.05 sec)
【示例2】在MySQL数据库test中创建一个名为tb_booktype的数据表,要求使用MyISAM存储引擎。具体步骤如下。
mysql> CREATE TABLE tb_booktype(
-> id INT(10) UNSIGNED NOT NULL,
-> typename VARCHAR(30),
-> days INT UNSIGNED) ENGINE MyISAM;
Query OK, 0 rows affected, 1 warning (0.02 sec)
【示例3】在MySQL数据库test中创建一个名为tb_booktype1的数据表,要求将id字段设置为自动编号字段。在将字段为自增类型字段时,建议将其设置为主键,否则数据表将创建失败。
mysql> CREATE TABLE tb_booktype1(
-> id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-> typename VARCHAR(30),
-> days INT(10) UNSIGNED,
-> PRIMARY KEY(`id`));
Query OK, 0 rows affected, 2 warnings (0.02 sec)
【示例4】创建图书类型表,并设置其字符集为 utf8,可以使用下面的代码。
-- 如果省略了DEFAULT CHARSET属性,那么该表将沿用数据库字符集的值,即my.ini文件中指定的default-character-set变量的值。
mysql> CREATE TABLE tb_booktype1(
-> id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
-> typename VARCHAR(30),
-> days INT(10) UNSIGNED,
-> PRIMARY KEY(`id`)) DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 3 warnings (0.03 sec)
【示例5】复制表结构。
--在数据库test中创建一份数据表tb_bookinfo的拷贝tb_bookinfobak
USE test;
--向数据表tb_bookinfo中插入一条数据
INSERT INTO tb_bookinfo VALUES ('9787115418425','Java Web程序设计慕课版',3,'清华出版社',
'115',49.80,350,1,'2017-02-04',0,1);
--1.数据表tb_bookinfo和tb_bookinfobak的表结构是一样的,但是在复制表时,并没有复制表中的数据
CREATE TABLE tb_bookinfobak LIKE tb_bookinfo;
--2.如果在复制数据表时,想要同时复制其中的内容,那么需要使用下面的代码来实现
CREATE TABLE tb_bookinfobak1 AS SELECT * FROM tb_bookinfo;
--3.如果想要复制一下表结构和数据都完全一样的数据表,那么需要应用下面的两条语句实现。
CREATE TABLE tb_bookinfobak1 LIKE tb_bookinfo;
INSERT INTO tb_bookinfobak1 SELECT * FROM tb_bookinfo;
【示例6】修改字段。
--1.在为数据表tb_bookinfobak中添加一个translator字段,
--类型为varchar(30),not null,将字段inTime的类型由date改为DATETIME(6)
ALTER TABLE tb_bookinfobak ADD translator VARCHAR(30) NOT NULL, MODIFY inTime DATETIME(6);
--修改数据表结构后,可以通过语句desc tb_bookinfobak;查看整个表的结构,以确认是否修改成功。
--通过alter修改表列,其前提是必须将表中数据全部删除,然后才可以修改表列。
总结:修改表结构使用 ALTER TABLE 语句。修改表结构指增加或者删除字段、修改字段名称或者字段类型、设置取消主键外键、设置取消索引以及修改表的注释等。语法如下:
Alter[IGNORE] TABLE 数据表名 alter_spec[,alter_spec]…
-- 当指定IGNORE时,如果出现重复关键的行,则只执行一行,其他重复的行被删除。
其中,alter_spec 子句定义要修改的内容,其语法如下:
alter_specification:
ADD [COLUMN] create_definition [FIRST | AFTER column_name ] --添加新字段
| ADD INDEX [index_name] (index_col_name,...) --添加索引名称
| ADD PRIMARY KEY (index_col_name,...) --添加主键名称
| ADD UNIQUE [index_name] (index_col_name,...) --添加唯一索引
| ALTER [COLUMN] col_name {
SET DEFAULT literal | DROP DEFAULT} --修改字段名称
| CHANGE [COLUMN] old_col_name create_definition --修改字段类型
| MODIFY [COLUMN] create_definition --修改子句定义字段
| DROP [COLUMN] col_name --删除字段名称
| DROP PRIMARY KEY --删除主键名称
| DROP INDEX index_name --删除索引名称
| RENAME [AS] new_tbl_name --更改表名
| table_options
ALTER TABLE 语句允许指定多个动作,其动作间使用逗号分隔,每个动作表示对表的一个修改。
【示例7】修改约束条件。
--1.添加约束
-- Alter TABLE 数据表名 ADD CONSTRAINT 约束名 约束类型 (字段名)
-- 为数据表tb_bookinfo添加主键约束,可以使用下面的代码。
ALTER TABLE tb_bookinfo ADD CONSTRAINT amoprimary PRIMARY KEY(id);
--2.删除约束
--删除主键约束:ALTER TABLE 表名 DROP PRIMARY KEY
ALTER TABLE tb_bookinfo DROP PRIMARY KEY;
--删除外键约束:ALTER TABLE 表名 DROP FOREIGN KEY 约束名
--删除唯一约束:ALTER TABLE 表名 DROP INDEX 唯一索引名
其中,MySQL 支持的约束类型如下表所示:
约束类型 | 说明 |
---|---|
PRIMARY KEY | 主键约束 |
DEFAULT | 默认值约束 |
UNIQUE KEY | 唯一约束 |
NOT NULL | 非空约束 |
FOREIGN KEY | 外键约束 |
【示例8】修改表的其他选项。
--1.修改表的存储引擎 ALTER TABLE 表名 ENGINE=新的存储引擎类型
--修改数据表tb_bookinfo的存储引擎为MyISAM
ALTER TABLE tb_bookinfo ENGINE=MyISAM;
--2.修改表的字符集:ALTER TABLE 表名 DEFAULT CHARSET=新的字符集
--修改数据表tb_bookinfo的字符集为GBK
ALTER TABLE tb_bookinfo DEFAULT CHARSET=GBK;
--3.修改表的自增类型字段的初始值:ALTER TABLE 表名 AUTO_INCREMENT==新的初始值
--修改数据表tb_bookinfo的自增类型字段的初始值为100
ALTER TABLE tb_bookinfo AUTO_INCREMENT=100;
【示例9】修改表名。RENAME TABLE 数据表名1 To 数据表名2。
--该语句可以同时对多个数据表进行重命名,多个表之间以逗号“,”分隔。
--图书信息表的副本tb_bookinfobak重命名为tb_books
RENAME TABLE tb_bookinfobak TO tb_books;
【示例10】删除表。DROP TABLE 数据表名;
-- 1.删除重命名后的图书信息表的副本tb_books
DROP TABLE tb_books;
--2.在删除数据表的过程中,删除一个不存在的表将会产生错误,如果在删除语句中加入IF EXISTS关键字就不会出错了
-- DROP TABLE IF EXISTS 数据表名;
DROP TABLE IF EXISTS tb_books;
【示例11】查看表基本结构语句。DESC(DESCRIBE) 表名。
--使用DESC查看tb_bookinfo的表结构
DESC tb_bookinfo;
【示例12】定义主键约束、非空约束、CHECK约束。
--创建学生信息表tb_student,限制其age字段的值只能是7-18之间(不包括18)的数
mysql> CREATE TABLE tb_student(
-> id INT AUTO_INCREMENT,
-> name VARCHAR(30) NOT NULL,
-> sex VARCHAR(2),
-> age INT NOT NULL CHECK(age>6 and age<18),
-> remark VARCHAR(100),
-> PRIMARY KEY(id));
Query OK, 0 rows affected (0.06 sec)
打开 Windows 命令行,输入登录用户名和密码。
创建数据库 company。
创建表 offices。
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|
officeCode | INT(10) | 是 | 否 | 是 | 是 | 否 |
city | INT(11) | 否 | 否 | 是 | 否 | 否 |
address | VARCHAR(50) | 否 | 否 | 否 | 否 | 否 |
country | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
postalCode | VARCHAR(25) | 否 | 否 | 否 | 是 | 否 |
创建表 employees。
字段名 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|
employeeNumber | INT(11) | 是 | 否 | 是 | 是 | 是 |
lastName | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
firstName | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
mobile | VARCHAR(25) | 否 | 否 | 否 | 是 | 否 |
officeCode | VARCHAR(10) | 否 | 是 | 是 | 否 | 否 |
jobTitle | VARCHAR(50) | 否 | 否 | 是 | 否 | 否 |
birth | DATETIME | 否 | 否 | 是 | 否 | 否 |
note | VARCHAR(255) | 否 | 否 | 否 | 否 | 否 |
sex | VARCHAR(5) | 否 | 否 | 否 | 否 | 否 |
查看数据库 company 中所有的表。
使用 DESC 分别查看 offices 和 employees 表。
将表 employees 的 mobile 字段修改到 officeCode 字段后面。
将表 employees 的 birth 字段改名为 employee_birth。
修改 sex 字段,数据类型为 CHAR(1),非空约束。
删除字段 note。
增加字段 favoriate_activity,数据类型为 VARCHAR(100)。
删除数据表 offices。
修改表 employees 存储引擎为 MyISAM。
将表 employees 名称修改为 employees_info。