MySQL基础知识

1、SQL:结构化查询语言(Structured Query Language):

DDL:Data Definition Language(数据定义语言): 其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。

DML:Data Manipulation Language(数据操作语言) :其语句包括动词 INSERT, UPDATE和 DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。

 

编程接口

存储过程:procedure

存储函数:function

触发器:trigger

事件调度器:event scheduler

2、三层模型

物理层:决定数据的存储格式,即如何将数据组织成为物理文件;

逻辑层:描述DB存储什么数据,以及数据间存在什么样的关系;

视图层:描述DB中的部分数据

3、MySQL客户端交互式CLI工具:mysql

 

常用选项:

-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’:连接至服务器并让其执行此命令后直接返回

4、MySQL数据类型:

 

  • 字符型:

                定长字符型:

CHAR(#):不区分字符大小写(0-255字节)

BINARY(#):区分字符大小写

                 变长字符型:

VARCHAR(#):多占一个或两个字符空间(最后要有一个字符串结束标记)不区分字符大小写(0-65535 字节)

VARBINARY(#):区分字符大小写

                对象存储:

TEXT:不区分字符大小写;TINYTEXT、SMALLTEXT、MEDIUMTEXT、TEXT、LONGTEXT

BLOB:Binary Large OBject,区分字符大小写;TINYBLOB,SMALLBLOB,MEDIUMBLOB,BLOB,LONGBLOB;

  • 数值型:

              精确数值型:

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1 字节 (-128,127) (0,255) 小整数值
SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
BIGINT 8 字节 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
FLOAT

近似数值

4 字节(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)0,(1.175 494 351 E-38,3.402 823 466 E+38)单精度
浮点数值
DOUBLE8 字节(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)双精度
浮点数值
DECIMAL对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2依赖于M和D的值依赖于M和D的值小数值

              近似数值型:

                            FLOAT

                            DOBULE

  • 日期时间型:
类型 大小(字节) 范围 格式 用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 ‘-838:59:59’/’838:59:59’ HH:MM:SS 时间值或持续时间
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
TIMESTAMP 4 1970-01-01 00:00:00/2037 年某时 YYYYMMDD HHMMSS 混合日期和时间值,时间戳

 

  • 字符类型修饰符:

              NOT NULL:非空约束

              NULL:允许为空

              DEFAULT value:指定默认值

CHARACTER SET:使用的字符集

 

              COLLATION:使用的排序规则

AUTO_INCREMENT:自动增长

  • 整型数据修饰符

              NOT NULL:非空约束

              DEFAULT NUMBER:指定默认值

              PRIMARY KEY:主键

              UNIQUE KEY:惟一键

AUTO_INCREMENT:自动增长

 

5、数据定义语言(DDL):

(1)数据库

创建:

CREATE  {DATABASE | SCHEMA}  [IF NOT EXISTS]  db_name;

CREATE  {DATABASE 或SCHEMA}后面指明数据库名称

[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 ‘  ’;

(2)表

创建:

CREATE TABLE [IF NOT EXISTS] [db_name.]tbl_name (create_defination) [table_options]

字段:col_name  data_type

添加: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]

键:

PRIMARY KEY (col1, col2, …)

UNIQUE KEY  (col1, col2,…)

FOREIGN KEY (column)

添加:ADD  {PRIMARY|UNIQUE|FOREIGN}  KEY (col1, col2,…)

删除:

主键:DROP PRIMARY KEY

外键:DROP FOREIGN KEY fk_symbol

 

查看数据库支持的所有存储引擎类型

mysql> SHOW  ENGINES;

查看某表的状态信息:

mysql> SHOW  TABLES  STATUS  [LIKE  ‘tbl_name’][WHERE clause]

修改:

ALTER [ONLINE|OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] …]

 

 

 

删除:

DROP  TABLE  [IF EXISTS]   tbl_name [, tbl_name] …    (不推荐使用)

表的引用方式:

tbl_name

db_name.tbl_name

 

(3)索引管理:

索引是特殊的数据结构;

索引:要有索引名称;

创建:

CREATE  [UNIQUE|FULLTEXT|SPATIAL] INDEX  index_name  [BTREE|HASH]  ON tbl_name (col1, col2,,…)

删除:

DROP  INDEX index_name ON tbl_name

查看表上的索引的信息:

mysql> SHOW INDEXES FROM tbl_name;

(4)视图

创建

CREATE VIEW view_name AS select_statement;

删除

DROP VIEW view_name;

注意:视图不能插入数据,受基表(创建视图用到的表)限制,视图的数据事实上存储与”基表“中

6、数据操作语言(DML):

【 INSERT、DELETE、SELECT、UPDATE】

      1.INSERT语句:一次插入一行或多行
  insert into table_name[(column[column…])]values(value[,value…]);默认情况下,一次插入操作只插入一行
  一次性插入多条记录:
    insert into table_name[(column[,column…])]values(value[,value…]),(value[,value…]);
  如果为每列都指定值,则表名后不需要列出插入的列名
  如果不想在表名后列出列名,可以为那些无法指定的值插入NUll
  如果需要插入其他特殊字符,应该采用\转义字符做前缀

 

      2.DELETE语句
  语法:delete [from] table_name [where condition];
  删除不需要指定列名,因为删除总是整行整行删除,where子句是一个条件表达式,只有符合该条件的行才会被删除。没有where子句意味着删除所有数据
  删除可以一次删除多行,删除哪些行采用where子句限定

      3.UPDATE语句
  语法:update table_name set column = value[,column = value]…[where condition];
    修改可以一次修改多行数据,修改的数据可用where子句限定,where子句是一个条件表达式,只有符合该条件的行才会被修改。没有where子句意味着where子句表达式值为true
    也可以同时修改多列,多列的修改中采用逗号隔开

 

      4.SELECT语句
  语法:select_expr [, select_expr ...] [FROM table_references [WHERE where_condition]
  where子句:指明过滤条件以实现选择的功能
     where子句限定返回的记录,where子句在from子句后
     where中的字符串和日期值,字符串和日期要用单引号括起来,字符串是大小写敏感的,日期值是格式敏感的
     比较操作符:>, >=, <, <=, =, <>, BETWEEN min_num AND max_num,
               in(element1,...):匹配所有列出的值
               like:模糊匹配(%:任意值,_:任意单个字符
               IS NULL是空值
     逻辑运算符:ONT, AND, OR, XOR(相同为假,不同为真)
  group by子句
      group by子句的真正作用在于与各种聚合函数配合使用,它用来对查询出来的数据进行分组
      分组的含义是:把该列具有相同值的多条记录当成一组记录处理,最后只输出一条记录
      分组函数忽略空值
      结果集隐式按升序排列,如果需要改变排序方式可以使用order by子句
      count(*|列名)  统计行数 avg(数值类型列名)  平均值 sum(数值类型列名)  求和
      max(列名)   最大值      min(列名)   最小值
      having子句用来对分组后的结果再进行条件过滤
  在select语句最后可以用limit来限定查询结果返回的起始记录和总数量
  对查询结果中的数据请求施加锁
       for update:写锁,独占锁
       lock in share mode:读锁,共享锁

7、数据库的设计
-当数据库比较复杂时我们需要设计数据库
-良好的数据库设计
-节约数据的存储空间
-能够保证数据的完整性
-方便进行数据库应用系统的开发

☆数据库设计规范化
-仅有好的DBMS并不足以避免数据冗余,必须在数据库的设计中创建好的表结构
-数据库规范化的三个级别,范式是具有最小冗余的表结构,如下:
-第一范式:(1stNF first normal formate)
-第二范式:(2stNF second normal formate)
-第三范式:(3stNF third normal formate)

◆第一范式(1NF)(第一范式必须有主键)
-在关系模式R中的每一个具体关系r中,必须要有主键,并且每个属性都是不可再分的最小数据单位

◆第二范式(2NF)
-如果关系模式R中的所有非主属性都完全依赖于主关键字,则称关系R是属于第二范式

◆第三范式(3NF)
-关系模式R中的非主关键字不能依赖于其他非主关键,即非主关键字之间不能有函数(传递)依赖关系,则称关系R是属于第三范式

8、一个存储系统是否支持事务,测试标准:

ACID

ACID是数据库事务正确执行的四个基本要素的缩写,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有ACID特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。

A:原子性

整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

C:一致性

一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。

也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant),以转账案例为例,假设有五个账户,每个账户余额是100元,那么五个账户总额是500元,如果在这个5个账户之间同时发生多个转账,无论并发多少个,比如在A与B账户之间转账5元,在C与D账户之间转账10元,在B与E之间转账15元,五个账户总额也应该还是500元,这就是保护性和不变性

I:隔离性

隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据

D:持久性

在事务完成以后,该事务对数据库所作的更改持久的保存在数据库之中,并不会被回滚。

由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新以及修改的资料一次操作完毕,但实际上并不可行。 目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式(现代数据库均基于这种方式)。第二种是Shadow paging。

9、编译安装mariadb-5.5.44

# yum install cmake
# yum groupinstall "Development Tools" "Server Platform Development"
# groupadd -r -g 306 mysql
# useradd -r -g 306 mysql -u 306 mysql
# tar xf mariadb-5.5.44.tar.gz
# cd maeradb-5.5.44
# cmake
DCMAKE_INSTALL_PREFIX=/usr/local/mariadb-5.5.44\    安装路径
DMYSQL_DATADIR=/mydata/data\                        数据目录
DSYSCONFDIR=/etc                                    指定安装文件的安装路径
DMYSQL_UNIX_ADDR=/tmp/mysqld.sock\                  sock文件
DDEFAULT_CHARSET=utf8\                              默认字符集
DDEFAULT_COLLATION=utf8_general_ci\                 默认排序规则
DWITH_INNOBASE_STORAGE_ENGINE=1\                    默认编译的存储引擎
DWITH_ARCHIVE_STORAGE_ENGINE=1\
DWITH_BLACKHOLE_STORAGE_ENGINE=1\
DWITHOUT_READLINE=1\
DWITH_ZLIB=system\
DWITH_SSL=system\
DWITH_LIBWRAP=0\
# make
# make install
# cd /usr/local
# ln -sv mariadb-5.5.44 mysql
# chmod -R root.mysql ./*
# ll
# scrips /mysql_install_db --user=mysql --datadir=/mydata/data 
# cp support-file/my-large.cnf /etc/mysql/my.cnf
# vim /etc/mysql/my.cnf
     datadir=/mydata/data
     innodb_file_per_table = ON
     skip_name_resolve = ON
# cp support-file/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig --add mysqld
# service mysqld start
# /usr/local/mysql/bin/mysql_secure_installation     给所有用户设定密码,删除匿名用户
# /usr/local/mysql/bin/mysql





 
 

 

原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/88757

(0)
nenenene
上一篇 2017-11-20
下一篇 2017-11-20

相关推荐

  • Linux文件类型

    Linux文件类型常见的有:普通文件、目录文件、字符设备文件和块设备文件、符号链接文件等。 1、普通文件,颜色为白色 纯文本档 二进制文件 数据格式文件 2、目录文件,颜色为蓝色 当我们在某个目录下执行,看到有类似 drwxr-xr-x ,这样的文件就是目录,目录在Linux是一个比较特殊的文件。首字符是【d】字母。 3、字符设备和块设备…

    Linux干货 2016-10-16
  • Linux Sysadmin–part3

    1、写一个脚本,判断当前系统上所有用户的shell是否为可登录shell(即用户的shell不是/sbin/nologin);分别这两类用户的个数;通过字符串比较来实现 #!/bin/bash for i in `cut -d’:’ -f7 /etc/passwd`;do if [ $i == “/sbin/nologin…

    2017-09-19
  • EXT4文件系统的初步使用

    文件系统的类型多种多样,我们接触得比较多的当属Windows系统上的FAT32和NTFS。 而EXT文件系统(Extended filesystem)则是linux上常见的文件系统类型。 目前最新的版本是ext4,常见于CentOS6之中。 1.查看当前系统中有没有挂载使用中的EXT4文件系统,可以使用mount命令: 2.如何创建一个EXT4的文件系统(f…

    系统运维 2016-02-14
  • linux安全机制与加密工具使用

    一、加密需要和安全机制 1.不加密流量的易受攻击性 密码/数据嗅探 数据操作 验证操作 相当于邮寄明信片 2.不安全的传统协议 telnet、FTP、POP3等等;不安全密码http、sendmail、NFS等等;不安全信息Ldap、NIS、rsh等等;不安全验证 3.NIST定义的安全属性:美国国家标准与技术研究院 1) 保密性:  &…

    Linux干货 2016-09-25
  • N22第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可 [root@localhost ~]# who |cut -d' ' -f1 |sort -u   root   xuc 2、取出…

    Linux干货 2016-08-29
  • 关于大型网站技术演进的思考(八):存储的瓶颈(8)

    原文出处: 夏天的森林  在开始本篇主要内容前,我们一起看看下面的几张截图,首先是第一张图,如下图所示: 这是一家电商网站的首页,当我们第一次打开这个首页,网站会弹出一个强制性的对话框,让用户选择货物配送的地址,如果是淘宝和京东的话,那么这个选择配货地址的选项是在商品里,如下图是淘宝的选择配送地点: 下图是京东选择配货地点: 那么图一跟京…

    2015-03-11