首页 > 代码库 > 一、MySQL数据库基础

一、MySQL数据库基础

1.1、数据库模型

  数据库由一批数据构成有序集合,这些数据被存在结构化的数据表中。数据表之间互相关联,反应客观事物间的本质联系。数据库系统提供对数据的安全控制和完整性控制。数据库的发展大致划分为几个阶段:人工管理阶段、文件系统阶段、数据库系统阶段、高级数据库阶段。其种类大概有3种:层次式数据库、网络式数据库和关系式数据库。

  文本数据库缺陷:数据冗余和不一致,数据访问困难,数据孤立,完整性问题,原子性问题并发访问问题,安全性问题。

  数据库系统的特性:数据管理独立性;有效地完成数据存取;数据完整性和安全性;数据集中管理;并发存储与故障恢复;减少应用程序开发时间。

  数据库系统由硬件部分和软件部分共同构成,硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分则主要包括DBMS、支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。

 通用关系型数据库架构:

技术分享

1.2、数据类型与约束

  数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:

字符:CHAR(n)  VARCHAR(n)  BINARY(n)  VARBINARY(n)  TEXT(n)  BLOB(n)

数值:

  整型:TINYINT  SMALLINT  MEDIUMINT  INT  BIGINT

  修饰符:UNSIGNED  NOT NULL

  浮点型:FLOAT  DOUBLE

日期时间:DATE  TIME  DATETIME STAMP

布尔

NULL

内置:ENUM, SET


字段修饰符:

NOT NULL    非空

NULL        空

UNSIGNED    无符号

DEFAULT     不适用于TEXT类型

PRIMARY KEY 主键

UNIQUE KEY  唯一键

AUTO_INCREMENT:自动增长类型的字段必须为主键或惟一键


域约束:数据类型约束

外键约束:引用完整性约束

主键约束:某字段能惟一标识此字段所属的实体,并且不允许为空,一张表中只能有一个主键。

惟一性约束:每一行的某字段都不允许出现相同值,可以为空一张表中可以有多个

检查性约束:用户自定义有效取值范围。

1.3、MySQL介绍

  MySQL是一个小型关系数据库管理系统,与其他大型数据库管理系统(Oracle、DB2)相比,MySQL规模小、功能有限,但是它体积小、速度快、成本低,且它提供的功能对稍微复杂的应用来说已经够用。

  MySQL的主要运行流程如下所示:

技术分享

  MySQL数据库管理系统提供了许多命令行工具,这些工具可以用要管理MySQL服务器、对数据库进行访问控制、管理MySQL用户以及数据库备份和恢复工具等。

  服务器端工具程序:

mysqld:SQL后台程序。该程序运行后,客户端才能连接服务器来访问数据库。

mysqld_safe:服务器启动脚本。

mysqld_multi:服务器启动脚本,可以启动或停止系统上安装的多个服务器。

myisamchk:用来描述、检查、优化和维护MyISAM表的实用工具。

mysqlbug:MySQL缺陷报告脚本。它可以用来向MySQL邮件系统发送缺陷报告。

mysql_install_db:该脚本用默认权限创建MySQL授权表。通常只是在系统首次安装MySQL时执行一次。                

  客户端工具程序:

myisampack:压缩MyISAM表以产生更小的只读表的工具

mysql:交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具

mysqlaccess:检查访问主机名、用户名和数据库组合的权限的脚本

mysqladmin:执行管理操作的客户端程序,如创建或删除数据库,重载授权表,重新打开日志文件等,还可以用来检查版本、进程、以及服务器的状态信息

mysqlbinlog:从二进制日志读取语句的工具,二进制日志文件中包含执行过的语句,可以用来帮助系统从崩溃中恢复

mysqlcheck:检查、修复、分析以及优化表    

mysqldump:将mysql数据库转储到一个文件                   

mysqlhotcopy:当服务器运行时,快速备份MyISAM表的工具

mysqlimport:使用LOAD DATA INFILE将文本文件导入相关表的库户程序 

mysqlshow:显示数据库、表、列以及索引相关信息的客户程序

perror:显示系统或MySQL错误代码含义的工具


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

[options]:所有通行选项都可使用

command:

  create DB_NAME  创建数据库drop DB_NAME删除数据库

  debug: 打开调试日志并记录于error log中;

  status:显示简要状态信息  (--sleep #: 间隔时长--count #: 显示的批次)

  extended-status: 输出mysqld的各状态变量及其值,相当于执行mysql> SHOW GLOBAL STATUS

  variables: 输出mysqld的各服务器变量

  flush-hosts: 清空主机相关的缓存:DNS解析缓存,此前因为连接错误次数过多而被拒绝访问mysqld的主机列表

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

  refresh: 相当于同时使用flush-logs和flush-hosts

  flush-privileges、reload:刷新授权表

  flush-status: 重置状态变量的值

  flush-tables: 关闭当前打开的表文件句柄

  flush-threads:清空线程缓存

  password: 修改当前用户的密码;

  ping: 测试服务器是否在线

  processlist:显示mysql线程列表

  shutdown: 关闭mysqld进程;

  start-slave/stop-slave: 启动/关闭从服务器线程

  kill: 杀死指定的线程,可以一次杀死多个,以逗号分隔,不能有多余空格

                                                       

1.4、源码安装MySQL5.5

安装cmake软件与依赖包:

[root@mylinux home]# yum install -y cmake ncurses-devel

创建用户和组

[root@mylinux home]# groupadd mysql
[root@mylinux home]# useradd mysql -s /sbin/nologin -M -g mysql

解压编译MySQL

[root@mylinux home]#wget 
[root@mylinux home]#tar xf mysql-5.5.56.tar.gz
[root@mylinux home]#cd mysql-5.5.56
[root@mylinux home]#cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.56 -DMYSQL_DATADIR=/application/mysql-5.5.56/data -DMYSQL_UNIX_ADDR=/application/mysql-5.5.56/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii -DENABLED_LOCAL_INFILE=ON -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1 -DWITH_FAST_MUTEXES=1 -DWITH_ZLIB=bundled -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 -DWITH_EMBEDDED_SERVER=1 -DWITH_DEBUG=0
[root@mylinux home]#make 
[root@mylinux home]#make install
[root@mylinux application]# cd /application/
[root@mylinux application]# ln -s /application/mysql-5.5.56/ /application/mysql
[root@mylinux application]# mkdir /application/mysql/data -p
[root@mylinux application]# cd mysql
[root@mylinux mysql]#chown  -R root:mysql  /application/mysql
[root@mylinux mysql]#mdkir -p /application/mysql-5.5.56/tmp   
[root@mylinux mysql]#chmod -R 777 /application/mysql-5.5.56/tmp

选择配置文件与环境变量

[root@mylinux mysql]#cp support-files/my-large.cnf  /etc/my.cnf             
[root@mylinux mysql]#vim /etc/profile.d/mysql.sh
   export PATH=/application/mysql/bin:$PATH

初始化数据库

[root@mylinux mysql]# ./scripts/mysql_install_db  --user=mysql --data=http://www.mamicode.com/application/mysql/data/>

添加启动脚本与设置开机启动

[root@mylinux mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@mylinux mysql]# chmod +x /etc/init.d/mysqld 
[root@mylinux mysql]# chkconfig --add mysqld
[root@mylinux mysql]# chkconfig --level 2345 mysqld on
[root@mylinux mysql]# service mysqld start 
Starting MySQL.. SUCCESS!

mysql的配置文件:

 /etc/my.cnf或/etc/mysql/my.cnf-->$MYSQL_BASE/my.cnf -->--defaults-extra-file=my.cnf

-->~/ .my.cnf

使用配置文件的方式

  1、它依次查找每个需要查找的文件,结果是所有文件并集;

  2、如果某参数在多个文件中出现多次,后读取的最终生效;

1.5、MySQL变量与作用域


服务器变量:@@变量名

  显示:SELECT @@变量名

  设定:SET GLOBAL|SESSION 变量名=‘value‘

设定服务器变量的值:(仅用于支持动态的变量)

  支持修改的服务器变量:

    动态变量:可以MySQL运行时修改,可即时修改

    静态变量:于配置文件中修改其值,并重启后方能生效;

  动态调整参数的生效方式:

    全局变量:服务器级别,修改之后仅对新建立的会话有效;

    会话变量:会话级别,仅对当前会话有效;会话建立时,从全局继承各变量;

查看服务器变量:

mysql> SHOW [{GLOBAL|SESSION}] VARIABLES [LIKE ‘‘];
mysql> SELECT @@{GLOBAL|SESSION}.VARILABLE_NAME;
mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME=‘NAME‘;
mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME=‘NAME‘;

修改变量:默认仅管理员有权限修改全局变量

mysql> SET {GLOBAL|SESSION} VARIABLE_NAME=‘VALUE‘;

注意:无论是全局还是会话级别的动态变量修改,在重启mysqld后都会失效;想永久有效,可定义在配置文件中的相应段中[mysqld]。

1.6、MySQL中文数据乱码解决办法

1)、向表中插入数据之前先设置客户端的字符集与表保持一致

  SELECT CREATE TABLE tb_name \G   查看表的字符集
  set names 字符集;

2)、在SQL文件中指定字符集然后登陆MYSQL导入数据

  source tb_namq.sql;

3)、在SQL文件中指定字符集,通过mysql命令导入数据

  mysql  -uroot  -p’password’  tb_name<tb_name.sql

4)、指定mysql命令设置字符集

 mysql  -uroot -p’password’ --default-character-set=字符集 tb_name<tb_name.sql

5)、配置文件my.cnf中设置客户端与服务器端字符集

6)、进入MySQL,可以查看各配置字符集是否一致

SHOW VARIABLES LIKE ‘character_set%’;



本文出自 “随风而飘” 博客,请务必保留此出处http://yinsuifeng.blog.51cto.com/10173491/1946762

一、MySQL数据库基础