目录
配置环境
下载
本文使用Windows环境,MySQL版本使用的是8.0.39
打开官网下载MySQL社区版,点击DOWNLOADS
下拉选择MySQL Community(GPL) Downloads
选择MySQL Installer for Windows
选择一个合适的版本点击Download
选择 No thinks,just start my download
等待下载完成,双击运行安装
安装
运行安装程序后稍等一会就是这个界面
根据自身需要选择安装类型,然后next
这里选择 Excute
执行完后选择Next后再点Next
这里是MySQL配置页面,不需要去更改默认配置(这里是因为我服务器3306端口已被占用)
点击Next,这里输入Root用户密码(一定别忘记了!),点击Next到底
至此,MySQL已安装完毕
windows可以搜索打开mysql终端,如果需要直接输入mysql命令则需要配置环境变量
输入密码就可以登录mysql
登录
Mysql支持两种登录方式,即本地登录和远程登录
本地登录就是服务器在本机,使用本机连接到数据库
远程登录就是服务器不是本机,通过远程连接的方式连接到数据库
本地登录
需要用户具有本地登录权限
在终端中输入登录命令即可登录
-u是指定登录的用户名,-p输入密码
mysql -uroot -p
远程登录
需要用户具有远程登录权限
mysql -h 主机名/ip地址 -u用户名 -p 密码
-h指定登录数据库服务器的地址,可以是ip地址也可以是域名
用户管理
用户增删查
查询用户
切换到默认就有的mysql数据库,使用select语句可查询所有用户
通过select user();可以查询当前登录的用户
root就是当前登录的用户,localhost表示是本地登录
新增用户
使用 create user 命令创建新用户,user1为用户名
删除用户
使用 drop user 命令可删除用户
用户密码管理
通过set password 命令可以设置当前登录用户的密码
通过增加for指定给用户设置密码
在mysql数据库下使用select user,authentication_string password from user;命令可以查询所有用户的密码(加密了)
重命名用户
通过rename命令重命名,to前是需要重命名的用户,to后是新名
用户权限管理
赋权
使用grant命令给用户赋权
# 命令语法:
grant privileges on database.table to 'username'@'host'
privileges:
授予的权限(privileges为给用户授权权限,还要select、insert、update等,全允许用all)
database:
数据库名,授予的权限的使用数据库范围(*为所有)
table:
数据表名,授予的权限的数据库的数据表范围(*为所有)
username:
授予用户的用户名
host:
localhost为本地登录,%为远程登录
例如:给test用户赋予执行create命令的权限
mysql> grant create on *.* to 'test'@'localhost';
撤权
使用revoke命令撤销用户权限,其使用和grant命令基本一致
例如:
mysql> revoke create on *.* from 'test'@'localhost'; # 撤销test用户的create权限
查看权限
使用show grants;命令查看所用用户的权限表
通过添加for可以指定查询指定用户的权限
数据类型
数据类型是数据库存储数据的类型,指定数据类型告诉服务器这个字段是什么类型的数据
数值型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 Bytes | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 Bytes | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 Bytes | (-8 388 608,8 388 607) | (0,16 777 215) | 大整数值 |
INT或INTEGER | 4 Bytes | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 Bytes | (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 Bytes | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
DOUBLE | 8 Bytes | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
日期时间型
类型 | 大小 ( bytes) | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' | YYYY-MM-DD hh:mm:ss | 混合日期和时间值 |
TIMESTAMP | 4 | '1970-01-01 00:00:01' UTC 到 '2038-01-19 03:14:07' UTC结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYY-MM-DD hh:mm:ss | 混合日期和时间值,时间戳 |
字符串型
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255 bytes | 定长字符串 |
VARCHAR | 0-65535 bytes | 变长字符串 |
TINYBLOB | 0-255 bytes | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255 bytes | 短文本字符串 |
BLOB | 0-65535 bytes | 二进制形式的长文本数据 |
TEXT | 0-65535 bytes | 长文本数据 |
MEDIUMBLOB | 0-16777215 bytes | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16777215 bytes | 中等长度文本数据 |
LONGBLOB | 0-4294967295 bytes | 二进制形式的极大文本数据 |
LONGTEXT | 0-4294967295 bytes | 极大文本数据 |
基本语句
show显示语句
查询数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.07 sec)
查询数据表
首先要用use命令选择数据库
mysql> use mysql; --选择数据库
Database changed
mysql> show tables; --查询数据库里所有表
+------------------------------------------------------+
| Tables_in_mysql |
+------------------------------------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| replication_asynchronous_connection_failover |
| replication_asynchronous_connection_failover_managed |
| replication_group_configuration_version |
| replication_group_member_actions |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+------------------------------------------------------+
38 rows in set (0.02 sec)
其他用法
1. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称。
2. show databases; -- 显示mysql中所有数据库的名称。
3. show columns from table_name from database_name; 或show columns from database_name.table_name; -- 显示表中列名称。
4. show grants for user_name; -- 显示一个用户的权限,显示结果类似于grant 命令。
5. show index from table_name; -- 显示表的索引。
6. show status; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
7. show variables; -- 显示系统变量的名称和值。
8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
9. show table status; -- 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。
10. show privileges; -- 显示服务器所支持的不同权限。
11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
12. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。
14. show innodb status; -- 显示innoDB存储引擎的状态。
15. show logs; -- 显示BDB存储引擎的日志。
16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
17. show errors; -- 只显示最后一个执行语句所产生的错误。
18. show [storage] engines; --显示安装后的可用存储引擎和默认引擎。
create创建语句
创建数据库
create database 数据库名; -- 创建数据库
创建数据表
一样要先使用use命令选择要操作的数据库
在 MySQL 中,可以使用 CREATE TABLE 语句创建表。其语法格式为:
CREATE TABLE <表名> ([表定义选项])[表选项][分区选项];
其中,[表定义选项]的格式为:
<列名1> <类型1> [,…] <列名n> <类型n>
CREATE TABLE 命令语法比较多,其主要是由表创建定义(create-definition)、表选项(table-options)和分区选项(partition-options)所组成的。
例如 :
auto_increment表示该字段是自增,primary key表示该字段是主键,主键和自增要一起存在
创建用户
详见上文用户管理中新增用户页
drop删除语句
删除数据库
drop 数据库名;
删除数据表
drop table 数据表名;
删除用户
drop user 用户名;
insert插入数据
insert into语法:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
table_name
是你要插入数据的表的名称。column1
,column2
,column3
, ... 是表中的列名。value1
,value2
,value3
, ... 是要插入的具体数值。
如果数据是字符型或日期,必须使用单引号 ' 或者双引号 ",如: 'value1', "value1"。
例如:
select查询语句
在mysql中通用的select语法:
SELECT column1, column2, ...
FROM table_name
[WHERE condition]
[ORDER BY column_name [ASC | DESC]]
[LIMIT number];
column1
,column2
, ... 是你想要选择的列的名称,如果使用*
表示选择所有列。table_name
是你要从中查询数据的表的名称。WHERE condition
是一个可选的子句,用于指定过滤条件,只返回符合条件的行。ORDER BY column_name [ASC | DESC]
是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。LIMIT number
是一个可选的子句,用于限制返回的行数。
例如查询数据表里的所有数据:
where子句
通用语法:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
column1
,column2
, ... 是你要选择的列的名称,如果使用*
表示选择所有列。table_name
是你要从中查询数据的表的名称。WHERE condition
是用于指定过滤条件的子句。
操作符 | 描述 | 实例 |
---|---|---|
= | 等号,检测两个值是否相等,如果相等返回true | (A = B) 返回false。 |
<>, != | 不等于,检测两个值是否相等,如果不相等返回true | (A != B) 返回 true。 |
> | 大于号,检测左边的值是否大于右边的值, 如果左边的值大于右边的值返回true | (A > B) 返回false。 |
< | 小于号,检测左边的值是否小于右边的值, 如果左边的值小于右边的值返回true | (A < B) 返回 true。 |
>= | 大于等于号,检测左边的值是否大于或等于右边的值, 如果左边的值大于或等于右边的值返回true | (A >= B) 返回false。 |
<= | 小于等于号,检测左边的值是否小于或等于右边的值, 如果左边的值小于或等于右边的值返回true | (A <= B) 返回 true。 |
例如,我们要查询id=1的数据:
like子句
通常where子句用于筛选指定的记录,而like子句用于获取指定条件的的记录
如我们要获取名字是z开头的数据:
delete删除语句
语法:
DELETE FROM table_name
WHERE condition;
table_name
是你要删除数据的表的名称。WHERE condition
是一个可选的子句,用于指定删除的行。如果省略WHERE
子句,将删除表中的所有行。
例如我们删除id=1的记录:
update更新语句
update常常用于更新数据
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
table_name
是你要更新数据的表的名称。column1
,column2
, ... 是你要更新的列的名称。value1
,value2
, ... 是新的值,用于替换旧的值。WHERE condition
是一个可选的子句,用于指定更新的行。如果省略WHERE
子句,将更新表中的所有行。
例如我当前的数据是:
我要将zs的score更改为90分:
mysql> update dbtable set score = 90 where name='zs';
alter更改语句
例如我们要在name后面增加一列性别列:
mysql> alter table dbtable add sex char(1) after name;
视图
视图是基于一个或多个表的虚拟表,并不实际存储数据,而是作为一个查询的结果集存在
使用视图的好处就是可以简化复杂查询、提供额外安全层限制用户访问某些数据、还可以使数据以不同的方式呈现给用户
创建了ls_score的视图,创建后生成一个虚拟表,可充当表使用
CREATE VIEW ls_score as SELECT * from info WHERE name='ls';
SELECT * FROM ls_score;
查询所有视图
SHOW TABLE STATUS WHERE COMMENT='VIEW';
存储过程
存储过程是将一组为了完成特定功能的SQL语句集合编译并保存在数据库中核心思想是在数据库SQL语言层面上实现代码的封装与重用,从而简化外部程序的调用过程。
创建一个获取所有数据的存储过程
delimiter //
CREATE PROCEDURE GetAllData()
BEGIN
SELECT * FROM info;
END //
delimiter ;
调用存储过程
CALL GetAllData();
索引
索引类似于目录,是提高查询速度的数据结果,可以减少需要扫描的数据量
普通索引
创建普通索引
CREATE INDEX idx_score ON info(score);
唯一索引
唯一索引要求字段的值是唯一的,但可以存在多个null值
CREATE UNIQUE INDEX idx_score ON info(name);
全文索引
全文索引是特殊类型的索引,主要用于全文搜索,适合大量文本的查询
CREATE FULLTEXT INDEX idx_score ON info(name);