MYSQL:关系型数据库
存储引擎:负责将逻辑层的概念转化为物理层机制,在物理层完成物理机制。
支持事务:transaction
必须满足的条件:ACID(一致性,持久性,原子性,隔离性)
锁:并发访问
随机访问:数据在磁盘上是随机存储的
安装:
OS Vendor使用操作系统安装:
以CentOS为例:mysql,
mysql-server:
mysql-devel:编译安装时需要
MySQL官方提供的安装:官方网站:www.mysql.com
源码编译安装
通用二进制格式程序包安装
rpm包安装
还可以通过镜像下载:http://mirrors.sohu.com/
MySQL的配置文件:my.cnf,集中式多段配置文件
MySQL服务器程序:mysqld
客户端程序:mysql, mysqldump, mysqladmin
建议在生产环境中将mysql安装在逻辑卷上,这样方便以后的管理,空间不够的话可以增大空间。
datadir: /var/lib/mysql/
datadir: /usr/local/mysql/data/
mysqld: mysql,:mysql
以mysql用户的身份操作,属主和属组都为mysql,并且对所操作的目录有读和写的权限。
安装操作
1:创建逻辑卷并挂载
创建磁盘分区
#fdisk /dev/sda
创建物理分区
#pvcreate /dev/sda{3,5}
创建卷组为myvg
#vgcreate myvg /dev/sda{3,5}
创建逻辑卷mydata
#lvcreate -L 20G -n mydata myvg
对其进行格式化
#mke2fs -t ext4 -L MYDATA -b 2048 /dev/myvg/mydata
进行挂载
#mkdir /mydata
#mount -a
要使得能够开机自动挂载,需要编辑配置文件/etc/fstab
在/mydata下创建data目录
#mkdir/mydata/data
2:解压安装
添加系统用户mysql
#useradd -r mysql
修改属主和属组
#chown -R mysql:mysql /mydata/data
下载的文件解压到/usr/local/
#tar xfmysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local
在这里,我们还有查看是否安装启动别的mysql版本的服务器,如果有,那么我们需要将其关闭
#ss -tanl其中3306端口需要是关闭状态
在/usr/local/下
#ln -sv mysql-5.5.33-linux2.6-x86_64 mysql
#chown -R root:mysql /usr/local/mysql/*
#cd mysql/support-files有样例,我们可以根据自己的需要选择
将选择的文件复制一份到/etc/目录下并修改文件名为my.cnf
#cp my-large.cnf /etc/my.cnf
3:修改配置文件
#vim /etc/my.cnf
找到相关设置进行修改操作
thread_concurrency = 4并发核心数,如果物理核心为2,这里就可以填写4
在下面添加datadir = /mydata/data
添加
innodb_file_per_table = 1 每表一个表空间
服务脚本
#cp mysql.server /etc/rc.d/init.d/mysqld
添加mysql服务
#chkconfig --add mysqld
启动mysql
#service mysqld start
这时候显示启动失败了,分析出来我们要先初始化,因而我们安装mysql时要注意,第一次安装启动时要进行初始化,对所出现的问题我们进行处理
先将/mydata/data/下的所有文件删除掉
#rm -rf /mydata/data/*
进行初始化
#cd /usr/local/mysql/
#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/初始化成功
启动服务
#service mysqld start
这时候还不能连接客户端
# vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$PATH
执行脚本
# . /etc/profile.d/mysql.sh
#mysql就可以进入了
4:因为我们的安装不在标准路径下,所以还要导出相关文件
导出帮助文件
#vim /etc/man.config
MANPATH /usr/local/mysql/man
导出头文件
#ln -sv /usr/local/mysql/include /usr/local/mysql
导出库文件
#vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
至此我们的mysql配置完成。
mysql> show [global|session] variables;显示服务器参数变量
有些变量的值可以修改,能够改变mysql的工作特性
有些可以动态调整,即刻生效;
另外一些只能修改配置文件后,重启生效;
mysql> show [global|session] status;显示服务器状态变量,记录了当前包括过去的时间内mysql的运行统计数据
MySQL用户名:USERNAME@HOST
mysql客户端执行命令:
客户端命令:不需语句结束符
mysql> help
服务器端命令:特指SQL语句,必须有语句结束符,默认为分号;
mysql> help COMMAND
用户管理:
创建用户:
CREATE USER username@host [IDENTIFIED BY 'password'];
用户或主机可以使用通配符:
%:匹配任意长度的任意字符;
_: 匹配任意单个字符;
例如:CREATE USER‘wpuser’@‘172.16.%.%’IDENTIFIED BY 'wppass'
允许172.16.网段的主机连接创建wpuser用户 密码为wppass
用户授权:GRANT ALL PRIVILEGES ON dbname.tablename TO username@host [IDENTIFIED BY 'password'];
dbname.tablename dbname表示库名
tablename表示表名
修改用户密码:
1、mysql> SET PASSWORD FOR username@host=PASSWORD('password');
2、# mysqladmin -uusername password 'password' -p
-p 后面跟以前的密码
删除用户:DROP USER username@host;
授权
GRANT ALL ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'mypass';有特殊符号需要用引号引起来
mysql>SELECT VERSION(); 显示版本号
mysql>SHOW DATABASES; 显示数据库
mysql>SELECT user,host,password FROM user; 从user表查询user,host,password 相关信息
mysql>FLUSH PRIVILEGES; 重读授权表
加密码:
mysql>SET PASSWORD FOR‘root‘@host=PASSWORD('password');
创建表:
mysql>CREATE TABLE tb_name (col1 defination, col2 defination, ..., key defination);
删除表:
mysql>DROP TABLE tb_name;
INSERT INTO :插入内容
SELECT 字段FROM表WHERE ;
字段:
col1, col2
*
col1 AS NEWNAME, col2,
比较运算:>, =, <=, =, !=
NULL: IS NULL, IS NOT NULL
LIKE :
%: 任意长度的任意字符
_:任意单个字符
IN (LIST)
RLIKE: 正则表达式书写模式
UPDATE 表名SET字段名=值WHERE;
DELETE FROM 表名WHERE ;
mysql>
quit, \q退出
delimiter, \d变换语句结束符,定义使用的结束符
go, \g不知道结束符而把语句送到服务器端去执行
use, \u设定默认数据库
ego, \G不知道结束符而把语句送到服务器端去执行,并且将每一行的结果纵向显示
system, \!不退出当前mysql客户端程序而执行系统命令
status, \s显示当前mysql服务器的状态信息
mysql:执行方式有两种
交互式方式:
-h, --host=指定要连接的远程主机
-u, --user=指定用户名
-p, --password=密码
-D db_name, --database=可以直接将某个指定的数据库设定为数据库
-e 'SQL_Statement;'不会连接到主机,而是将命令送到对方主机后直接将结果取回来
批处理模式:(使用sql脚本)
mysql OPTIONS < script.sql
mysql> source /path/to/script.sql
#vim test.sql
create database wpdb;
Create user‘wpuser’@’172.16.%.%’identified by‘wppass’;
Create user‘wpuser’@’localhost’identified by‘wppass’;
Grant all wpdb.*‘wpuser’@’172.16.%.%’;
Grant all wpdb.*‘wpuser’@’localhost’;
#mysql -uroot -pmypass < test.sql
mysqld, mysql: /etc/my.cnf配置文件
/etc/my.cnf, /etc/mysql/my.cnf, $MYSQL_BASE/my.cnf, ~/.my.cnf
#vim .my.cnf
[client]
user=root
host=localhost
password=mypass
#chmod 600 .my.cnf 修改权限对当前用户有效
这样本机用户就不用每次都指定用户名、主机名、密码了,而其他用户不会有权限,
显示所支持的所有字符集:
mysql> SHOW CHARACTER SET;
显示所有字符集的排序规则:
mysql> SHOW COLLATION;
关系型数据库:
Constraint:
主键:primary key
不能为空,惟一;
惟一键:uniq key
可以为空,惟一;
外键:foreign key
引用性约束
检查性约束:
0
MySQL基础操作练习(所属的库叫做testdb):
新建如下表(包括结构和内容):
ID Name Age Gender Course
1 Ling Huchong 24 Male Huashan
2 Huang Rong 19 FemaleEmen
3 Lu Wushaung 18 FemaleHengshan
4 Zhu Ziliu52 MaleKongdong
5 Chen Jialuo22 MaleShaolin
创建库:
mysql>create database testdb
启用testdb库
mysql>use testdb
创建表tb1
mysql>CREATE TABLE tb1 (ID TINYINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, Name CHAR(30) NOT NULL UNIQUE KEY, Age TINYINTUNSIGNED, Gender CHAR(1) DEFAULT 'M', Course VARCHAR(50) NOT NULL);
查看数据库
mysql> show databases;
DESCRIPTION tb1 查看有几个字节
插入内容
mysql> insert into tb1 values (1,'Ling Huchong',24,'Male','Huashan');
mysql> insert into tb1 values (2,'Huang Rong',19,'Female','Emen');
mysql> insert into tb1 values (3,'Lu Wushaung',18,'Female','Hengshan');
mysql> insert into tb1 values (4,'Zhu Ziliu',52,'Male','Kongdong');
mysql> insert into tb1 values (5,'Chen Jialuo',22,'Male','Shaolin');
至此tb1表所有内容都存在了,可以查看一下:
2、完成如下操作
(1)找出性别为女性的所有人;
mysql> SELECT name FROM tb1 WHERE Gender='Female';
(2)找出年龄大于20的所有人;
mysql> SELECT name FROMtb1WHERE Age>20;
(3)修改Zhu Ziliu的Course为Wudang;
mysql> UPDATEtb1SET Course='Wudang' WHERE name='Zhu Ziliu';
(4)删除年龄小于等于19岁的所有人;
mysql> DELETE FROMtb1WHERE Age<=19;
(5)创建此表及所属的库;
(6)授权给testuser对testdb库有所有访问权限;
mysql> GRANT ALL ON testdb.* TO 'testuser'@'%';
mysql>DROP TABLE tb1;删除表tb1