MySQL入门(一)
1. mysql是什么?
mysql是一个小型的关系型数据库管理系统,开发者为瑞典mysql ab 公司,在2008年1月16号被sun公司收购,之后又在2009年4月被oracle公司收购,现属于 oracle 旗下产品。
mysql 是最流行的关系型数据库管理系统之一,在 web 应用方面,mysql是最好的 rdbms (relational database management system,关系数据库管理系统) 应用软件之一。mysql被广泛的应用在internet上的中小型网站中。mysql 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 mysql 作为网站数据库。
2. 数据库的分类
在实际项目开发中,数据库一共分为两大类:
2.1 关系型数据库
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。
小型数据库:微软access
中型数据库:
db2:ibm公司的数据库产品,收费的。常应用在银行系统中. 在中国的互联网公司,要求去ioe
mysql:开源免费的数据库,小型的数据库.已经被oracle收购了.mysql5.5版本之后都是由oracle发布的版本。
sql server:microsoft 公司收费的中型的数据库。c#、.net等语言常使用。
大型数据库:
oracle:收费的大型数据库,oracle公司的产品。oracle收购sun公司,收购mysql。
2.2 非关系型数据
非关系型数据库有:redis、mongodb
3. mysql命令行使用
1. 连接mysql
格式: mysql -h主机地址 -u用户名-p用户密码
a. 连接到本地mysql
首先打开dos窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,
回车后提示你输密码。 mysql的提示符是: mysql> 。(默认root用户没有密码)
b. 连接到远程主机上的mysql
假设远程主机的ip为:218.105.110.116,用户名为root,密码为abcd123456。
则键入以下命令:mysql -h218.105.110.116 -u root -p abcd123456;(注:u与root之间可以不用加空格,其它也一样)。
2. 启动mysql服务
net start mysql
3. 停止mysql服务
net stop mysql
4. 查询端口是否冲突
netstat –na | findstr 8080 查看被监听的端口 , findstr用于查找后面的端口是否存在。
5. 退出mysql
quit或者exit退出
6. 修改密码:
格式:mysqladmin -u用户名 -p旧密码 password 新密码
例如给root修改密码:
mysqladmin -u root -p ab12 password djg345
4. sql语句
sql,全称structured query language,简称sql,中文叫结构化查询语言。
4.1 sql的分类
ø 数据定义语言:简称ddl(data definition language),用来定义数据库对象:数据库,表,列等。关键字:create,alter,drop等
ø 数据操作语言:简称dml(data manipulation language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
ø 数据控制语言:简称dcl(data control language),用来定义数据库的访问权限和安全级别,及创建用户;关键字:grant等
ø 数据查询语言:简称dql(data query language),用来查询数据库中表的记录。关键字:select,from,where等
4.2 sql语句的使用
1. 创建mysql数据库:
create database 数据库名称;
示例代码:
① 选中localhost,然后切换到sql编辑器
② 在sql编辑器中输入create database db_20171227;如下图所示:
2. 删除数据库
基本语法:
删除就是不想要了,不想要了就是丢掉,丢掉的单词:drop
drop database 数据库名称;
示例代码:
特别注意:删除数据库是不可逆的,删除之前一定要慎重。
3. 查看数据库
①查看所有数据库
查看的单词:show
查看所有数据库:show databases;
示例代码:
②显示指定的某类数据库
show databases like ‘db%’; //查询所有以db开头的所有数据库
普及like模糊查询,有两个关键字需要记住:
_(下划线):代表任一一个字符,可能代表a也可能代表b...
%(百分号):代表任意的n个字符,可能代表ab也可能代表abcd...
4. 创建表
创建数据表的基本语法:
create table 数据表名称(
列名称(英文) 列类型 列约束(not null)
);
示例代码:
5. 删除数据表
丢掉:drop
表:table
删除数据表:drop table 数据表名称;
6. 修改数据表(数据表的名称)
重命名:rename
rename table 原来的名字 to 新名称;
7. 查看数据表
①查看所有的数据表或某类的数据
show tables like ‘_或%’;
②查看数据表的结构
desc 数据表名称;
8. 插入记录:insert
语法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
insert into 表 values select * from 表
9. 更新数据表中的记录
基本语法:
更新:update
update 数据表名称 set 字段(列) = 更新后的值,字段(列) = 更新后的值 where 条件;
10. 从数据表中查询数据
①查询所有数据
查询:select
select * from 数据表名称;
或
select 字段(某一列) from 数据表名称;
②根据条件查询数据(多了一个where)
11. 从数据表中删除数据(重点)
基本语法:
删除:delete
delete from 数据表名称 where 条件;
delete from 数据表名称;
truncate 数据表名称;
两者的功能都是删除所有数据,但是truncate删除的数据,其主键(primary key)会重新编号。而delete from删除后的数据,会继续上一次编号。
4.3 cmd中文乱码
修改my.ini文件,然后重启mysql服务器
5. 多表之间的关系
表与表之间的关系,说的就是表与表之间数据的关系。
5.1 一对一关系
在实际工作中,一对一在开发中应用不多,因为一对一完全可以创建成一张表
案例:一个丈夫只能有一个妻子
5.2 一对多关系
案例:一个分类对应多个商品
总结:有外键的就是多的一方。
1. 注意事项:
一对多关系和一对一关系的创建很类似,唯一区别就是外键不唯一。
2. 一对多关系创建:
添加外键列
添加外键约束
3. 注意事项:
ø 需要中间表去完成多对多关系的创建
ø 多对多关系其实就是两个一对多关系的组合
5.3 多对多关系创建:
ø 创建中间表,并在其中创建多对多关系中两张表的外键列
ø 在中间表中添加外键约束
ø 在中间表中添加联合主键约束
6. 多表关联查询
6.1 交叉连接
交叉连接的关键字:cross join
1. 隐式交叉连接
select * from a, b
2. 显式交叉连接
select * from a cross join b
6.2 内连接
内连接的关键字:inner join
内连接也叫等值连接,内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行。
1. 隐式内连接
select * from a,b where a.id = b.id
2. 显式内连接
select * from a inner join b on a.id = b.id
6.3 外连接
外联接可以是左向外联接、右向外联接或完整外部联接。也就是说外连接又分为:左外连接、右外连接、全外连接
外连接需要有主表或者保留表的概念。
在 from子句中指定外联接时,可以由下列几组关键字中的一组指定:
1. 左外连接:left join 或者 left outer join
select * from a left join b on a.id = b.id
2. 右外连接::right join 或者 right outer join
select * from a right join b on a.id = b.id
3. 全外连接(mysql不支持):full join 或 full outer join
select * from a full join b on a.id = b.id
外连接总结:
l 通过业务需求,分析主从表
l 如果使用left join,则主表在它左边
l 如果使用right join,则主表在它右边
查询结果以主表为主,从表记录匹配不到,则补null
6.4 分页查询
mysql的分页关键字是:limit
格式:
select * from table limit [offset,] rows
6.5 子查询
定义:
子查询允许把一个查询嵌套在另一个查询当中。
子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询。
子查询可以包含普通select可以包括的任何子句,比如:distinct、 group by、order by、limit、join和union等;
但是对应的外部查询必须是以下语句之一:select、insert、update、delete。
位置:
select 中、from 后、where 中.
group by 和order by 中无实用意义。
7. mysql事务处理
mysql 事务主要用于处理操作量大,复杂度高的数据。
ø 在 mysql 中只有使用了 innodb 数据库引擎的数据库或表才支持事务。
ø 事务处理可以用来维护数据库的完整性,保证成批的 sql 语句要么全部执行,要么全部不执行。
ø 事务用来管理dml操作,比如 insert,update,delete 语句
一般来说,事务是必须满足4个条件(acid):
ø atomicity(原子性)
构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
ø consistency(稳定性)
数据库在事务执行前后状态都必须是稳定的。
ø isolation(隔离性)
事务之间不会相互影响。
ø durability(可靠性)
事务执行成功后必须全部写入磁盘。