栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MySQL笔记

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MySQL笔记

命令 登录mysql
$ mysql -u用户名 -p密码
连接到远程主机上的MYSQL:
$ mysql -h远程主机ip -u用户名 -p
推出mysql:
mysql> exit (回车)

如果连接的是另一台机器,加参数 -h机器ip

查看版本:1.登录时查看。

2.系统函数

mysql> select version();

3.status命令

mysql> status

增加新用户
mysql->create user 'user1'@'localhost' identified by 'password1';

user1用户名 localhost本地登录,换成指定ip,或者%任何ip都可以登录 password1密码

授权
grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';

1.GRANT命令说明:

priveleges(权限列表),可以是all priveleges, 表示所有权限,也可以是select、update等权限,多个权限的名词,相互之间用逗号分开。

on用来指定权限针对哪些库和表。. 中前面的号用来指定数据库名,后面的号用来指定表名。

to 表示将权限赋予某个用户, 如 jack@‘localhost’ 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是 在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

identified by指定用户的登录密码,该项可以省略。

WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。

备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。

全局管理权限:
FILE: 在MySQL服务器上读写文件。
PROCESS: 显示或杀死属于其它用户的服务线程。
RELOAD: 重载访问控制表,刷新日志等。
SHUTDOWN: 关闭MySQL服务。
数据库/数据表/数据列权限:
ALTER: 修改已存在的数据表(例如增加/删除列)和索引。
CREATE: 建立新的数据库或数据表。
DELETE: 删除表的记录。
DROP: 删除数据表或数据库。
INDEX: 建立或删除索引。
INSERT: 增加表的记录。
SELECT: 显示/搜索表的记录。
UPDATE: 修改表中已存在的记录。
特别的权限:
ALL: 允许做任何事(和root一样)。
USAGE: 只允许登录–其它什么也不允许做。

2.授权原则说明:

权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

a、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。

b、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

c、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

d、为每个用户设置满足密码复杂度的密码。

e、定期清理不需要的用户。回收权限或者删除用户。

eg:

   
  grant all privileges on `test`.* to 'test'@'%' ;
  
  grant all privileges on `test`.* to 'test'@'localhost';   
   grant select on test.* to 'user1'@'localhost';  
   grant insert on test.* to 'user1'@'localhost'; 
   grant delete on test.* to 'user1'@'localhost'; 
   grant update on test.* to 'user1'@'localhost'; 
  flush privileges; 

(IDENTIFIED BY ‘PASSWORD’; 会报错,不知道为啥,可能是版本原因。)

删除用户

drop user ‘username’@‘host’

如果提示没有权限,授权:grant system_user on . to ‘root’;

更改用户密码:

set password for username = Password(‘newpassword’);

不写用户时,改的是自己的。

操作数据库

登录到mysql中,然后在mysql的提示符下运行下列命令,每个命令以分号结束。

1、 显示数据库列表。

show databases;

缺省有两个数据库:mysql和test。 mysql库存放着mysql的系统和用户权限信息,我们改密码和新增用户,实际上就是对这个库进行操作。

2、 显示库中的数据表:

use mysql;

show tables;

3、 显示数据表的结构:

describe 表名;

4、 建库与删库:

create database 库名;

drop database 库名;

5、 建表:

use 库名;

create table 表名(字段列表);

drop table 表名;

eg:

CREATE TABLE student(
  id INT PRIMARY KEY AUTO_INCREMENT COMMENT '学号',
  name VARCHAr(200) COMMENT '姓名',
  age    int COMMENT '年龄'
) COMMENT='学生信息';
insert into test_table1 (name,age) values ('lilei',29);
导入导出 导出
导出数据结构以及数据的命令(-u和root要分开):
$ mysqldump -u root -p dbName > 想要导出的目录
例如:mysqldump -u root -p dev_sec_ops_dev > /etc/mysql/sql/backup/20211223_full_back.sql

导出某库的某张表:
$ mysqldump -u root -p dbName tablename > 想要导出的目录
导出函数和存储过程 (-ntd 表示存储过程 -R 表示函数):
$ mysqldump -u root -p -ntd -R dbName > 想要导出的目录

只导出数据库结构,>不带数据<:
$ mysqldump -u root -p -d dbName > sqlFilePath
-d : 只备份结构,不备份数据。也可以使用”–no-data”代替”-d”,效果一样。
导入
导入备份的数据结构以及数据:
mysql> source /目录/文件.sql

有问题啊,为什么导不进去?
$ mysql -u root -p dbName < 导出时的sql文件所在路径
例如:mysql -u root -p test < G:mysql-8.0.12-winx64dump.sql
导入某张表(先use数据库):

函数和存储过程导入之前需要先
设置 set GLOBAL log_bin_trust_function_creators = 1;

函数和存储过程导入

例如:mysql -u root -p test < G:mysql-8.0.12-winx64fun.sql

mysql服务启动和停止
net stop mysql
net start mysql
用文本方式将数据装入一个数据库表

如果一条一条地输入,很麻烦。我们可以用文本文件的方式将所有记录加入你的数据库表中。创建一个文本文件“mysql.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以在CREATE TABLE语句中列出的列次序给出,例如:

(这有个tab)aa    bb    cc

注意:1.需要开启加载本地文件功能

客户端,登录mysql时:

$ mysql --local-infile=1 -uroot -p

服务端,设置加载功能:

mysql> set global local_infile = 1;

2.txt文件自增主键不必设。

使用下面命令将文本文件“mytable.txt”装载到mytable表中:

mysql> LOAD DATA LOCAL INFILE "mytable.txt" INTO TABLE pet;
操作表

创建临时表

create temporary table tablename(name varchar(10));

注意,show tables;并不能查到临时表,但是临时表可以增删改查,删除表;本次连接结束后,临时表会被删除。

创建表是先判断表是否存在
create table if not exists students(……);

从已经有的表中复制表的结构(不包括索引)
create table newtable select * from oldtable where 1<>1;

但这种不好,复制不了主键和索引,

推荐使用(不包括数据)

create table newtable like oldtable;

然后插入数据 insert into newtable selet * from oldtable;

复制表(结构和数据,不包括索引)
create table newtable select * from oldtable;

对表重新命名
alter table newtable rename as oldtable;

创建索引
table table1 add index ind_id (id);
create index ind_id on table1 (id);
create unique index ind_id on table1 (id);//建立唯一性索引

删除索引
  drop index idx_id on table1;
  alter table table1 drop index ind_id;

联合字符或者多个列(将列id与":“和列name和”="连接)
  select concat(id,‘:’,name,‘=’) from students;
  
limit(选出10到20条)<第一个记录集的编号是0>
  select * from students order by id limit 9,10;

查看建表语句:

SHOW CREATE TABLE tbl_name
优化

MySQL会使用索引的操作符号
  <,<=,>=,>,=,between,in,不带%或者_开头的like

分析索引效率
  方法:在一般的SQL语句前加上explain;

分析结果的含义:
  1)table:表名;
  2)type:连接的类型,(ALL/Range/Ref)。其中ref是最理想的;
  3)possible_keys:查询可以利用的索引名;
  4)key:实际使用的索引;
  5)key_len:索引中被使用部分的长度(字节);
  6)ref:显示列名字或者"const"(不明白什么意思);
  7)rows:显示MySQL认为在找到正确结果之前必须扫描的行数;
  8)extra:MySQL的建议;

使用optimize table
  对于经常修改的表,容易产生碎片,使在查询数据库时必须读取更多的磁盘块,降低查询性能。具有可变长的表都存在磁盘碎片问题,这个问题对blob数据类型更为突出,因为其尺寸变化非常大。可以通过使用optimize table来整理碎片,保证数据库性能不下降,优化那些受碎片影响的数据表。 optimize table可以用于MyISAM和BDB类型的数据表。实际上任何碎片整理方法都是用mysqldump来转存数据表,然后使用转存后的文件并重新建数据表;

日志

查看是否启用了日志mysql>show variables like ‘log_%’;

查看当前的日志mysql> show master status;

日志类型:

错误日志: -log-err

查询日志: -log

慢查询日志: -log-slow-queries

更新日志: -log-update

二进制日志: -log-bin

默认存放位置 log_bin_basename=/var/lib/mysql

查看字符集

show variables like ‘%char%’;

临时设置客户端的字符集

mysql> SET character_set_client = x;
mysql> SET character_set_results = x;
mysql> SET character_set_connection = x;

DESC 表名 --查看表结构

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号