mysql简介

Mysql分为社区版(Community Edtion)和企业版(Enterprise Edtion),社区版就是开源的,而企业版需要收费的。本文使用的是mysql5.0的版本。Mysql是一个c/s架构的系统,因此存在客户端和服务器端。在linux系统上面,我们只需安装服务器版即可,他会自动安装服务器版的依赖关系(即安装客户端)。这里安装的服务器端的软件为mysql-server.i386。安装这个软件时,也会自动安装客户端软件mysql.i386。

在完成mysql-server安装后,启动mysql服务,service mysqld  start后mysql首先完成初始化,生成一个叫做mysql的数据库,这个数据库里面存放的就是其他数据库的元数据。

mysqld是基于tcp协议来工作的,端口号是3306,启用mysqld服务后,该进程的属主和属组都是mysql。


mysql的通信方式

mysql的通信方式分为本地通信和远程通信。

1、本地通信

本地通信指的是:mysql客户端和mysql服务器端在同一主机上,并且还要基于127.0.0.1(localhost)地址或lo接口等进行通信,这种通信方式使用unix套接字(mysql.socket)来进行通信。即为  mysql-->mysql.socket-->mysqld

在window系统上面,则通过memory或pipe来进行通信.

即为:mysql-->memory|pipe-->mysqld

 

2、远程通信

远程通信指的是:mysql客户端和mysql服务器在不同主机上,或者是mysql客户端和服务器端在同一主机,但是不是基于127.0.0.1或回环地址来进行通信的。这种通信方式是基于socket来进行通信的,也是则基于TCP/IP协议来通信的。

 

连接mysql服务器的命令格式为:

mysql -u USERNAME -p [PASSWORD] -h

其中:-u USERNAME,--user= :表示用户名,如果不写,表示使用root用户来登入;

            -p,--password=:表示登入密码,一般的我们不在命令行中写入,等这条命令输入完成之后,就会提示我们输入密码,这样增加了安全性。如果密码为空,可以不写。默认root用户的密码为空;

            -h,--host=:指定登入主机名,在linux系统中localhost和127.0.0.1表示不同的用户;默认主机名为localhost;

  说明:这里的主机名需要管理员授权才可以登入,否则也连接不上去

            --protocol {tcp|socket|pipe|memory} :使用哪种协议进行通信;

            --socket /path/to/socket_file:指定unix套接字路径;

            --safe-updates:对于update语句和delete语句,如果没有指定where字句或limit字句,则该命令拒绝发送给服务器端执行。这是一种安全措施。

在登入到mysql服务器上去时,使用help命令就可以获取mysql客户端所常用的命令


mysql服务器端的命令结束符

由于mysql数据库软件时c/s架构的,所以存在着mysql客户端命令和mysql服务器端命令,在使用mysql服务器端命令时,需要以分号(;)来作为结束符。


mysql的约束类型

mysql是一个关系型数据库,一般的关系型数据库对象大概有一下这些内容:

库、表、索引、视图、约束、储存过程、储存函数、触发器、游标、用户、权限和事务

约束的作用就是用来检测数据的合法性,不满足要求的数据将不能保存在表中。

其中约束包括如下几类:

                域约束:即数据类型约束;

                外键约束:引用完整性约束;假设有2张表,表A和表B,字段C是表A的主键,表B中也有字段C,那么字段C就是表B的外键。外键约束主要用来维护两张表的一致性。

                主键约束:某字段或某几个字段的组合能唯一标识此字段所属的实体(就是行)。该字段不能为NULL。一张表中只能有一个主键,主键具有唯一性;

                唯一性约束:某字段的值是唯一的,不能相同;该字段可以为NULL。一张表中可以有多个这样的字段,因此唯一键可以有多个;

                非空约束:即该字段不能为NULL;

                检查性约束:就是该字段的值没有超过其设定的范围,但是不符合现实。

 #例如:将age这个字段的数据类型为int,显然不符合实际,因为年龄age的范围一般都不会超过150岁,因此使用tinyint类型即可。


mysql的关系运算

关系运算主要有如下:

        投影:只输出指定的字段或属性

        选择:只输出符合条件的行

        自然连接:将将具有相同字段的且取值相同的行连接起来

        笛卡尔积:形如:(a+b)*(c+d)=ac+ad+bc+bd

        并集

        交集

        差集

        全集

        补集


mysql的三种语言

DML:Date Manapulate  Language,数据操作语言

            包括:select、insert、update、delete命令

DDL:Date  Defination  Lanuage,数据定义语言

         包括create、alter、drop命令

DCL:Date Control  Language,数据控制语言

            包括grant和revoke命令


mysql的增删查改语句 

insert语句(增加行)

其语句思想: 给哪张表添加、给几列添加值、分别是什么值

insert  into  tb_name (colum1,colum2...)      value  (value1,value2...) ;表示增加一行

insert  into  tb_name (colum1,colum2...)      values  (value1,value2...),(value11,value22...)·; 表示增加多行,有逗号隔开即可     

说明在增加列的时候,一定要保证一对一的关系,即前面括号的内容和后面括号的内容保持一致才行


插入语句的第二张写法

insert into tb_name select clause

表示将select语句的查询结果插入到另一个表中。


delete语句( 删除某行)

其语句思想:删哪张表的数据、删哪行

delete from  tb_name [where CONDITION]   [ORDER BY ...]  [LIMIT row_count];

说明:不加条件(COMDITION)表示删除的是这个表中的所有行

[ORDER BY ...] 和 [LIMIT row_count]将在后续讲到


select 查询语句

selet  colum from tb_name  [where CONDITION];

其中*表示所有字段

where表示匹配条件是什么,没有条件表示匹配所有行




update语句(修改某行)

语句思想: 给哪张表改、改哪些字段、这些字段分别改为什么值、在哪些行生效

update tb_name  SET colum=value  [where CONDITION]     [ORDER BY ...]  [LIMIT row_count];

说明:不加条件(COMDITION)表示修改的是这个表中的所有colum的值


用户的创建与删除 

创建用户

create user ‘USERNAME’@'HOST' [IDENTIFILED BY 'PASSWORD']

[IDENTIFILED BY 'PASSWORD']:表示某为这个用户指定密码

其中HOST可以有多种表示方法:

        1、可以使用ip来表示

        2、可以使用hostname来表示

        3、可以使用network来表示

        4、可以使用通配符来表示

                其中_表示匹配任意单个字符

                        %表示匹配任意长度的任意字段

 

删除用户

drop  user  'USERNAME'@'HOST'

 

删除匿名用户

mysql在初始化时,会创建2个匿名用户,为了防止系统的安全性,一般需要将这些匿名用户删除掉。

# mysql -uroot -p

mysql> use mysql

mysql> select user,host,password from user;

使用上述命令即可查看哪些是匿名用户,匿名用户的user为空"",主机为localhost,密码也为空。

删除匿名用户的命令

mysql> drop user ''@'localhost';

mysql> drop user ''@'mb';

 



给用户设定密码的三种方式

1、mysql>set password for  'USERNAME'@'HOST'=password('password');

2、mysql>update  user set password=password('password') where  user='root' and host='127.0.0.1';

3、mysqladmin -u USERNAME -p password 'NEW_PASSWORD'


用户授权

grant pri1,pri2...  on dn_name.tb_name to 'USERNAME'@'HOST' [IDENTIFILED BY 'PASSWD']

all privilege:表示所有权限


取消用户权限

revoke  pri1,pri2   on  db_name.tb_name from   'USERNAME'@'HOST'



查看用户授权信息

show grants  for 'USERANME'@'HOST'

授权完毕后,执行flush privileges命令让系统重读授权表


 mysql语句的执行方式

(1)、mysql交互式方式

当某个用户登录mysql服务器成功后,出现"mysql>"等提示符时,这就是mysql的交互式方式,在此界面下可以执行mysql语句。

(2)、脚本方式

mysql的脚本方式就是在shell环境下导入某个sql文件,并将该sql文件中的sql命令执行一次。

如:

# mysql < /path/to/somefile.sql 


转载于:https://blog.51cto.com/xslwahaha/1550664