作为前端虽然数据库接触的不多,但当使用时总记不住命令确实有点尴尬,遂做此笔记,以方便查阅。
登录登出
mysql -h localhost -u root -p //登录
QUIT // 登出
基本操作
ps: 又一次储存emoji表情时,出现了一次报错,因为UTF-8编码有可能是两个、三个、四个字节,其中Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以导致了数据插不进去。
当时的解决方式是更改了某个表的字符集
ALTER TABLE tab-name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
注释:utf8mb4的最低mysql版本支持版本为5.5.3+
数据库查看
查看所有数据库
SHOW DATABASES;
查看数据库变量
SHOW VARIABLES;
- 由于变量超多,所以使用过滤查看需要的字段:
- 查看端口:
SHOW VARIABLES LIKE 'PORT';
查看可选字符:
SHOW VARIABLES LIKE 'CHARACTER%';
character_set_client 为客户端编码方式; character_set_connection 为建立连接使用的编码; character_set_database 为数据库的编码; character_set_results 为结果集的编码; character_set_server 为数据库服务器的编码;
查看数据库数据存放路径
SHOW VARIABLES LIKE '%DATADIR%';
数据库操作
创建数据库
CREATE DATABASE name [CHARACTER SET utf8 COLLATE utf8_general_ci];
修改数据库
ALTER DATABASE name CHARACTER SET utf8;
查看创建数据库语句
SHOW CREATE DATABASE name
删除数据库
DROP DATABASE name;
使用数据库
USE database-name
显示当前选择
SELECT DATABASE();
数据表操作
创建数据表:
CREATE TABLE name ( column-name data_type, ... )
查看次数据表创建语句:
SHOW CREATE TABLE tab-name
查看次数据库中的数据表:
SHOW TABLES;
查看次数据库中的数据表:
DESC tab-name;
查看数据列:
SHOW COLUMS FROM tab-name;
插入数据:
INSERT tab-name [(column1,column2...)] VALUES (val1,val2...)
更新数据:
UPDATE tab-name SET column1 = val1 , column2 = val2 [WHERE expr = val]
外键添加:
FOREING KEY (column) REFERENCES tab-name (column)
查看数据:
SELECT * FROM tab-name;
- 查看约束
SHOW INDEXES FROM tab-name
- 过滤&排序 [
WHERE
,GROUP BY
(分组),HAVING
,ORDER BY
,LIMIT
]()
修改数据表:
- 添加列:
ALTER TABLE tab-name ADD column data-type [FIRST | AFTER column-name]
(添加多列-add后跟小括号,但无位置关系)
- 删除列:
ALTER TABLE tab-name DROP column-name
- 添加约束:
ALTER TABLE tab-name PRIMARY KEY (column-name)
- 删除主键约束:
ALTER TABLE tab-name DROP PRIMARY KEY
- 删除唯一约束:
ALTER TABLE tab-name DROP {INDEX | KEY} index-name
- 添加删除默认约束:
ALTER TABLE tab-name ALTER column-name {SET DEFAULT default | DROP DEFAULT}
- 数据表变更1:
ALTER TABLE tab-name MODIFY column-name data-type [FIRST | AFTER column-name]
- 数据表变更2:
ALTER TABLE tab-name CHANGE old-name new-name data-type [FIRST | AFTER column-name]
- 添加列:
清空数据表:
DELETE FROM tab-name;
TRUNCATE TABLE tab-name
删除数据表:
DROP tab-name
数据表均用到了的为sql语句查询,语句参考
账户权限管理
查看账户权限:
SHOW GRANTS; # 当前用户权限
SHOW PRIVILEGES; # mysql 所支持的权限列表
SHOW GRANTS FOR user; # 查看某用户
grant 权限名称[字段列表] on [数据库资源类型]数据库资源 to MySQL账户1,[MySQL账户2] [with grant option]
*.* 表示所有数据库,所有数据表
‘user’@’%’ user 账号可以在任意的主机上进行登录。
创建服务实例级账号
grant all privileges on *.* to 'supperuser'@'%' identified by 'password' with grant option;
将创建一个名字为supperuser的账号,拥有所有的数据库权限,并且具有grant 权限,可以创建其他拥有服务实例权限的其他用户。
创建数据库实例账号
创建数据库实例账号
grant all privileges on database_name.* to 'user'@'%' identified by 'userpass' with grant option;
将创建一个名字为user的账号。拥有database_name 数据库的所有权限,可以随该库中的表进行所有操作。
创建数据表级别的账号
grant all privileges on table tab_name.test to 'user'@'%' identified by 'userpass' with grant option;
将创建一个名字为user 的用户,对tab_name数据库中test拥有所有的权限。
权限更改
想要增加update, delete,alter 权限可以如下操作:
grant update,delete,alter on database_name.* to 'user'@'%' identified by 'userpass' with grant option;
想要移除insert 权限:
revoke insert on database_name.* from 'user'@'%';
用户管理
删除用户:
drop user user_name