菜鸟学Linux 第073篇笔记 client,数据类型,变量



小标题

client、mysql数据类型、服务器变量、存储引擎、sql模型


MySQL客户端

mysql

--user, -u

--host, -h

--password, -p

--port

--protocol

--database DATABASE, -D

--html 返回结果以html格式显示

--xml 返回结果以xml格式显示



mysql>

交互式模式

批处理模式(脚本模式)

脚本写法和在mysql>模式输入一样;号结尾,只是不用进入交互模式便可执行

执行mysql脚本方式

命令行下

# mysql < /path/name.sql

进入交互模式下引用脚本

mysql> \. /path/name.sql

mysql> source /path/name.sql



mysql>

命令两类

客户端命令

\c 提前终止语句执行

\g 无论语句结束符是什么,直接将此语句送至服务器端执行

\G 无论语句结束符是什么,直接将此语句送到服务器端执行,以竖排方式显示

\. 引用.sql结尾的Mysql语句脚本

\s Get status information from the server.

\! Execute a system shell command.

\W Show warnings after every statement.

\w Don't show warnings after every statement.

\# 对新建的对象支持补全的功能

\d 定义结束符


服务器语句;有语句结束符,默认为;号

help Key-word




mysql提示符含义

mysql> 正常输入命令

-> 少结束符

'> 少单引号的后一半

"> 少双绰号的后一半

`> 少反绰号的后一半




mysql让其支持补全

(不推荐,只是说有这样一种功能,因为支持补全需要将这些数据加载到内存)

名称补全 \#




mysqladmin 

# mysqladmin [options] command [arg] [command [arg] ] ...

create DATABASE-NAME;

drop DATABASE-NAME;

ping 

# mysqladmin -uroot -h192.168.11.122 -p -ping测试服务器是否可以ping通

processlist 显示正在执行的线程列表

status

--sleep N(second)

--count N(次数)

extended-status 显示状态变量和其值

variables 显示服务器变量

flush-privileges 让mysql重读授权表

flush-status 重置大多数的服务器状态变量

flush-tables 关闭已经打开的表

flush-threads 重置线程缓存

flush-logs 二进制和中继日志滚动

flush-hosts 清除主机的错误信息,主机尝试多次连接失败,mysql会禁止其一段时间登录

kill   杀死某线程

reload   = flush-privileges

refresh = fush-logs and flush hosts 同时执行

shutdown 关闭mysql服务器进程

version 版本号和状态信息

start-slave 启动复制,启动从服务器复制线程

SQL thread

IO thread

stop-slave 停止复制线程


mysqldump(备份), mysqlimport(导入), mysqlcheck(导入)




开发视角:

数据类型

约束

创建数据库、表、索引、视图

SELECT 语句





存储引擎:也被称为表类型

MyISAM(表类型):

不支持事务,表锁

.frm 表结构定义文件

.MYD 表数据

.MYI 索引


InnoDB表 事务,行锁

.frm 表结构

.ibd 表空间(数据和索引)


mysql: mysql库: MyISAM

mysql> SHOW TABLE STATUS LIKE 'user'\G;  显示表所使用的存储引擎

mysql> SHOW ENGINES;




程序语言连接数据的方式:

动态SQL 通过函数或方法与数据库服务器建立连接,将语句发至服务器

嵌入式SQL 连接之前需要编译

JDBC (Java database connection), ODBC(open database connection)



客户端组件 mysql, mysqladin, mysqldump, mysqlimport, mysqlcheck

服务器 mysqld, mysqld_safe, mysqld_multi(多实例)



my.cnf查找顺序

/etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> --default-extra-file=/path/to/somefile --> ~/my.cnf



[mysqld]

[mysql]

[clent]


#mysqld --help --verbose 显示可以在my.cnf文件中配置的参数


记得勤查看错误日志



DBA 方向

开发DBA 数据库设计、SQL语句、存储过程、存储函数、触发器...

管理DBA 安装、升级、备份恢复、用户管理、权限管理、监控、性能分析、基准测试...





数据类型

数值型

精确数值

int

decimal

近似数值

float

double

real

字符型

定长 CHAR(#), BINARY(区分大小写)

变长 VARCHAR(#), VARBINARY(区分大小写)

text, blob

ENUM, SET


日期时间型

date

time

datetime

timestamp

布尔型




详解

String Data Types

TINYINT 255

SMALLINT 65535

MEDIUMINT 16M

INT 4G

BIGINT 非常大!

DECIMAL

FLOAT (fixed)

DOUBLE (fixed)

BOOL


Numeric data type attributes

NOT NULL

NULL

DEFAULT

AUTH_INCREMENT

UNSIGNED



String Data Types

CHAR 255

VARCHAR 65535

BINARY 255(fixed)

VARBINARY 65535(variable)

TINYBLOB 255(variable)

BLOB 65535(variable)

MEDIUMBLOB 16Mb(variable)

LONGBLOB 4GB(variable)

TINYTEXT 255

MEDIUMTEXT 16777215

LONGTEXT 40亿

ENUM

SET (不支持索引)


Character string type attributes

NOT NULL

NULL

DEFAULT

CHARACTER SET

COLLATION


Date and Time Data Types

DATA

TIME

DATATIME

TIMESTAMP

YEAR



AUTO_INCREMENT

×××

非空

无符号

主键或唯一键

mysql> SELECT LAST_LAST_INCRET_ID();


CREAT TABLE test(ID INT UNSIGNED AUTO_INCREMENT NOTNULL PRIMARY KEY,Name CHAR(20));





域属性,修改符



定义数据类型意义:

1. 存入的值类型

2. 占据的存储空间

3. 定长还是变长

4. 如何比较及排序

5. 是否能够索引



重点掌握数据存储类型的格式、表示的范围大小、所能够接受的修饰符



SQL语句

mysql> SHOW CHARACTER SET; 

显示当前mysql服务器所支持的所有字符集

mysql> SHOW COLLATION; 

各个字符集的排序规则





SQL模型

ANSI QUOTES   单绰号标识字符串,双引号和反引号引用字段名称,表名等

IGNORE_SPACE  built-in function内建函数忽略空白字符

STRICT_ALL_TABLES 设置后不允许写非法字符

STRICT_TRANS_TABLES  向支持事务的表中插入非法数据会被拒绝

TRADITIONAL

mysql> SHOW GLOBAL VARIABLES LIKE 'sql_mode'; 查询SQL模型




服务器变量

按作用域分为两类

全局变量(管理员权限)

SHOW GLOBAL VARIABLES

会话变量(用户可修改)

SHOW [ SESSION ] VARIABLES


按生效时间划分为两类

动态 可即时修改

静态

写在配置文件中

通过参数传递给mysqld


动态参数调整生效方式

全局: 对当前会话无效,只对新建立会话有效

会话: 即时生效,但只对当前会话有效,关闭后失效


服务器变量@@

显示: SELECT @@{GLOBAL|SESSION}.sql_mode;

设定: SET {GLOBAL|SESSION} 变量名='value'

SET GLOBAL sql_mode='strict_trans_tables';s

设置后当前会话无效,重新建立会话生效

SET SESSION sql_mode='strict_trans_tables';