MariaDB的程序组成:
C:
mysql:CLI交互式客户端程序;
mysqldump, mysqladmin…
S:
mysqld_safe
mysqld
mysqld_multi
服务器监听的两种socket地址:
ip socket: 监听在tcp的3306端口,支持远程通信;
unix sock: 监听在sock文件上(/tmp/mysql.sock, /var/lib/mysql/mysql.sock),仅支持本地通信;
server: localhost, 127.0.0.1
命令行交互式客户端程序:mysql
mysql
-uUSERNAME: 用户名;默认为root
-hHOST: 服务器主机; 默认为localhost
-pPASSWORD:用户的密码; 默认为空密码
注意:mysql用户账号由两部分组成:'USERNAME'@'HOST'; 其中HOST用于限制此用户可通过哪些主机远程连接mysql服务;
支持使用通配符:
%: 匹配任意长度的任意字符;
172.16.0.0/16, 172.16.%.%
_: 匹配任意单个字符;
命令:
客户端命令:本地执行
mysql> help
每个命令都完整形式和简写格式;
status, \s
服务端命令:通过mysql协议发往服务器执行并取回结果
每个命令都必须命令结束符号;默认为分号;
关系型数据库的常见组件:
数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
mysql_secure_installation:安全初始化
SQL语句:
DDL: Data Defination Language
CREATE, DROP, ALTER
DML: Data Manipulation Language
INSERT, DELETE, UPDATE, SELECT
GRANT, REVOKE
数据库:
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
CHARACTER SET 'charecter set name'
COLLATE 'collate name'
查看支持所有字符集:SHOW CHARACTER SET;
查看支持所有排序规则:SHOW COLLATIONS;
获取命令使用帮助:
mysql> HELP KEYWORD;
查看:
mysql> SHOW DATABASES;
表:
CREATE TABLE [IF NOT EXISTS] tb_name (col1 datatype 修饰符, col2 datatype 修饰符) ENGINE=''
查看所有的引擎:SHOW ENGINES;
查看表:SHOW TABLES [FROM db_name]
查看表结构:DESC [db_name.]tb_name
删除表:
DROP TABLE [IF EXISTS] tb_name;
数据类型:
字符型
定长字符型:CHAR(#), BINARY(#)//前者区分大小写, 后者不区分大小写
变长字符型: VARCHAR(#), VARBINARY(#)//前者区分大小写, 后者不区分大小写
对象存储:
TEXT: 不区分大小写
BLOB:区分字符大小写
内置类型:
ENUM
SET
数值型
精确数值型
整型: int
tinyint: 1byte
smallint: 2bytes
mediumint: 3bytes
int: 4bytes
bigint: 8bytes
十进制: decimal
近似数值型
单精度浮点型
float
双精度浮点型
double
修饰符:
NOT NULL:非空约束
DEFAULT VALUE: 设定默认值
数据基础应用:
表:
CREATE TABLE [IF NOT EXISTS] 'tbl_name' (col1 type1, col2 type2, ...)
col type1
PRIMARY KEY(col1,...)
INDEX(col1, ...)
UNIQUE KEY(col1, ...)
表选项:
ENGINE [=] engine_name
ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
SHOW ENGINES;
获取帮助:
mysql> HELP CREATE TABLE;
查看创建命令:
SHOW CREATE TABLE tbl_name;
查看表状态:
SHOW TABLE STATUS LIKE 'tbl_name'\G
DROP TABLE [IF EXISTS] 'tbl_name';
ALTER TABLE 'tbl_name'
字段:
添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
删除字段:drop
修改字段:alter, change, modify
索引:
添加索引:add
删除索引: drop
表选项
修改:
查看表上的索引:SHOW INDEXES FROM [db_name.]tbl_name;
索引:
索引是特殊数据结构;定义在查找时作为查找条件的字段;
索引:要有索引名称;
创建索引:
CREATE INDEX index_name ON tbl_name (index_col_name,...);
删除索引:
DROP INDEX index_name ON tbl_name;
DML: INSERT, DELETE, SELECT, UPDATE
INSERT INTO:
INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} (val1,...),(...),...
SELECT:
SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
字段表示法:
*: 所有字段;
as:字段别名,col1 AS alias1;
WHERE clase:
操作符:
>, <, >=, <=, ==, !=
BETWEEN ... AND ...
LIKE:
%:任意长度的任意字符;
_:任意单个字符;
RLIKE:
正则表达式模式匹配;
IS NULL
IS NOT NULL
条件逻辑操作:
and
or
not
DELETE:
DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
UPDATE:
UPDATE tbl_name SET col1=new_val1, col2=new_val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
用户账号及权限管理:
用户账号:'user'@'host'
user: 用户名
host: 此用户访问mysqld服务时允许通过哪些主机远程创建连接;
IP、网络地址、主机名、通配符(%和_);
禁止检查主机名:
my.cnf, [mysqld]
skip_name_resolve = yes
创建用户账号:
CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];
删除用户:
DROP USER 'username'@'host';
授权:
权限级别:管理权限、数据库、表、字段、存储例程;
GRANT priv_type,... ON [object_type] db_name.tb_name TO 'user'@'host' [IDENTIFIED BY 'password'] [WITH GRANT OPTION];
priv_type: ALL [PRIVILEGES]
db_name.tb_name:
*.*: 所有库的所表;
db_name.*: 指定库的所有表;
db_name.tb_name: 指定库的指定表;
db_name.routine_name:指定库的存储例程;
查看指定用户获得的授权:
SHOW GRANTS FOR 'user'@'host';
SHOW GRANTS FOR CURRENT_USER;
回收授权:
REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host';
注意:MariaDB服务进程启动时会读取mysql库中的所有授权表至内存中;
(1) GRANT或REVOKE等执行权限操作会保存于表中,MariaDB的服务进程会自动重读授权表;
(2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:
mysql> FLUSH PRIVILEGES;