一、MariaDB程序


1、MariaDB的程序组成

  • Client

        mysql:CLI交互式客户端程序

        mysqldump,mysqladmin...

  • Server

        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 自动使用unix sock

  • 命令行交互式客户端程序mysql选项:
        --print-defaults 默认选项
        --verbose 显示祥细信息
        -uUSERNAME: 用户名;默认为root
        -hHOST: 服务器主机; 默认为localhost
        -pPASSWORD:用户的密码;建议使用-p,默认为空密码

  • mysql用户账号由两部分组成:
        'USERNAME'@'HOST'
        HOST用于限制此用户可通过哪些远程主机连接mysql服务
        支持使用通配符:
        % 匹配任意长度的任意字符
        172.16.0.0/255.255.0.0 或 172.16.%.%
        _ 匹配任意单个字符


2、简单执行命令

  • 运行mysql命令:默认空密码登录
        mysql>use mysql
        mysql>select user();查看当前用户
        mysql>SELECT User,Host,Password FROM user;

  • 安全初始化
        /usr/local/mysql/bin/mysql_secure_installatoin

  • 登录系统:mysql –uroot –p

  • 客户端命令:本地执行
        mysql> help
        每个命令都完×××式和简写格式
        mysql> status 或 \s

  • 服务端命令:通过mysql协议发往服务器执行并取回结果
        每个命令都必须命令结束符号;默认为分号
        SELECT VERSION();


3、关系型数据库的常见组件

  • 数据库:databases

  • 表:table

         列:column

         行:row

  • 索引:index

  • 视图:view

  • 用户:user

  • 权限:privilege

  • 存储过程:procedure,无返回值

  • 存储函数:function,有返回值

  • 触发器:trigger

  • 事件调度器:event scheduler,任务计划


二、SQL语言的兴起与语法标准


  • 20世纪70年代,IBM开发出SQL,用于DB2

  • 1981年,IBM推出SQL/DS数据库

  • 业内标准微软和Sybase的T-SQL,Oracle的PL/SQL

  • SQL作为关系型数据库所使用的标准语言,最初是基于IBM的实现在1986年被批准的。1987年,“国际标准化组织(ISO)”把ANSI(美国国家标准化组织) SQL作为国际标准。这个标准在1992年进行了修订(SQL-92),1999年再次修订(SQL-99),目前最新的是SQL-2003

  • Keyword组成clause

  • 多条clause组成语句

  • SELECT *         SELECT子句

  • FROM products    FROM子句

  • WHERE price>400  WHERE子句

  • 这是一组语句,由三个子句构成,SELECT,FROM和WHERE都是关键字


1、SQL语句分类

  • DDL: Data Defination Language(数据定义语言)
        CREATE, DROP, ALTER

  • DML: Data Manipulation Language(数据操作语言)
        INSERT, DELETE, UPDATE

  • DCL:Data Control Language(数据控制语言)
        GRANT, REVOKE

  • DQL:Data Query Language(数据查询语言)
        SELECT


2、SQL语言规范

  • 在数据库系统中,SQL语句不区分大小写(建议用大写)

  • 但字符串常量区分大小写

  • SQL语句可单行或多行书写,以“;”结尾

  • 关键词不能跨多行或简写

  • 用空格和缩进来提高语句的可读性

  • 子句通常位于独立行,便于编辑,提高可读性

  • 注释:
        SQL标准:
        /*注释内容*/ 多行注释
        -- 注释内容 单行注释,注意有空格

  • MySQL注释:
        #


3、数据库对象的命名规则

  • 必须以字母开头

  • 可包括数字和三个特殊字符(# _ $)

  • 不要使用MySQL的保留字

  • 同一database(Schema)下的对象不能同名


4、数据库操作

  • 创建数据库:
        CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
        CHARACTER SET 'character set name'                  #指定创建数据库使用字符集
        COLLATE 'collate name'

  • 删除数据库
        DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';

  • 查看支持所有字符集

        SHOW CHARACTER SET;

  • 查看支持所有排序规则

        SHOW COLLATION;

  • 获取命令使用帮助:
        mysql> HELP KEYWORD;

  • 查看数据库列表:
        mysql> SHOW DATABASES;

MariaDB [(none)]> create database hp521;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| hp521              |
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

MariaDB [(hellodb]>delete from newstudents;          #比较危险的操作,删除表中所有内容


5、创建表

  • CREATE TABLE [IF NOT EXISTS] ‘tbl_name’ (col1 type1 修饰符, col2 type2 修饰符, ...)

  • 字段信息
        col type1
        PRIMARY KEY(col1,...)
        INDEX(col1, ...)
        UNIQUE KEY(col1, ...)

  • 表选项:
        ENGINE [=] engine_name
            SHOW ENGINES;查看支持的engine类型
        ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}

  • 获取帮助:mysql> HELP CREATE TABLE;

MariaDB [hp521]> create table emp ( eid int auto_increment primary key,name char(10) not null unique key,gender char(1) default 'm');
Query OK, 0 rows affected (0.01 sec)
MariaDB [hp521]> show create table emp;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                                                                                       |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp   | CREATE TABLE `emp` (
  `eid` int(11) NOT NULL AUTO_INCREMENT,
  `name` char(10) NOT NULL,
  `gender` char(1) DEFAULT 'm',
  PRIMARY KEY (`eid`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


6、表操作

  • 查看所有的引擎

        SHOW ENGINES;

  • 查看表

        SHOW TABLES [FROM db_name];

  • 查看表结构

        DESC [db_name.]tb_name;

  • 删除表

        DROP TABLE [IF EXISTS] tb_name;

  • 查看表创建命令

        SHOW CREATE TABLE tbl_name;

  • 查看表状态

        SHOW TABLE STATUS LIKE 'tbl_name'\G

 

 

三、数据类型


  • 数据类型:
        数据长什么样?
        数据需要多少空间来存放?

  • 系统内置数据类型和用户定义数据类型

  • MySql支持多种列类型:
        数值类型
        日期/时间类型
        字符串(字符)类型

  • 选择正确的数据类型对于获得高性能至关重要,三大原则:
        更小的通常更好,尽量使用可正确存储数据的最小数据类型
        简单就好,简单数据类型的操作通常需要更少的CPU周期
        尽量避免NULL,包含为NULL的列,对MySQL更难优化


1、整型

  • tinyint(m) 1个字节 范围(-128~127)

  • smallint(m) 2个字节 范围(-32768~32767)

  • mediumint(m) 3个字节 范围(-8388608~8388607)

  • int(m) 4个字节 范围(-2147483648~2147483647)

  • bigint(m) 8个字节 范围(+-9.22*10的18次方)

  • 取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~255)

  • int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围

  • MySQL可以为整型类型指定宽度,例如Int(11),对绝大多数应用这是没有意义的:它不会限制值的合法范围,

        只是规定了MySQL的一些交互工具(例如MySQL命令行客户端)用来显示字符的个数。对于存储和计算来说,Int(1)和Int(20)是相同的


2、浮点型(float和double),近似值

  • float(m,d) 单精度浮点型 8位精度(4字节) m总个数,d小数位

  • double(m,d) 双精度浮点型 16位精度(8字节) m总个数,d小数位

  • 设一个字段定义为float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位


3、定点数

  • 在数据库中存放的是精确值,存为十进制

  • decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位

  • MySQL5.0和更高版本将数字打包保存到一个二进制字符串中(每4个字节存9个数字)。例如,decimal(18,9)小数点两边将各存储9个数字,

        一共使用9个字节:小数点前的数字用4个字节,小数点后的数字用4个字节,小数点本身占1个字节

  • 浮点类型在存储同样范围的值时,通常比decimal使用更少的空间。float使用4个字节存储。double占用8个字节

  • 因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用decimal——例如存储财务数据。

        但在数据量比较大的时候,可以考虑使用bigint代替decimal


4、字符串(char,varchar,_text)

  • char(n) 固定长度,最多255个字符

  • varchar(n)可变长度,最多65535个字符

  • tinytext 可变长度,最多255个字符

  • text 可变长度,最多65535个字符

  • mediumtext 可变长度,最多2的24次方-1个字符

  • longtext 可变长度,最多2的32次方-1个字符

  • BINARY(M) 固定长度,可存二进制或字符,允许长度为0-M字节,

  • VARBINARY(M) 可变长度,可存二进制或字符,允许长度为0-M字节

  • 内建类型:ENUM枚举, SET集合


5、char和varchar:

  • char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。

  • char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n< n>255),所以varchar(4),存入3个字符将占用4个字节。

  • char类型的字符串检索速度要比varchar类型的快


6、varchar和text:

  • varchar可指定n,text不能指定,内部存储varchar是存入的实际字符数+1个字节(n< n>255),text是实际字符数+2个字节。

  • text类型不能有默认值

  • varchar可直接创建索引,text创建索引要指定前多少个字符。varchar查询速度快于text


7、二进制数据:BLOB

  • BLOB和text存储方式不同,TEXT以文本方式存储,英文存储区分大小写,而Blob是以二进制方式存储,不分大小写

  • BLOB存储的数据只能整体读出

  • TEXT可以指定字符集,BLOB不用指定字符集


8、日期时间类型

  • date 日期 '2008-12-2'

  • time 时间 '12:25:36'

  • datetime 日期时间 '2008-12-2 22:06:44'

  • timestamp 自动存储记录修改时间

  • YEAR(2), YEAR(4):年份

  • timestamp字段里的时间数据会随其他字段修改的时候自动刷新,这个数据类型的字段可以存放这条记录最后被修改的时间


9、修饰符

  • 所有类型:
        •NULL 数据列可包含NULL值
        •NOT NULL 数据列不允许包含NULL值
        •DEFAULT 默认值
        •PRIMARY KEY 主键
        •UNIQUE KEY 唯一键
        •CHARACTER SET name 指定一个字符集

  • 数值型
        •AUTO_INCREMENT 自动递增,适用于整数类型
        •UNSIGNED 无符号

 

#示例
CREATE TABLE students (id int UNSIGNED NOT NULL PRIMARY KEY,name VARCHAR(20)NOT NULL,age tinyint UNSIGNED);

DESC students;

CREATE TABLE students2 (id int UNSIGNED NOT NULL ,name VARCHAR(20) NOT NULL,age tinyint UNSIGNED,PRIMARY KEY(id,name));


四、表操作及索引

  • DROP TABLE [IF EXISTS] 'tbl_name';

  • ALTER TABLE 'tbl_name'
        字段:
            添加字段:add
            ADD col1 data_type [FIRST|AFTER col_name] 删除字段:drop
            修改字段:
            alter(默认值), change(字段名), modify(字段属性)
        索引:
            添加索引:add index
            删除索引: drop index
        表选项
            修改:

  • 查看表上的索引:SHOW INDEXES FROM [db_name.]tbl_name;

  • 查看帮助:Help ALTER TABLE


#修改表示例
ALTER TABLE students RENAME s1;

ALTER TABLE s1 ADD phone varchar(11) AFTER name;

ALTER TABLE s1 MODIFY phone int;

ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);

ALTER TABLE s1 DROP COLUMN mobile;

Help ALTER TABLE 查看帮助

ALTER TABLE students ADD gender ENUM('m','f')

ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL PRIMARY KEY;
ALTER TABLE students ADD UNIQUE KEY(name);

ALTER TABLE students ADD INDEX(age);

DESC students;

SHOW INDEXES FROM students;

ALTER TABLE students DROP age;

MariaDB [hp521]> desc emp;                                          #尽量不要插入
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| eid   | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(10) | NO   | UNI | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
MariaDB [hp521]> alter table emp add address char(100) not null after eid ;
Query OK, 0 rows affected (0.04 sec)               
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [hp521]> desc emp;
+---------+-----------+------+-----+---------+----------------+
| Field   | Type      | Null | Key | Default | Extra          |
+---------+-----------+------+-----+---------+----------------+
| eid     | int(11)   | NO   | PRI | NULL    | auto_increment |
| address | char(100) | NO   |     | NULL    |                |
| name    | char(10)  | NO   | UNI | NULL    |                |
+---------+-----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


  • 索引是特殊数据结构;定义在查找时作为查找条件的字段
        优点:提高查询速度
        缺点:占用额外空间,影响插入速度

  • 创建索引必须要有索引名称

  • 创建索引:
        CREATE INDEX index_name ON tbl_name (index_col_name,...);
        help CREATE INDEX

  • 删除索引:
        DROP INDEX index_name ON tbl_name;

  • 查看索引:
        SHOW INDEXES FROM [db_name.]tbl_name;



五、语句及账号授权


1、DML语句

  • DML: INSERT, DELETE, UPDATE
        •INSERT
            INSERT [INTO] tbl_name [(col_name,...)] {VALUES | VALUE} (val1,...),(...),...
        •UPDATE:
            UPDATE tbl_name SET col1=val1, col2=val2, ... [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
        •DELETE:
            DELETE FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
            可先排序再指定删除的行数
        •TRUNCATE TABLE tbl_name; 清空表


2、DQL语名

  • DQL:SELECT
        •SELECT col1,col2,... FROM tbl_name [WHERE clause] [ORDER BY 'col_name' [DESC]] [LIMIT [m,]n];
            Limit m,n 跳过m个,要n个

  • 字段表示法:
        *: 所有字段
        as:字段别名,col1 AS alias1


3、DQL语句

  • WHERE clause:
        操作符:
            =, != >, <, >=, <=
            BETWEEN ... AND ...
            LIKE:
                %:任意长度的任意字符
                _:任意单个字符;
            RLIKE:正则表达式模式匹配
            IS NULL ,IS NOT NULL
            IN (val1,val2,…) NOT IN (val1,val2,…)
        条件逻辑操作:
            AND,OR,NOT


#示例
DESC students;

INSERT INTO students VALUES(1,'tom','m'),(2,'alice','f');

INSERT INTO students(id,name) VALUES(3,'jack'),(4,'allen');

SELECT * FROM students WHERE id < 3;

SELECT * FROM students WHERE gender='m';

SELECT * FROM students WHERE gender IS NULL;

SELECT * FROM students WHERE gender IS NOT NULL;

SELECT * FROM students ORDER BY name DESC LIMIT 2;

SELECT * FROM students ORDER BY name DESC LIMIT 1,2;

SELECT * FROM students WHERE id >=2 and id <=4

SELECT * FROM students WHERE BETWEEN 2 AND 4

SELECT * FROM students WHERE name LIKE ‘t%’

SELECT * FROM students WHERE name RLIKE '.*[lo].*';

SELECT id stuid,name as stuname FROM students

 

3、用户账号

 

  • 用户账号:'user'@'host'
        user: 用户名
        host: 允许用户通过哪些主机远程连接mysqld服务
            IP、网络地址、主机名、通配符(%和_)

  • 创建用户:
        CREATE USER 'username'@'host' [IDENTIFIED BY 'password'];

  • 查看当前用户:
        SELECT user();

  • 查看用户:
        SELECT User,Host,Password FROM user;

  • 删除用户:DROP USER 'username'@'host';
        示例:删除默认的空用户
            DROP USER ''@'localhost';

  • 更改口令:
        1)SET PASSWORD FOR 'user'@'host' = PASSWORD(‘password');
        2) UPDATE user SET password=PASSWORD('magedu') WHERE User='root' ;
            注意:上面修改表的命令不会马上生效,需执行FLUSH PRIVILEGES生效
        3) /usr/local/mysql/bin/mysqladmin -u root –poldpassword password 'newpassword'

MariaDB [(none)]>CREATE user L@‘192.168.27.%' identified by 'centos';

MariaDB [(none)]>show processlist;                       #查看目前链接用户状态信息


4、授权

  • 权限级别:管理权限、数据库、表、字段、存储例程
        •Help GRANT
        •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:指定库的存储过程和函数

  • 示例:
        GRANT SELECT,DELETE on testdb.* TO ‘testuser’@‘%’IDENTIFIED BY 'testpass';

  • 查看指定用户获得的授权:
        Help SHOW GRANTS
        SHOW GRANTS FOR 'user'@'host';
        SHOW GRANTS FOR CURRENT_USER[()];

  • 回收授权:
        REVOKE priv_type, ... ON db_name.tb_name FROM 'user'@'host'
        示例:
        REVOKE DELETE ON testdb.* FROM 'testuser'@'%'

  • 注意:MariaDB服务进程启动时会读取mysql库中所有授权表至内存
        (1) GRANT或REVOKE等执行权限操作会保存于系统表中,MariaDB的服务进程通常会自动重读授权表,使之生效
        (2) 对于不能够或不能及时重读授权表的命令,可手动让MariaDB的服务进程重读授权表:mysql> FLUSH PRIVILEGES;



六、简单操作

1、查看目前软件使用版本信息

MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 5.5.59-MariaDB, for Linux (x86_64) using readline 5.1
Connection id:          21
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         5.5.59-MariaDB Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /app/mysql/mysql.sock
Uptime:                 7 hours 34 min 42 sec
Threads: 2  Questions: 128  Slow queries: 0  Opens: 4  Flush tables: 2  Open tables: 28  Queries per second avg: 0.004
--------------

MariaDB [(none)]> SELECT version();
+-----------------+
| version()       |
+-----------------+
| 10.2.13-MariaDB |
+-----------------+
1 row in set (0.00 sec)


2、数据库中执行shell命令

MariaDB [(none)]> \! pwd
/root

MariaDB [(none)]> \! ls /app/
mysql  website  website2  website3


3、修改mysql提示符

  • --prompt=format_str

    The prompt command reconfigures the default mysql> prompt. The string for defining the prompt can  contain the following special sequences.(prompt命令重新配置默认的mysql>提示符。用于定义提示符的字符串可以包含以下特殊序列。)


       │    选项    │    说明    |

       │\ c│计数器对于您发出的每个声明都会递增

       │\ D│全部日期

       │\ d│默认数据库

       │\ h│服务器主机

       │\ l│当前分隔符(5.1.12新增)

       │\ m│当前时间的分钟

       │\ n│换行符

       │\ O│以三个字母的格式显示当月(1月,2月,...)

       │\ o│数字格式的当前月份

       │\ P│am / pm

       │\ p│当前的TCP / IP端口或套接字文件

       │\ R│目前时间,在24小时军事时间(0-23)

       │\ r│当前时间,标准12小时时间(1-12)

       │\ S│分号

       │\ s│当前时间的秒数

       │\ t│制表符

       │\ U│完整的用户名@主机名帐户名

       │\ u│你的用户名

       │\ v│服务器版本

       │\ w│以三个字母的格式(星期一,二,...)

       │\ Y│本年度,四位数字

       │\ y│本年度,两位数字

       │\ _│一个空格

       │\  │空格(空格跟在反斜杠后面)

       │\' │单引号

       │\“│双引号

       │\\ │文字“\”反斜杠字符

       │\ x│x,对于以上未列出的任何“x”


  • 示例

        使用环境变量。您可以将MYSQL_PS1环境变量设置为提示字符串。
            例如:shell> export MYSQL_PS1 ="(\u@\h) [\d]>"

        使用命令行选项。您可以在命令行上将--prompt选项设置为mysql。对于
            例如:shell> mysql --prompt ="(\u@\h) [\d]>"
                (用户@主机)[数据库]>

        使用选项文件。您可以在任何MariaDB选项的[mysql]组中设置提示选项文件,例如/etc/my.cnf或主目录中的.my.cnf文件。

            例如:[MySQL的]

                  prompt=(\\u@\\h)[\\d]>\\_

        在这个例子中,请注意反斜杠加倍。如果使用选项文件中的提示选项设置提示,建议在使用特殊提示选项时加倍反斜杠。可选提示选项集和选项文件中识别的一组特殊转义序列有一些重叠。如果使用单个反斜杠,重叠可能会导致问题。例如,\ s被解释为一个空格而不是当前的秒数值。以下示例显示了如何在选项文件中定义提示以包含HH:MM:SS>格式的当前时间:

                 [MySQL的]
                 prompt ="\\r:\\m:\\s>"

        交互式设置提示。您可以使用提示符(或\ R)命令交互式地更改提示。例如:+

                 mysql> prompt (\u@\h) [\d]>\_
                 PROMPT set to ´(\u@\h) [\d]>\_´
                 (user@host)[database]>
                 (user@host) [database]> prompt
                 Returning to default PROMPT of mysql>
                 mysql>


[root@centos7mini~]#vim /etc/my.cnf.d/mysql-clients.cnf 
#
# These groups are read by MariaDB command-line tools
# Use it for options that affect only one utility
#
[mysql]
prompt=(\\u@\\h) [\\d]>\\_


4、查看user表中用户信息

MariaDB [(none)]> select user,host,password from mysql.user;  
+--------+----------------+-------------------------------------------+
| user   | host           | password                                  |
+--------+----------------+-------------------------------------------+
| root   | localhost      |                                           |
| root   | centos6-server |                                           |
| root   | 127.0.0.1      |                                           |
| root   | ::1            |                                           |
|        | localhost      |                                           |
|        | centos6-server |                                           |
| syslog | 192.168.1.102  | *128977E278358FF80A246B5046F51043A2B1FCED |
| syslog | 192.168.1.%    | *128977E278358FF80A246B5046F51043A2B1FCED |
+--------+----------------+-------------------------------------------+
8 rows in set (0.00 sec)


5、在数据库中修改root口令


MariaDB [(none)]> \! passwd

Changing password for user root.

New password:


6、查询安装程序的路径


[root@centos7mini~]#mysql -e 'show variables like "basedir";'

+---------------+------------------+
| Variable_name | Value            |
+---------------+------------------+
| basedir       | /usr/local/mysql |
+---------------+------------------+

注意:如果是yum 及 二进制安装,实现多实例可以不用指定--basedir,但如果是源码编译,实现多实例,必须制定 --basedir= 的路径


7、yum安装高版本mariadb

  • 官网找到高版本yum源地址

  • 添加base仓库

[root@centos6-mini~]#vim /etc/yum.repos.d/mariadb.repo

[mariadb]
name = MariaDB
baseurl = 
http://yum.mariadb.org/10.2/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

[root@centos6-mini~]#yum info MariaDB-server  
[root@centos6-mini~]#service mysql start

MariaDB [(none)]> \s
--------------
mysql  Ver 15.1 Distrib 10.2.13-MariaDB, for Linux (x86_64) using readline 5.1
Connection id:          9
Current database:
Current user:           Server:                 MariaDB
Server version:         10.2.13-MariaDB MariaDB Server

 

 

8、修改多实例数据库登陆口令


 

#第一种修改方法
[root@centos7mini~]#mysqladmin -uroot -S /mysqldb/3307/socket/mysql.sock password 'centos'


#第二种修改方法
MariaDB [(none)]> update mysql.user set password=password("centos") where user='root';
Query OK, 4 rows affected (0.01 sec)
Rows matched: 4  Changed: 4  Warnings: 0
MariaDB [(none)]> select user,password,host from mysql.user;
+------+-------------------------------------------+--------------+
| user | password                                  | host         |
+------+-------------------------------------------+--------------+
| root | *128977E278358FF80A246B5046F51043A2B1FCED | localhost    |
+------+-------------------------------------------+--------------+

MariaDB [(none)]> flush privileges;                #注意,修改表格,一定要刷新
Query OK, 0 rows affected (0.01 sec)

 

9、删除匿名用户

MariaDB [(none)]> drop user ''@localhost ;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> drop user ''@'centos6-mini';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;                 #注意,修改表格,一定要刷新
Query OK, 0 rows affected (0.01 sec)

 

 

 

10、查看默认使用的字符集

#yum安装的信息
MariaDB [(none)]> show variables like '%character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |        #客户端
| character_set_connection | utf8                       |        #连接
| character_set_database   | latin1                     |        #数据库
| character_set_filesystem | binary                     |        #文件系统
| character_set_results    | utf8                       |        #结果
| character_set_server     | latin1                     |        #服务器
| character_set_system     | utf8                       |        #系统
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

#源码编译安装的信息
MariaDB [(none)]> show variables like '%character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /app/mysql/share/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)


11、破解数据库口令

#第一步,进入主配置文件,加入关键字
[root@centos7mini~]#vim /etc/my.cnf
[mysqld]
skip_grant_tables
[root@centos7mini~]#systemctl restart mariadb

#第二步,进入数据库进行口令修改
MariaDB [(none)]> updata mysql.user set password=password("centos") where host='localhost';
#注意,生产环境中,一定要注意where,如果没带,对整个表修改,是非常危险的。

#第三步,修改主配置文件,去掉加入的关键字

 

12、查看目前链接用户的情况

MariaDB [(none)]> show processlist;

 

13、自己家目录下 .mysql_history

[root@Centos6-server~]#cat .mysql_history 
#数据库内用户使用过的命令


14、用户登录账号密码免输入

[root@centos7mini~]#vim /etc/my.cnf.d/clinent.cnf
[clinent]
user=root
password=centos


15、导入数据库

[root@centos6-mini~]#mysql -uroot -pcentos < hellodb_InnoDB.sql


16、查看表结构

 

MariaDB [hellodb]> desc students;
+-----------+---------------------+------+-----+---------+----------------+
| Field     | Type                | Null | Key | Default | Extra          |
+-----------+---------------------+------+-----+---------+----------------+
| StuID     | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| Name      | varchar(50)         | NO   |     | NULL    |                |
| Age       | tinyint(3) unsigned | NO   |     | NULL    |                |
| Gender    | enum('F','M')       | NO   |     | NULL    |                |
| ClassID   | tinyint(3) unsigned | YES  |     | NULL    |                |
| TeacherID | int(10) unsigned    | YES  |     | NULL    |                |
+-----------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

MariaDB [hellodb]> desc coc;
+----------+----------------------+------+-----+---------+----------------+
| Field    | Type                 | Null | Key | Default | Extra          |
+----------+----------------------+------+-----+---------+----------------+
| ID       | int(10) unsigned     | NO   | PRI | NULL    | auto_increment |
| ClassID  | tinyint(3) unsigned  | NO   |     | NULL    |                |
| CourseID | smallint(5) unsigned | YES  |     | NULL    |                |
+----------+----------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


17、查看数据库创建时使用的命令

MariaDB [hp521]> show create database hp521;
+----------+------------------------------------------------------------------+
| Database | Create Database                                                  |
+----------+------------------------------------------------------------------+
| hp521    | CREATE DATABASE `hp521` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+------------------------------------------------------------------+
1 row in set (0.00 sec)

 

18、查看数据库中每个表的结构信息

MariaDB [hp521]> show table status from mysql\G
*************************** 30. row ***************************
           Name: user
         Engine: MyISAM
        Version: 10
     Row_format: Dynamic
           Rows: 3
 Avg_row_length: 117
    Data_length: 580
Max_data_length: 281474976710655
   Index_length: 4096
      Data_free: 228
 Auto_increment: NULL
    Create_time: 2018-02-06 01:47:58
    Update_time: 2018-02-06 02:02:46
     Check_time: NULL
      Collation: utf8_bin
       Checksum: NULL
 Create_options: 
        Comment: Users and global privileges
30 rows in set (0.00 sec)


19、数据库存储区别

[root@centos6-mini~]#ll /var/lib/mysql/hellodb/
-rw-rw---- 1 mysql mysql  1277 Feb  6 04:18 classes.frm             #表的结构
-rw-rw---- 1 mysql mysql 98304 Feb  6 04:18 classes.ibd             #表的数据
[root@centos6-mini~]#ll /var/lib/mysql/
-rw-rw---- 1 mysql mysql 12582912 Feb  6 04:49 ibdata1              #innodb所有数据库的真实数据,默认是全部放到一起的,可以分开

[root@centos6-mini~]#ll /var/lib/mysql/mysql
-rw------- 1 mysql mysql   2110 Feb  6 01:47 columns_priv.frm       #表的结构
-rw------- 1 mysql mysql      0 Feb  6 01:47 columns_priv.MYD       #表的数据
-rw------- 1 mysql mysql   4096 Feb  6 01:47 columns_priv.MYI       #表的索引


20、把INNODB引擎数据分开

[root@centos6-mini~]#vim /etc/my.cnf
[mysqld]
innodb_file_per_table 

[root@Centos6-serverdata]#service mysqld restart 

MariaDB [(none)]> show variables like "%file%";
+---------------------------------------+--------------------------------------------+
| Variable_name                         | Value                                      |
+---------------------------------------+--------------------------------------------+
| innodb_file_per_table                 | ON


21、数据库中help命令

 

 

#需要查询要使用的命令用法,例如
MariaDB [hp521]> help create
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   CREATE DATABASE
   CREATE EVENT
   CREATE FUNCTION
   CREATE FUNCTION UDF
   CREATE INDEX
   CREATE PROCEDURE
   CREATE SERVER
   CREATE TABLE
   CREATE TABLESPACE
   CREATE TRIGGER
   CREATE USER
   CREATE VIEW
   SHOW
   SHOW CREATE DATABASE
   SHOW CREATE EVENT
   SHOW CREATE FUNCTION
   SHOW CREATE PROCEDURE
   SHOW CREATE TABLE
   SPATIAL

MariaDB [hp521]> help create table

 

 


22、查询表的创建格式信息

MariaDB [hp521]> show table status like 'emp'\G
*************************** 1. row ***************************
           Name: emp
         Engine: InnoDB           
        Version: 10
     Row_format: Compact                 #紧凑格式
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 16384
      Data_free: 0
 Auto_increment: 1
    Create_time: 2018-02-06 14:42:26
    Update_time: NULL
     Check_time: NULL
      Collation: utf8_general_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec)


23、数据库别名简单实用

MariaDB [hellodb]> select course as 秘籍 from courses;        
+----------------+
| 秘籍           |
+----------------+
| Hamo Gong      |
| Kuihua Baodian |
| Jinshe Jianfa  |
| Taiji Quan     |
| Daiyu Zanghua  |
| Weituo Zhang   |
| Dagou Bangfa   |
+----------------+
7 rows in set (0.00 sec)


24、根据已有表格式创建新的表

MariaDB [hp521]> create table newstudents select * from students;
#这么创建会丢失主键及自动递增等设置,相当于复制表

MariaDB [hp521]>insert into newstudents select * from students;  
#直接在新表中复制其他表中的所有内容,前提是两个表结构是一致的


25、清除表中所有内容

<strong>MariaDB [hp521]>truncate table newstudents;
#极度危险的操作,对表内数据量极大的清除操作</strong>