mysql常用操作命令笔记

2024-02-28 213点热度 0人点赞 0条评论

MySQL是一种常用的关系型数据库管理系统,具有广泛的功能和灵活的操作。
它支持常见的操作命令,包括创建数据库、表和索引,插入/更新/删除数据,以及查询和管理数据库对象。
下述例子基于 mysql 8.0.36 版本。

安装

# ubuntu 命令行安装
apt-get update
apt install mysql-server

# docker方式安装. 下述为本地测试demo,不需要执行安全配置向导,可本地直接使用
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

安全启动配置向导

mysql_secure_installation
  • 为root用户设置密码

  • 删除匿名账号

  • 取消root用户远程登录

  • 删除test库和对test库的访问权限

  • 刷新授权表使修改生效

开启root远程访问(后续建议关闭root账号远程访问)

sudo mysql
use mysql;
 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpwd';
UPDATE user SET `Host` = '%' WHERE `User` = 'root' LIMIT 1;
flush privileges;
exit;

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
# 注意 配置文件中 有两处 bind-address,一处是被注解了,一处默认是 127.0.0.1
bind-address = 127.0.0.1 --> bind-address = 0.0.0.0

service mysql restart

创建数据库 DATABASE && 表

# 创建库 your_databases
CREATE DATABASE IF NOT EXISTS your_databases default charset utf8mb4 COLLATE utf8mb4_general_ci;

# 切换到 your_databases
use your_databases;

# 创建表 your_table
CREATE TABLE `your_table` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(32) NOT NULL COMMENT '用户名',

  `deleted` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '逻辑删除。 0:未删除;1:已删除',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB;

数据库账号&授权

grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

# 创建账号. 用于远程连接('@'%)
CREATE USER 'your_account'@'%' IDENTIFIED BY 'pwd';

# 授权 数据库 your_databases下的所有表的所有权限 给用户 your_account.(关键字 “privileges” 可以省略)
GRANT ALL privileges ON your_databases.* TO 'your_account'@'%'

# 授权 testdb 库的 orders 表的 select, insert, update, delete 权限 给用户 dba1
grant select, insert, update, delete on testdb.orders to dba1@localhost;

# 授权用户 dba2 可以查询 MySQL 中所有数据库中的表。
grant select on *.* to dba2@localhost;

# 授权用户 dba3  MySQL 中所有数据库的权限。
grant all on *.* to dba3@'localhost'

# 授权用户 dba4 可以查询 testdb 库的 orders 表的 id, se, rank 列
grant select(id, se, rank) on testdb.apache_log to dba4@localhost;

# 撤销已经赋予给 MySQL 用户权限的权限。
revoke all on *.* from dba@localhost;

# 注意: 用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,需要 WITH GRANT OPTION
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

# 修改用户登录密码
ALTER user 'test'@'%' IDENTIFIED BY 'pwd1';

# 立即刷新mysql 缓存中的数据。
flush privileges;

修改表结构命令

# 新增列命令
alter table tabName ALGORITHM=INPLACE,LOCK=NONE,
ADD COLUMN hourly_rate decimal(10,2) NOT NULL;

# 修改列命令
alter table tabName ALGORITHM=COPY,LOCK=SHARED,
Modify COLUMN `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间';

alter table tabName ALGORITHM=COPY,LOCK=SHARED,
Modify COLUMN `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间';

修改表索引命令

# PRIMARY  KEY(主键索引)
ALTER  TABLE  `table_name`  ADD  PRIMARY  KEY (  `column`  ) 

# UNIQUE(唯一索引)
ALTER  TABLE  `table_name`  ADD  UNIQUE (`column` ) 

# INDEX(普通索引)
ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column`  )

# FULLTEXT(全文索引)
ALTER  TABLE  `table_name`  ADD  FULLTEXT ( `column` )

# 多列索引
ALTER  TABLE  `table_name`  ADD  INDEX index_name (  `column1`,  `column2`,  `column3`  )

# 删除索引
ALTER TABLE tb_stu_info2 DROP INDEX height;

导出&导入

# 用文本方式将数据装入数据表中
LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE 表名;

# 导出一个数据库结构
mysqldump -u user_name -p -d --add-drop-table database_name > /opt/mydb.sql

# 导出一个表
mysqldump -u user_name -p database_name table_name > /opt/one.sql

# 导出整个数据库
mysqldump -u user_name -p123456 database_name > /opt/all.sql

# 还原全部数据库
# mysql命令行:
mysql> source /opt/all.sql
# 系统命令行: 
mysql -uroot -p123456 </opt/all.sql

# 还原单个数据库
# mysql命令行:
mysql>use mydb
mysql>source /opt/mydb.sql
# 系统命令行:
mysql -uroot -p123456 mydb </opt/mydb.sql

mylomen

本人从事 JAVA 开发10多年,将之前整理的笔记分享出来,希望能够帮助到努力的你。

文章评论