MySQL学习基础
MySQL是被Sun公司收购了,所以也有热咖啡图标,不过MySQL的作者后来又做了一个MariaDB,小海豚图标,也很好用。
MySQL学习:
《MySQL网络数据库设计与开发》(电子工业出版社)
数据库的基本的概念都是一样的,而且都是用的标准的SQL语法。
学习了SQLServer之后,看MySQL感觉很熟悉,好像在复习一样。
概念模型:
域,domain,属性的取值范围。
数据模型:
层级模型,IBM开发的数据库,IMS就是的。
网状模型,数据库任务组(DBTG)
关系模型,最常见的数据库的形式,oracle,sybase,informix,MS SQL Server,visual FoxPro。
面向对象的数据模型,CAD,每个对象都要唯一标识(object identifier,OID),最具活力。
为了完整数据库设计任务,需要从6个方面来:
需求分析设计;
概念结构设计(画E-R图,最后将所有单个的E-R图拼接,形成全局模式的E-R图);
逻辑结构设计;
数据库物理结构设计;
数据库实施;
数据库运行和维护。
建立索引3思:
一个属性经常在查询中出现;
一个属性经常作为聚集函数的参数;
一个属性经常在连接操作的连接条件中出现,这些情况请建立索引;
dos窗口登录mysql
定位到MySQL目录,输入:mysql -h 127.0.0.1 -u root -p
管理系权限:
授权myuser用户student表的select权限:
USE 学生管理
GRANT SELECT ON student
TO myuser@localhost;
收回权限:
REVOKE SELECT ON student
FROM myuser@localhost
查看权限:
SHOW GRANTS FOR myuser@localhost
备份数据mysqldump
备份学生管理数据库的student表和scores表到d:/data/路径:
mysqldump -h localhost -u root -p 123456 学生管理 student scores>d:/data/twotables.sql
数据还原:
mysql -u root -p 123456 学生管理<d:/data/twotables.sql
修改mysql配置(端口,字符集):
修改安装目录下的my.ini文件的[client],[mysqld]
mysql常用的图形管理工具:
MySQL GUI tools:MySQL官方的图形化管理工具。
phpMyAdmin:最常用的MySQL维护工具,一个用PHP开发的基于web方式架构在网站主机上的MySQL图形管理工具,可以使用XAMPP来集成化安装,很方便。
Navicat:支持大部分MySQL功能,包括触发器,存储过程,函数,事件,视图,管理用户,和微软的sqlserver很类似,有免费版本。
SQLyog:完全免费,通过网络来维护远端的mysql数据库,著名的Webyog公司出品。
不过对比phpmyadmin和navicat,我觉得还是navicat的界面比较美观,而phpmyadmin的界面有点太老了。
操作数据库对象:
创建数据库(并设置字符集为utf-8):
CREATE DATABASE [IF NOT EXISTS] 学生管理;
DEFAULT CHARACTER SET UTF-8;
查看数据库(显示所有的数据库,注意是DATABASE+S):
SHOW DATABASES;
删除数据库:
DROP DATABASE [IF EXISTS] 学生管理;
数据库引擎:
InnoDB存储引擎(默认),支持事务,外键,自增长主键,并发,创建表的表结构存储在.frm文件,但是读写效率稍差,占用数据空间相对较大。可以最大存储64TB。
MyISAM存储引擎,不支持事务,外键,完整性约束,并发,但是处理速度快,占用空间小。大小受限制。
MEMORY存储引擎,不支持事务,外键,所有数据放在内存中,处理速度非常快,但是内存数据断电就没有了(你懂得),数据处理默认使用hash索引,速度比使用B型树索引快。大小受限制。
查看数据库引擎:
SHOW ENGINES;
数据表的基本操作
创建表:
USE `学生管理`; CREATE TABLE student3(
id char(9) NOT NULL COMMENT '学号',
name varchar(50) NOT NULL COMMENT '姓名',
sex char(2) default NULL COMMENT '性别',
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=gbk;
查看表:
DESCRIBE student
或者DESC student
修改表:
重命名:
将表studen 重命名 student
ALTER TABLE studen RENAME student;
增加字段:
ALTER TABLE student ADD age int;
删除字段:
ALTER TABLE student DROP age;
更改表的存储引擎:
ALTER TABLE student ENGINE=MyISAM;
创建索引:
ALTER TABLE student ADD UNIQUE INDEX index_no(sno);
删除索引:
DROP INDEX index_no ON student;
创建视图:
CREATE VIEW 视图
AS
SELECT * FROM student;
查看视图:
DESCRIBE 视图;
删除视图:
DROP VIEW 视图;
触发器
触发器是有insert ,update , delete 等事件触发的操作,满足触发条件,自动执行触发器定义的语句。
创建触发器:
CREATE TRIGGER 触发器 BEFORE | AFTER 触发事件
ON 表名 FOR EACH ROW 执行语句
比如
CREATE TRIGGER 触发器3 AFTER INSERT
ON student3 FOR EACH ROW
INSERT INTO student4 VALUES('1','TRIGGER','BOY');
查看触发器:
SHOW TRIGGERS;
删除触发器:
DROP TRIGGER 触发器;
数据表操作
然后对数据表的增删改查和SQLServer差不多,因为都是SQL语句,所以几乎都是大同小异:
限制查询:
就是限制查询条数的语法不同,在MySQL的限制查询语句:
SELECT * FROM student LIMIT 2;
SELECT * FROM student LIMIT 2;
查询student表的第2到第3条数据。
多表查询:
SELECT student.id,name, scores.score
FROM student,scores
WHERE student.id=scores.sid;
合并查询结果:
使用UNION合并查询结果,并且去除重复的数据
使用UNION ALL合并查询结果不去重
SELECT id,name,SEX FROM student
union all
SELECT id,score,SID FROM scores;
插入一条数据:
INSERT INTO student VALUES(1,'david','boy');
插入多条数据:
INSERT INTO student VALUES (1,'david','boy'), (2,'MERRY','GIRL');
存储过程:
所有的SQL语句,大小写都是不敏感的
定义变量:
DECLARE my_sql VARCHAR(6);
赋值:SET my_sql='hello';
创建存储过程:
和sqlserver(使用go)不同的是,MySQL使用;分号作为结束标志,那么如果一个存储过程由多个sql语句组成怎么办?
这里使用DELIMITER $$ 或者DELIMITER ##
这样就是即将是使用 自定义的字符作为结束标志,要想恢复使用分号,作为结束符号,运行DELIMITER ;(分号)即可
DELIMITER ##
CREATE PROCEDURE DELETE_STU(IN BH INT)
BEGIN
DELETE FROM student WHERE id=BH;
END##
DELIMITER;
存储过程调用
使用CALL 存储过程
CALL DELETE_STU(3)
流程控制语句:
IF ...THEN...ELSEIF...THEN...ELSE......END IF;
DELIMITER $$
CREATE PROCEDURE COMPAR(IN K1 INT,
IN K2 INT,OUT K3 CHAR(6))
BEGIN
IF K1>K2 THEN
SET K3='大于';
ELSEIF K1=K2 THEN
SET K3='等于';
ELSE
SET K3='小于';
END IF;
END $$
DELIMITER;
CASE条件语句
一个小CASE可以充当一个IF-THEN-ELSE语句
delimIter ##
CREATE PROCEDURE sexName(IN str VARCHAR(6),OUT sex VARCHAR(6))
BEGIN
CASE str
WHEN 'M' THEN SET sex='男';
WHEN 'F' THEN SET sex='女';
ELSE SET sex='无';
END case;
END ##
delimiter;
循环语句
while
while 条件 DO
循环体;
end while;
delimIter ##
CREATE PROCEDURE dowhile()
BEGIN
declare v1 int default 5;
while v1>0 DO
set v1=v1-1;
end while;
END ##
delimiter;
计算1到n的和
create PROCEDURE sum2(a int)
BEGIN
DECLARE sum int DEFAULT 0;
DECLARE i int default 1;
while i<=a do
set sum=sum+i;
set i=i+1;
end while;
SELECT sum;
END
repeat
repeat
循环体;
until 条件 end repeat;
create PROCEDURE sum2(a int)
BEGIN
DECLARE sum int DEFAULT 0;
DECLARE i int default 1;
REPEAT
set sum=sum+i;
set i=i+1;
until i>a end REPEAT;
SELECT sum;
END
loop
loop_name:loop
if 条件 THEN -- 满足条件时离开循环
leave loop_name; -- 和 break 差不多都是结束训话
end if;
end loop;
create PROCEDURE sum2(a int)
BEGIN
DECLARE sum int DEFAULT 0;
DECLARE i int default 1;
loop_name:loop
if i>a THEN
LEAVE loop_name;
end if;
set sum=sum+i;
set i=i+1;
end LOOP;
SELECT sum;
END
执行存储过程:
call sum2(10);
结果:55
删除存储过程:
drop PROCEDURE sum2;
存储函数
存储函数也是过程对象之一,和存储过程很像,但是存储函数没有输出参数,不用call调用,必须包含return语句(返回一行一列的数据)
与存储过程不同,您可以在SQL语句中使用存储的函数,也可以在表达式中使用。 这有助于提高程序代码的可读性和可维护性。
创建存储函数
#定义函数
delimiter $$
create function getGameName(gameid int) returns VARCHAR(45)
DETERMINISTIC
begin
return (select name from student where id=gameid);
end $$
delimiter;
执行存储函数:
select getGameName(2);
删除存储函数:
drop FUNCTION getGameName
定义条件和处理程序
定义条件和处理程序是事先定义程序执行过程中可能遇到的问题。并且可以在处理程序中定义解决这些问题的办法。这种方式可以提前预测可能出现的问题,并提出解决办法。这样可以增强程序处理问题的能力,避免程序异常停止。MySQL中都是通过DECLARE关键字来定义条件和处理程序。本小节中将详细讲解如何定义条件和处理程序。
1.定义条件
MySQL中可以使用DECLARE关键字来定义条件。其基本语法如下:
DECLARE condition_name CONDITION FOR condition_value
condition_value:
SQLSTATE [VALUE] sqlstate_value | mysql_error_code
其中,condition_name参数表示条件的名称;condition_value参数表示条件的类型;sqlstate_value参数和mysql_error_code参数都可以表示MySQL的错误。例如ERROR 1146 (42S02)中,sqlstate_value值是42S02,mysql_error_code值是1146。
【示例6】 下面定义"ERROR 1146 (42S02)"这个错误,名称为can_not_find。可以用两种不同的方法来定义,代码如下:
//方法一:使用sqlstate_value
DECLARE can_not_find CONDITION FOR SQLSTATE '42S02' ;
//方法二:使用mysql_error_code
DECLARE can_not_find CONDITION FOR 1146 ;
2.定义处理程序
MySQL中可以使用DECLARE关键字来定义处理程序。其基本语法如下:
DECLARE handler_type HANDLER FOR
condition_value[,...] sp_statement
handler_type:
CONTINUE | EXIT | UNDO
condition_value:
SQLSTATE [VALUE] sqlstate_value |
condition_name | SQLWARNING
| NOT FOUND | SQLEXCEPTION | mysql_error_code
其中,handler_type参数指明错误的处理方式,该参数有3个取值。这3个取值分别是CONTINUE、EXIT和UNDO。CONTINUE表示遇到错误不进行处理,继续向下执行;EXIT表示遇到错误后马上退出;UNDO表示遇到错误后撤回之前的操作,MySQL中暂时还不支持这种处理方式。
注意:通常情况下,执行过程中遇到错误应该立刻停止执行下面的语句,并且撤回前面的操作。但是,MySQL中现在还不能支持UNDO操作。因此,遇到错误时最好执行EXIT操作。如果事先能够预测错误类型,并且进行相应的处理,那么可以执行CONTINUE操作。
condition_value参数指明错误类型,该参数有6个取值。sqlstate_value和mysql_error_code与条件定义中的是同一个意思。condition_name是DECLARE定义的条件名称。SQLWARNING表示所有以01开头的sqlstate_value值。NOT FOUND表示所有以02开头的sqlstate_value值。SQLEXCEPTION表示所有没有被SQLWARNING或NOT FOUND捕获的sqlstate_value值。sp_statement表示一些存储过程或函数的执行语句。
【示例7】 下面是定义处理程序的几种方式。代码如下:
//方法一:捕获sqlstate_value
DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'
SET @info='CAN NOT FIND';
//方法二:捕获mysql_error_code
DECLARE CONTINUE HANDLER FOR 1146 SET @info='CAN NOT FIND';
//方法三:先定义条件,然后调用
DECLARE can_not_find CONDITION FOR 1146 ;
DECLARE CONTINUE HANDLER FOR can_not_find SET
@info='CAN NOT FIND';
//方法四:使用SQLWARNING
DECLARE EXIT HANDLER FOR SQLWARNING SET @info='ERROR';
//方法五:使用NOT FOUND
DECLARE EXIT HANDLER FOR NOT FOUND SET @info='CAN NOT FIND';
//方法六:使用SQLEXCEPTION
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='ERROR';
上述代码是6种定义处理程序的方法。
第一种方法是捕获sqlstate_value值。如果遇到sqlstate_value值为42S02,执行CONTINUE操作,并且输出"CAN NOT FIND"信息。
第二种方法是捕获mysql_error_code值。如果遇到mysql_error_code值为1146,执行CONTINUE操作,并且输出"CAN NOT FIND"信息。
第三种方法是先定义条件,然后再调用条件。这里先定义can_not_find条件,遇到1146错误就执行CONTINUE操作。
第四种方法是使用SQLWARNING。SQLWARNING捕获所有以01开头的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。
第五种方法是使用NOT FOUND。NOT FOUND捕获所有以02开头的sqlstate_value值,然后执行EXIT操作,并且输出"CAN NOT FIND"信息。
第六种方法是使用SQLEXCEPTION。SQLEXCEPTION捕获所有没有被SQLWARNING或NOT FOUND捕获的sqlstate_value值,然后执行EXIT操作,并且输出"ERROR"信息。
MySQL用户安全性管理
安装mysql之后会自动安装一个mysql数据库,里面的user表记录了多数的权限信息,包括ssl加密信息。
root密码丢失的解决办法:
1、停止权限判断:
mysqld --skip -grant -tables
2、登录用户修改密码:
mysql -u root;
UPDATE mysql.user set Password=PASSWORD('root') where User='root' and Host='localhost';
3、加载权限列表:
flush privileges;
MySQL学习基础的更多相关文章
- MySQL学习基础 之 起航篇
MySQL 学习来自慕课网<与MySQL的零距离接触> MySQL是一个开源的关系型数据库管理系统 MySQL分为社区版和企业版 MySQL登录和退出相关的命令 参数 描述 -D,--da ...
- MySQL学习——基础
本文是MySQL的基础知识. Linux启动MySQL服务命令 : service mysql start Linux关闭MySQL服务命令 : service mysql stop 登录MySQL命 ...
- MySQL学习基础知识1
什么是数据库? 数据库就是存储数据的仓库. 存储方式: 变量 无法永久存储 文件处理,可以永久存储,弊端:文件只能在自己的计算机读写,无法被分享(局域网除外) 数据库分类: 1.关系型数据库 提供某种 ...
- MySQL学习基础知识2
1.基础语句 查 select(* | 字段名 | 四则运算 | 聚合函数) from 表名称; 加上as取别名 as可省略 如:select name, (math+english)/2 total ...
- Mysql学习---基础操作学习2
基本数据类型 Mysql基本数据类型:二进制,数值[整数,小数].字符串[定长,变长]. 二进制数据.时间和枚举集合 bit[(M)] 二进制位(101001),m表示二进制位的长度(1-64),默认 ...
- Mysql学习基础语法
-- Mysql 数 据 库 语 法 创建数据库 create database 数据库名; 创建表 ) ); 复制表和数据 create table 复制后新的表名 select * from 旧表 ...
- mysql学习基础知识3
1.视图 简化sql语句的编写,限制可以查看的数据 一张虚拟的表,不占任何内存,查视图时都是临时从所查的表中拿数据 特点: 对于视图的增删改查 都会同步到原始表 对原始表的修改,会同步到视图内可查看的 ...
- Mysql学习---基础操作学习
1.1. 基本操作 数据库引擎 Inodb:支持事务[原子性操作,完成一些列操作后才算完成操作,否则rollback] MyISAM: 支持全文索引,强调了快速读取操作,主要用于高负载的select ...
- 借助node.js + mysql 学习基础ajax~
很多小白不知道ajax怎么学,所以就弄了个node后台模拟下基本的ajax请求. 环境要求是安装node~ 先上linkMysql.js var mysql = require('mysql') va ...
随机推荐
- .Net MVC5路由机制与扩展
新建一个MVC项目启动后,首先访问的地址是http://localhost:xxx/Home/Index,这时候我们也明白因为在程序中有个叫做Home的控制器,并且在这个控制器下面有个叫做Index的 ...
- JgrId 无数据返回设置
在addJSONData方法中 while (i < len) { 前增加以下代码 ) { rowData.push('<tr role="row" id=" ...
- 【Dnc.Api.Throttle】适用于.Net Core WebApi接口限流框架
Dnc.Api.Throttle 适用于Dot Net Core的WebApi接口限流框架 使用Dnc.Api.Throttle可以使您轻松实现WebApi接口的限流管理.Dnc.Api.Thr ...
- WPF显示Gif动画
WPF的Image控件不能很好的支持.gif文件.解决办法有如下2种. 1使用MediaElement <MediaElement Source="file://D:\anim.gif ...
- JAVA异常的最佳工程学实践探索
此文已由作者占金武授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 先说明一下背景: 项目日志中的Exception会被哨兵统一监控并报警 比较多的项目基于dubbo在做服务化 ...
- ASP.NET Core根据环境切换NLog配置
1.新建NLog配置文件,名称分别为nlog.config和nlog.debug.config <?xml version="1.0"?> <nlog xmlns ...
- OpenStack 业务链networking-sfc介绍 (1) - 概述
原文链接:https://blog.csdn.net/bc_vnetwork/article/details/65630355 1. Service Function Chain概述 Neutron ...
- [转载] cassandra Unable to complete request: one or more nodes were unavailable
今天碰到的问题跟这个一模一样,特地转过来记录一下 https://support.datastax.com/hc/en-us/articles/204893189-CQL-query-results- ...
- 【bug】—— ios scroll 滚动穿透
BUG描述 在 ios 微信浏览器或原生浏览器中,主内容容器.content在文档流内,并且overflow-y: scroll.在其之上有一个 fixed 定位的弹出层.popUp,滚动.popUp ...
- SpringMvc渲染视图
这篇博文讨论的问题是从ModelAndView如何渲染到页面. 首先要知道每个请求处理完之后都会返回一个ModelAndView对象. 这里我分6种情况来分析,代表6种返回类型: ModelAndVi ...