note_21.4.3_MariaDB

MariaDB程序的组成:C/S

  • C:Client --> mysql protocol --> Server
    mysql:CLI交互式客户端程序;
    mysqldump:备份工具;
    mysqladmin:管理工具;
    mysqlbinlog:
    ...

  • S:Server
    mysqld
    mysqld_safe:建议运行服务端程序;
    mysqld_multi:多实例;

    三类套接字地址:
    IPv4|IPv6, 3306/tcp
    Unix Sock:/var/lib/mysql/mysql.sock, /tmp/mysql.sock
    C <--> S: localhost, 127.0.0.1

  • 配置文件:ini风格,用一个文件为多个程序提供配置;
    [mysql]
    [mysqld]
    [mysqld_safe]
    [server]
    [client]
    [mysqldump]
    ...

mysql的各类程序启动都读取不止一个配置文件,按顺序读取,且最后读取的为最终生效;

[root@localhost ~]# my_print_defaults
...
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 
...

命令行交互式客户端程序:mysql

mysql [OPTIONS] [database]

常用选项:
-u, --user=username:用户名,默认为root;
-h, --host=hostname:远程主机(即mysql服务器)地址,默认为localhost; 客户端连接服务端,服务器会反解客户的IP为主机名,关闭此功能(skip_name_resolve=ON);
-p, --password[=PASSWORD]:USERNAME所表示的用户的密码; 默认为空;

注意:mysql的用户账号由两部分组成:'USERNAME'@'HOST'; 其中HOST用于限制此用户可通过哪些远程主机连接当前的mysql服务;
HOST的表示方式,支持使用通配符:
%:匹配任意长度的任意字符;
172.16.%.%, 172.16.0.0/16
_:匹配任意单个字符;

-P, --port=#:mysql服务器监听的端口;默认为3306/tcp;
-S, --socket=/PATH/TO/mysql.sock:套按字文件路径;

-D, --database=DB_name:连接到服务器端之后,设定其处指明的数据库为默认数据库;
-e, --execute='SQL STATEMENT':连接至服务器并让其执行此命令后直接返回;

命令:

  • 客户端命令:本地执行
    mysql> help
    \u db_name:设定哪个库为默认数据库
    \q:退出;
    \d CHAR:设定新的语句结束符;
    \g:语句结束标记;
    \G:语句结束标记,结果竖排方式显式;
    \s:获取服务器状态
    \!: 执行shell命令;
    \.: 装载并运行sql脚本;

  • 服务端命令:通过mysql连接发往服务器执行并取回结果(SQL语句);
    DDL, DML, DCL

    注意:每个语句必须有语句结束符,默认为分号(;)

    • 获取帮助:
      mysql> help contents
      Administration
      Account Management
      Data Definition
      Data Manipulation
      Data Types
      myslq> help '命令类别'

数据类型:

  • 表:行和列
    创建表:定义表中的字段;

              定义字段时,关键的一步即为确定其数据类型;
                  用于确定:数据存储格式、能参与运算种类、可表示的有效的数据范围;
    
  • 字符型:字符集
    码表:在字符和二进制数字之间建立映射关系;

                  mysql> SHOW CHARACTER SET; 
                  mysql> SHOW COLLATION;
    
    • 字符型:
      定长字符型:
      CHAR(#):不区分字符大小写
      BINARY(#):区分字符大小写
      变长字符型:
      VARCHAR(#):多占一个或两个字符空间;
      VARBINARY(#):
      对象存储:
      TEXT:不区分字符大小写;TINYTEXT、SMALLTEXT、MEDIUMTEXT、TEXT、LONGTEXT
      BLOB:Binary Large OBject,区分字符大小写;TINYBLOB,SMALLBLOB,MEDIUMBLOB,BLOB,LONGBLOB;
      内置类型:
      SET
      ENUM
  • 数值型:
    精确数值型:
    INT(TINYINT,SMALLINT,MEDIUMINT,INT,BIGINT)
    UNSIGNED
    DECIMAL
    近似数值型:
    FLOAT
    DOBULE

    • 日期时间型:
      日期型:DATE
      时间型:TIME
      日期时间型:DATETIME
      时间戳:TIMESTAMP
      年份:YEAR(2), YEAR(4)
  • 字段数据修饰符:
    NOT NULL:非空;
    AUTO_INCREMENT:自动增长;
    NULL:
    DEFAULT value:默认值;
    PRIMARY KEY:主键;
    UNIQUE KEY:惟一键;


服务器端命令:

  • DDL:数据定义语言,主要用于管理数据库组件,例如数据库、表、索引、视图、用户、存储过程
    CREATE、ALTER、DROP
    create database 就是在/var/lib/mysql/目录下创建一个对应的目录
MariaDB [(none)]> create database testdb;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| testdb             |
| wordpress          |
+--------------------+
6 rows in set (0.04 sec)
You can see what character sets and collations are available using,
respectively, the SHOW CHARACTER SET and SHOW COLLATION statements. See
[HELP SHOW CHARACTER SET], and [HELP SHOW COLLATION], for more
information.


  • DML:数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查;
    INSERT, DELETE, UPDATE, SELECT

  • 获取命令帮助:
    mysql> help KEYWORD


数据库管理(DDL):

            创建:
                CREATE  {DATABASE | SCHEMA}  [IF NOT EXISTS]  db_name;
                    [DEFAULT]  CHARACTER SET [=] charset_name
                    [DEFAULT]  COLLATE [=] collation_name
                    
                查看支持的所有字符集:SHOW CHARACTER SET 
                查看支持的所有排序规则:SHOW  COLLATION
                
            修改:
                ALTER {DATABASE | SCHEMA}  [db_name]
                    [DEFAULT]  CHARACTER SET [=] charset_name
                    [DEFAULT]  COLLATE [=] collation_name
                    
            删除:
                DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
                
            查看:
                SHOW DATABASES LIKE  ’‘;

表管理:

  • 第二种创建方式:
    复制表结构;
    CREATE TABLE tbl_name LIKE other_table_name

  • 第三种创建方式:
    复制表数据;
    CREATE TABLE tbl_name () SELECT clause

              创建:
                  CREATE TABLE  [IF NOT EXISTS]  [db_name.]tbl_name  (create_defination)  [table_options]
                  
                  create_defination:
                      字段:col_name  data_type
                      键:
                          PRIMARY KEY (col1, col2, ...)
                          UNIQUE KEY  (col1, col2,...)
                          FOREIGN KEY (column)
                      索引:
                          KEY|INDEX  [index_name]  (col1, col2,...)
                          
                  table_options:
                      ENGINE [=] engine_name
                      CHARACTER SET [=] charset_name
                      COLLATE [=] collation_name
                      
                  查看数据库支持的所有存储引擎类型:
                      mysql> SHOW  ENGINES;
                      
                  查看某表的状态信息:
                      mysql> SHOW  TABLES  STATUS  [LIKE  'tbl_name'][WHERE clause]
    
MariaDB [(none)]> use testdb
Database changed
MariaDB [testdb]> create table tbl1 (id smallint unsigned not null auto_increment unique key,name varchar(60) not null);
Query OK, 0 rows affected (0.00 sec)

MariaDB [testdb]> desc tbl1;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type                 | Null | Key | Default | Extra          |
+-------+----------------------+------+-----+---------+----------------+
| id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| name  | varchar(60)          | NO   |     | NULL    |                |
+-------+----------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)


MariaDB [testdb]> show table status\G
*************************** 1. row ***************************
           Name: tbl1
         Engine: InnoDB
        Version: 10
     Row_format: Compact
           Rows: 0
 Avg_row_length: 0
    Data_length: 16384
Max_data_length: 0
   Index_length: 0
      Data_free: 4194304
 Auto_increment: 1
    Create_time: 2019-04-28 23:56:34
    Update_time: NULL
     Check_time: NULL
      Collation: latin1_swedish_ci
       Checksum: NULL
 Create_options: 
        Comment: 
1 row in set (0.01 sec)

修改:

ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name  [alter_specification [, alter_specification] ...]
                
alter_specification:
        字段:
                添加:ADD  [COLUMN]  col_name  data_type  [FIRST | AFTER col_name ]
                删除:DROP  [COLUMN] col_name 
        修改:
                CHANGE [COLUMN] old_col_name new_col_name column_definition  [FIRST|AFTER col_name] 
                MODIFY [COLUMN] col_name column_definition  [FIRST | AFTER col_name]
                键:
                        添加:ADD  {PRIMARY|UNIQUE|FOREIGN}  KEY (col1, col2,...)
                        删除:
                            主键:DROP PRIMARY KEY
                            外键:DROP FOREIGN KEY fk_symbol
                索引:
                        添加:ADD {INDEX|KEY} [index_name]  (col1, col2,...)
                        删除:DROP {INDEX|KEY}  index_name
                表选项:
                        ENGINE [=] engine_name
                    
                查看表上的索引的信息:
                    mysql> SHOW INDEXES FROM tbl_name;

删除:

                DROP  TABLE  [IF EXISTS]   tbl_name [, tbl_name] ...
                
            表的引用方式:
                tbl_name
                db_name.tbl_name    

DML:INSERT, DELETE, UPDATE, SELECT

  • INSERT:
    INSERT [INTO] tbl_name [(col1,...)] {VALUES|VALUE} (val1, ...),(...),...

                  注意:
                      字符型:引号;
                      数值型:不能用引号;
    
  • SELECT:

                  (1) SELECT  *  FROM  tbl_name[, tbl_name_2];
                      返回指定表的所有数据;慎用;
                  (2) SELECT  col1, col2, ...  FROM  tbl_name;
                      显示时,字段可以显示为别名;
                          col_name  AS  col_alias
                  (3)  SELECT  col1, ...  FROM tbl_name  WHERE clause; 
                      WHERE clause:用于指明挑选条件;
                          col_name 操作符 value:
                              age > 30; 
                              
                          操作符(1) :
                              >, <, >=, <=, ==, !=
                              
                          组合条件:
                              and 
                              or
                              not
                              
                          操作符(2) :
                              BETWEEN ...  AND ...
                              LIKE 'PATTERN'
                                  通配符:
                                      %:任意长度的任意字符;
                                      _:任意单个字符;
                              RLIKE  'PATTERN'
                                  正则表达式对字符串做模式匹配;
                              IS NULL
                              IS NOT NULL
                  (4) SELECT col1, ... FROM tbl_name  [WHERE clause]  ORDER BY  col_name, col_name2, ...  [ASC|DESC];
                      ASC: 升序;
                      DESC: 降序;
                      
                  (5) 分组:
                      GROUP BY,为了聚合;
                          count(), sum(), avg(), max(), min()
                          
                      HAVING:对聚合的结果做条件过滤;                     
    
  • DELETE:删除行;

                  DELETE   FROM  tbl_name  [WHERE where_condition]  [ORDER BY ...]  [LIMIT row_count]
                  
                  (1) DELETE  FROM  tbl_name  WHERE where_condition 
                  (2) DELETE  FROM  tbl_name  [ORDER BY ...]  [LIMIT row_count]
    
  • UPDATE:

                  UPDATE [LOW_PRIORITY] [IGNORE] table_reference  SET col_name1=value1 [, col_name2=value2] ... [WHERE where_condition]  [ORDER BY ...] [LIMIT row_count]
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • MYSQL 基础知识 1 MySQL数据库概要 2 简单MySQL环境 3 数据的存储和获取 4 MySQL基本操...
    Kingtester阅读 7,777评论 5 116
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,446评论 0 13
  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,028评论 0 19
  • 什么是DML?常用SQL举例,每个命令至少1个例子,最多不超过3个例子 DML:Data Manipulation...
    Net夜风阅读 329评论 0 0
  • 1、MySQL启动和关闭(安装及配置请参照百度经验,这里不再记录。MySQL默认端口号:3306;默认数据类型格式...
    强壮de西兰花阅读 633评论 0 1