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
文章评论