一. MySQL安装
-
下载MySQL免安装版的压缩包,我用的是5.7.28版本
-
将压缩包解压,我解压到了
D:\MySql\mysql-5.7.28-winx64
下 -
配置环境变量
- 此电脑–>属性–>高级–>环境变量
- 新建一条路径,指向解压缩后的bin目录,我这里是
D:\MySql\mysql-5.7.28-winx64\bin
-
安装MySQL,打开控制台,执行命令
mysqlD install
完成安装 -
初始化data目录
- 创建新目录
D:\MySql\mysql-5.7.28-winx64\data
- 创建新目录
-
启动服务
net start mysql
,关闭服务为net stop mysql
-
登录
mysql -u<用户名>-p
回车输入密码 -
修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY "newpassword";
-
安装过程中没有遇到什么问题,只是由于MySQL默认编码不是UTF-8,之前使用JDBC连接MySQL做项目的时候会有乱码的情况出现,所以可以改一下默认字符集,具体方法图下:
- 使用
show variables like '%char%';
可以查看数据库的编码方式
修改之前我的数据库编码方式是这样的
-
在MySQL的安装目录下新建一个
my.ini
的文件,旧版本可能直接会有这个文件,只需要修改,我这个版本需要新建。编辑
my.ini
,添加以下内容,
[mysql] # 修改默认字符集为utf-8 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=MySQL安装目录 # 设置mysql数据库的数据的存放目录 datadir=MySQL安装目录\data # 允许最大连接数 max_connections=200 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 修改默认字符集为utf-8 character_set_server=utf8 # sql_mode sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
-
重启MySQL服务
quit
、net stop mysql
、net start mysql
-
重新登录MySQL并查看字符集
- 使用
至此,MySQL安装完成
二. 用户管理
-
创建用户
CREATE USER '<username>'@'<ipaddress>' IDENTFIED BY 'password';
-
修改密码
ALTER USER '<username>'@'<ipaddress>' IDENTFIED BY 'password';
-
授权
GRANT <操作名称> ON <数据库名>.<表名> TO '<username>'@'ipaddress';
-
取消授权
REVOKE<操作名称> ON <数据库名>.<表名> FROM '<username>'@'ipaddress';
三. DDL:操作数据库和表
1. 数据库相关操作
- C:创建
- 创建数据库:
CREATE DATABASE 数据库名称;
- 不存在时创建数据库:
CREATE DATABASE IF NOT EXIST 数据库名称;
- 指定字符集创建数据库:
CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称;
- 创建数据库:
- R:查询
- 查询所有数据库名称:
SHOW DATABASES;
- 查询某个数据库的字符集:查询某个数据库的创建语句:
SHOW CREATE DATABASE 数据库名称;
- 查询所有数据库名称:
- U:修改
- 修改数据库字符集:
ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
- 修改数据库字符集:
- D:删除
- 删除数据库,可能会报错:
DROP DATABASE 数据库名称;
- 如果数据库存在则删除:
DROP DATABASE IF EXISTS 数据库名称;
- 删除数据库,可能会报错:
- 使用数据库
- 使用:
USE 数据库名称;
- 查询正在使用的数据库:
SELECT DATABASES();
- 使用:
2. 表的相关操作
-
C:创建
-
语法
CREATE TABLE table_name( <列名1> <数据类型1> [约束], <列名2> <数据类型2> [约束], ...... <列名n> <数据类型n> [约束], [主键、外键约束] )[存储引擎][字符集];
-
说明
- 常用的数据类型包括
Int
double
date
datetime
timestamp
varchar
等 - 常见约束
- 非空约束
NOT NULL
,指定该列不能为空,若空则报错 - 默认值
DEFAULT <default_value>
,没有赋值时以默认值填充 - 列描述
COMMENT
,描述列的作用,但是区分于注释 - 自动填充0
ZEROFILL
,作用在无符号整型数据类型上,如果长度未达到要求则在左边补0 - 主键约束
PRIMARY KEY
,要求主键非空且不重复,主键只包含一列时可以再定义列时定义主键,否则只能再定义完所有属性之后定义。 - 自增长
AUTO_INCREMENT
,一般和主键搭配使用 - 唯一约束
UNIQUE
,允许为NULL但不能重复,可以有多个NULL - 外键约束
FOREIGN KEY
CONSTRAINT <外键名> FOREIGN KEY (主表中的属性) REFERENCES (副表名.副表主键);
- 外键的一般命名规则位
fk_主表名A_副表名B_on_副表主键bid
,它的语义为:A表在A表的bid上引用了B表的主键bid
- 非空约束
- 常用的数据类型包括
-
复制表
CREATE TABLE 表名 LIKE 被复制的表名称;
-
-
R:查询
- 查询数据库中所有的表名称:
SHOW TABLES;
- 查询一张表的结构:
DESC 表名称;
- 查询数据库中所有的表名称:
-
U:修改
- 修改表名:RENAME TO
ALTER TABLE <tablename> RENAME TO <newname>;
- 修改表的字符集
ALTER TALBE <表名> CHARACTER SET <字符集>;
- 添加一列
ALTER TABLE <表名> ADD <列名><数据类型>[约束];
- 修改列
ALTER TABLE <表名> CHANGE <旧列名> <新列名> <新数据类型> [约束];
ALTER TABLE <表名> CHANGE <列名> <新数据类型> [约束];
- 删除列
ALTER TABLE <表名> DROP <列名>;
- 清空表
DELETE FROM <表名>
- 修改表名:RENAME TO
-
D:删除
DROP TABLE <表明> [IF EXISTS];
- 注意区分
DROP
DELETE
TRUNCATE
的区别
四. DML:增删改表中的数据
-
增:insert
-
语法:
INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);
-
注意
- 列名和值要一一对应
- 如果表名后,不定义列名,则默认给所有列添加值,eg:
INSERT INTO 表名 VALUES(值1,值2,...值n);
- 除了数字类型,其他类型需要使用引号(单双都可以)引起来
-
-
删:delete
-
语法
DELETE FROM 表名 [WHERE 条件];
-
注意
- 如果不加条件,则删除表中所有记录。
- 删除所有记录
DELETE FROM 表名;
有多少条记录就会执行多少次删除操作TRUNCATE TABLE 表名;
效率更高 先删除表,然后再创建一张一样的表。
-
-
改:update
-
语法
UPDATE 表名 SET 列名1 = 值1, 列名2 = 值2,... [WHERE 条件];
-
注意
- 如果不加任何条件,则会将表中所有记录全部修改。
-
五. DQL:查询表中的记录
-
语法
SELECT 要查询的字段列表 FROM 表明列表,可以是一条查询语句的执行结果 WHERE 条件列表 GROUP BY 分组字段 HAVING 分组之后的条件 ORDER BY 排序方式 LIMIT 分页限定
- 除
SELECT
FROM
外其他都是可选的
- 除
MySQL中的数据类型
-
数字
-
整数
<类型>[(m)] [UNSIGNED] [ZEROFILL]
tinyint
8位int
32位bigint
64位
-
小数
<类型>[(M,D)] [UNSIGNED] [ZEROFILL]
,M位数字位数,D位小数点后位数
float
double
decimal
- 注意,
float
和double
是不精准的,而decimal
时精确的
-
-
字符串
char(m)
- 定长字符串,最多255个字符,m代表长度,数据不足m时,占用内存仍为m
varchar(m)
- 变长字符串,最多255个字符,m代表最大允许的长度,可以保存小于等于m个字符的字符串,占用内存小于m
vcarchar
节省空间,char
速度更快,建表时char定义在varchar之前
text
mediumtext
longtext
更长的字符串
-
时间类型
DATE
年月日TIME
时分秒YEAR
年DATETIME
年月日时分秒TIMESTAMP
年月日时分秒,如果不赋值或赋值null,默认使用系统时间赋值
-
枚举类型
-
enum
-
CREATE TABLE shirts ( name VARCHAR(40), size ENUM('x-small', 'small', 'medium', 'large', 'x-large') ); INSERT INTO shirts (name, size) VALUES ('dress shirt','large'), ('t-shirt','medium'),('polo shirt','small');
-
-
集合类型
-
set,插入时可以是set中元素的组合
-
CREATE TABLE myset (col SET('a', 'b', 'c', 'd')); INSERT INTO myset (col) VALUES ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');
-