直接网上下载,看着提示安装就行,要是看不懂英文,手机版的有道词典是个好东西,可以拍照翻译!!! 1、去mysql的安装目录找到my.ini文件 2、卸载mysql 3、删除C:/programdata目录下的MySQL文件夹(如果找不到就是被隐藏了,点击所在窗口左上方的查看—>选项—>查看—>找到隐藏文件和文件夹设置为显示隐藏文件) 法一:手动 法二: 法三:使用管理员打开cmd 法 1: mysql -u root -p 密码 法1:exit Structured Query Language :结构化查询语言 1、SQL语句可以单行或多行书写,以分好结尾 举例: (Data Definition Language)数据定义语言 (Data Manipulation Language) 数据库操作语言 (Data Query Language)数据查询语言 (Data Control Language)数据控制语言 c(Create):创建 R(Retrieve):查询 查询某个数据库的字符集(查询某个数据库的创建语句): eg: U(Update):修改 eg: D(Delete):删除 eg: eg: 使用数据库 eg: 使用数据库: 表举例: C(Create):创建 注意:最后一列,不需要加逗号(,) 2、数据库类型(常用): 创建表: 复制表: eg: R(Retrieve):查询 查询表结构: eg: U(Update):修改 eg: 2、修改表的字符集: eg: 3、添加一列: eg: 4、修改列表名称 、类型: eg: 5、删除列: eg: D(Delete):删除 eg: 语法: 注意: 语法: 注意: eg: 语法: eg: 注意: eg: 多个字段查询: 注意: 去除重复: 计算列: 起别名: <、>、<= 、>=、=、<>; between…and; in(集合); like:模糊查询 占位符: is null; and 或 &&; or 或 ||; not 或 ! 添加数据: 查询举例: 语法: order by 子句 – 排序方式: 注意: 概念:将一列数据作为一个整体,进行纵向的计算。 count:计算个数 max:计算最大值 min:计算最小值 sum:计算和 avg:计算平均值 注意: 语法: 注意: 语法: 公式: limit 是一个MySQL的”方言” 对表的数据进行限定,保证数据的正确性、有效性和完整性。 注意: 在创建表时,添加主键约束 删除主键 创建完表后,添加主键 自动增长: 概念:如果某一列是数值类型的,使用auto_increment 可以来完成值的自动增长 在创建表时,添加主键约束,并且完成自动增长 eg: 注意: 删除自动增长 添加自动增长 创建表时添加约束 创建完表后,添加非空约束 删除name的非空约束 创建表时,添加唯一约束 注意: 删除唯一约束 在创建表后,添加唯一约束 功能:让表与表产生关系,从而保证数据的正确性。 在创建表时,可以添加外键 删除外键 创建表之后,添加外键 级联操作 添加级联操作 分类: 1.一对一(了解) 2、一对多(多对一) 3、多对多 案例: 具体操作: 各表创建完后拖到架构设计器中,可以看到对应关系: 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。 目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 其实简单一点就是建立各种外键或者拆分表,让所有数据唯一 第一范式(1NF):每一列都是不可分割的原子数据项 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖) 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖) 第二范式能解决图中(即第一范式存在的)第一条问题 准备SQL: 内连接查询: 显示内连接: 例如: 内连接查询(注意事项): 左外连接: 查询的是左表所有数据以及其交集部分 右外连接: 查询的是右表所有数据以及其交集部分 查询中嵌套查询,称嵌套查询为子查询。 子查询的结果是单行单列的: 子查询的结果是多行单列的: 子查询的结果是多行多列的: 事务举例: 如果一个包含步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 查看事务的默认提交方式: 修改默认提交方式: 概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。 存在问题: 隔离级别: 注意: 隔离级别从小到大安全级别越来越高,但是效率越来越低 数据库查询隔离级别: 数据库设置隔离级别: 设置隔离级别eg: 隔离案例: 第一个窗口表示张三,执行转账操作后并没有提交事务 但是,张三一回滚 但是这时候李四已经写下了具有法律效应的欠条,所以在没收到张三钱的情况下反倒欠张三500块 这就是脏读 —————————————————————————————— 设置为第三隔离级别,同时开启事务 李四查询不到转账记录 —————————————————————————————— 设置为第四个隔离级别 添加用户 删除用户: 修改用户密码: mysql中忘记了root密码怎么办? 查询用户: 通配符:% 表示可以在任意主机使用用户登录数据库 查询权限 授予权限 撤销权限 关于mysql就到这里,请继续关注小编哦~~一看就懂的MySQL教程
一、安装
二、卸载
复制datadir = “路径名”三、配置
1、MySQL服务启动
右键点击我的电脑—>管理—>服务和应用程序—>服务—>找到MySQL,右键点击启动。
打开cmd命令,输入services.msc打开服务的窗口
2、MySQL登录
法 2:mysql -hip -u root -p 连接目标的密码
法 3:mysql – host = ip – user = root – password = 连接目标的密码3、MySQL 退出
法2:quit四、SQL
1、什么是SQL
其实就是定义了操作所有关系型数据库的规则,每一种数据库操作的方式存在不一样的地方,称为“方言”。2、SQL通用语法
2、可使用空格和缩进来增强语句的可读性
3、MySQL数据的SQL语句不区分大小写,关键字建议使用大写
4、3种注释
**** 单行注释: -- 注释内容
或 # 注释内容
(mysql特有)
**** 多行注释: /*注释 */
3、SQL分类
1)DDL
2)DML
3)DQL
4)DCL
五、DDL:操作数据库、表
1、操作数据库:CRUD
创建数据库:create databases 数据库名称;
**创建数据库,判断不存在,再创建:**
create database if not exists 数据库名称;
**创建数据库,并指定字符集:** create database 数据库名称 character set 字符集名; ==eg==:***创建db4数据库,判断是否存在,并制定字符集为gbk*** create database if not exists db1 character set gbk;
查询所有数据库的名称: show databases;
show create database 数据库名称;
修改数据库的字符集:alter database 数据库名称 character set 字符集名称;
删除数据库:drop database 数据库名称;
判断数据库存在,存在再删除(不会报错):drop database if exists 数据库;
查询当前正在使用的数据库名称:select database();
使用数据库,如果没有正在使用的数据库正在使用的会如上显示
有正在使用的数据库,会如上显示use 数据库名称;
2、操作表
1、语法:create table 表名( 列名1 数据类型1, 列名2 数据类型2, 。。。。 列名n 数据类型n );
1、int:整数类型
age int
2、double : 小数类型
score double(5,2)[5是所有数字的总位数,2是小数的位数]
3、date:日期,包含年月日,yyyy-MM-dd HH:mm:ss
4、datetime:日期,包含年月日时分秒 yyyy- MM-dd HH:mm:ss
5、timestamp:时间错类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
如果将来不给这个字段赋值,或赋值null,则默认使用当前的系统时间,来自动赋值
6、varchar:字符串name varchar(20): -- 姓名最大20个字符 -- zhangsan 8个字符 /张三 2个字符
create table student( id int, name varchar(32), age int, score double(4,1), birthday date, insert_time timestamp );
create table 表名 like 被复制的表名;
查询某个数据库中所有表名称:alter tables ;
desc 表名;
1、修改表名:alter table 表名 rename to 新的表名;
alter table 表名 character set 字符集名称;
alter table 表名 add 列名 数据类型;
alter table 表名 change 列名 新列名 新数据类型; alter table 表名 modify 列名 新数据类型;
alter table 表名 drop 列表;
法1.drop table 表名; 法2.drop table if exists 表名;
六、DQL:增删改表中的数据
1、添加数据
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
insert into 表名 values(值1,值2,。。。值n);
eg:
2、删除数据
delete from 表名[ where 条件]
delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作
truncate table 表名; -- 推荐使用,效率更高,先删除表,然后再创建一张一样的表。
3、修改数据
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 条件];
如果不加任何条件,则会将表中所有记录全部修改。
七、DQL:查询语句
select * from 表名;
1、语法:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后的条件 order by 排序 limit 分页限定
2、基础查询
select 字段1,字段2,...from 表名;
如果查询所有字段,则可以使用*来代替字段列表。distinct
1)一般可以使用四则运算计算一些列的值。(一般只会进行数值型的计算)
2)ifnull(表达式1,表达式2):null参与的运算,计算结果都为null
***表达式1:哪个字段需要判断是否为null
***如果改字段为null后的替换值。
as:as也可以省略3、条件查询
eg:
_:单个任意字符
%:多个任意字符
举例:
建表:create table student( id int, -- 编号 name varchar(20), -- 姓名 age int, -- 年龄 sex varchar(5), -- 性别 address varchar(100), -- 地址 math int, -- 数学 english int -- 英语 );
insert into student(id,name,age,sex,address,math,english) values( 1,"马云",55,"男","杭州",66,78),(2,"n马化腾",45,"男","深圳",98,87), (3,"马景涛",55,"男","香港",56,77),(4,"柳岩",20,"女","湖南",99,99), (5,"柳青",20,"男","湖南",86,null),(6,"刘德华",57,"男","香港",99,99), (7,"马德",22,"女","香港",99,99),(8,"德玛西亚",18,"男","广东",56,65);
4、排序查询
order by 排序字段1 排序方式1,排序字段2 排序方式2,......
ASC:升序,默认的
DESC:降序
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件。5、聚合函数
1、一般选择非空的列:主键
2、count(*)eg: select max(math) from student; select min(math) from student; select sum(math) from student;
聚合函数的计算,排除null值。
解决方案:
1. 选择不包含非空的列进行计算
2. ifnull函数6、分组查询
group by 分组字段;
可以取别名,方便一点:
1. where在分组之前进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足限定, 则不会被查询出来
2. where后不可以跟聚合函数,having可以进行聚合函数的判断。7、分页查询
limit 开始的索引,每页查询的条数;
开始的索引 = (当前页码 – 1)* 每页显示的条数
eg: ---- 每页显示3条记录 select * from student limit 0,3; -- 第一页 select * from student limit 3,3; -- 第二页 select * from student limit 6,3; -- 第三页 ```
八、表的约束
1、概念
2、分类
1.主键约束:primary key
create table stu( id int primary key, -- 给id添加主键约束 name varchar(20) );
-- 错误 alter table stu modify id intl; alter table stu drop primary key;
alter table stu modify id int primary key;
create table stu( id int primary key auto_increment, -- 给id添加主键约束 name varchar(20) );
自动增长,给选定值填入null是,会自动根据前一个数据加一alter table stu modify id int;
alter table stu modify id int auto_increment;
2.非空约束:not null
create table stu( id int; name varchar(20) not null -- name为非空 );
alter table stu modify varchar(20) not null;
alter tble stu modify name varchar(20) ;
3.唯一约束: unique,值不能重复
create table stu( id int, number varchar(20) unique --添加了唯一约束 );
mysql中,唯一约束限定的列的值可以有多个null。alter table stu drop number;
alter table stu modify number varchar(20)unique;
4.外键约束:foreign key
语法:create table 表名( ... 外键列 constraint 外键名称 foreign key (外键列名称)references 主表名称(主表列名称) );
alter table 表名 drop foreign key 外键名称;
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主列表名称);
语法:alter table 表名 add constraint 外键名称 foreign key (外键字段名称)references 主表名称(主列表名称)on update cascade / on delete cascade;
九、多表操作
1、分类
eg:
eg:
eg:
1.-- 创建旅游线路分类表tab_category -- cid 旅游线路分类主键,自动增长 -- cname旅游线路分类名称非空,唯一,字符串100 create table tab_category( cid int primary key auto_increment, cname varchar(100) not null unique );
-- 创建旅游路线表tab_route /* rid旅游线路主键,自动增长 rename旅游线路名称非空,唯一,字符串100 price价格 radate 上架时间,日期类型 cid外键,所属分类 */ create table tab_route( rid int primary key auto_increment, rname varchar(100) not null unique, price double, cid int, foreign key(cid) references tab_category(cid) );
-- 创建用户表tab_user /* uid用户主键,自增长 username用户名长度100,唯一,非空 password密码长度30,非空 name真实姓名长度100 birthday生日 sex性别,定长字符串1 telephone手机号,字符串11 email邮箱,字符串长度100 */ create table tab_user( uid int primary key auto_increment, username varchar(100) unique not null, password varchar(30) not null, name varchar(100), birthday date, sex char(1) default"男", telephone varchar(11), email varchar(100) );
-- 创建表tab_favorite /* rid旅游路线id,外键 date时间 uid用户id,外键 rid和uid不能重复,设置复合主键,同一个用户不能同一个线路两次 */ create table tab_favorite( rid int, date datetime, uid int, -- 创建复合主键 primary key(rid,uid), forenign key (rid) references tab_route(rid), forenign key (uid) references tab_route(uid) );
十、三大范式
1、数据库设计的范式
概念
分类:
几个概念:
例如:学号–>姓名(姓名依赖于学号)。 (学号,课程名称)–>分数
例如:(学号,课程名称)–>分数
例如:(学号,课程名称)–> 姓名
例如:学号–>系名,系名–>系主任
例如:该表的码为:(学号,课程名称)
1、主属性:码属性组中的所有属性
2、非主属性:除过码属性组的属性
第三范式能解决第二和第三条问题十一、数据库的备份和还原
语法:
备份(在dos命令里输入):mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
1. 登录数据库
2. 创建数据库
3. 使用数据库
4. 执行文件:source 文件路径十二、多表查询
1.查询语法
select 列名列表 from 表名列表 where......
2.笛卡尔积
3.多表查询的分类
1. 隐式内连接:使用where条件消除无用数据
例子:-- 查询所有员工信息和对应的部门信息 select * from emp,dept where emp."dept_id" = dept."id"; -- 查询员工表的名称,性别。部门表的名称 select emp.name,emp.gender,dept.name from emp,dept where emp."dept_id" = dept."id"; select t1.name, -- 员工表的姓名 t1.gender, -- 员工表的性别 t2.name -- 部门表的名称 from emp t1, dept t2 where t1."dept_id" = t2."id";
语法:select 字段列表 from 表名1 [inner] join 表名2 on 条件
select * from emp inner join dept on emp."dept_id" = dept."id"; select * from emp join dept on emp."dept_id" = dept."id";
1、 从那些表中查询数据
2、条件是什么
3、查询那些字段4.外连接查询
语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
例子:-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称 select t1.*t2."name" from emp t1 left join dept t2 on t1."dept_id" = t2."id";
语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
例子:select t1.*t2."name" from dept t1 right join emp t1 on t1."dept_id" = t2."id";
十三、子查询
1.概念:
```sql -- 查询工资最高的员工信息 -- 1.查询最高的工资是多少 9000 select max(salary) from emp; -- 2.查询员工信息,并且工资等于9000的; select * from emp where emp."salary" = 9000; -- 一条SQL就完成这个操作:子查询 select * from emp where emp."salary" = (select max(salary) from emp); ```
2. 子查询不同情况
子查询可以作为条件,使用运算符去判断。 运算符:> >= < <= =
例子: ```sql -- 查询员工工资小于平均工资的人 select * from emp where emp.salary < (select avg(salary) from emp); ```
子查询可以作为条件,使用运算符in去判断。 -- 查询“财务部”和“市场部”所有的员工信息 select id from dept where name = "财务部" or name = "市场部"; select * from emp where dept_id = 3 or dept_id = 2; ``` 用子查询: ```sql select * from emp where dept_id in (select id from dept where name = "财务部" or name = "市场部"); ```
子查询可以作为一张虚拟表参与查询-- 查询员工入职日期是2011-11-11日之后的员工信息和部门信息 --子查询 select * from dept t1,(select * from emp where emp."join_date" > "2011-11-11") t2 where t1.id = t2.dept_id; -- 普通内连接 select * FROM emp t1,dept t2 where t1."dept_id" = t2."id" and t1."join_date" > 2011-11-11;
十四、事务
1.概念
2.操作
3.例子
添加数据:
4.MySQl数据库中事务默认自动提交
*mysql就是自动提交的
*一条DML(增删改)语句会自动提交一次事务。
*Oracle数据默认是手动提交事务
*需要先开启事务,再提交
select @@autocommit; -- 1 代表自动提交 0代表手动提交
set @@autocommit = 0;
5.事务的四大特征
6.事务的隔离级别(了解)
1. 脏读:一个事务,读取到另一个事务中没有提交的数据
2. 不可重复读(虚读):在同一个事务中,两次读取到的事务不一样
3. 幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。
产生问题:脏读、不可重复读、幻读
产生问题:不可重复读、幻读
产生问题:幻读
可以解决所有问题select @@tx_isolation;
set globlal transaction isolation level 你别字符串;
查看隔离级别:
第二个窗口代表李四,在张三没有提交事务的情况下查询到已经转账,然后写了欠条,具备法律效应了
李四第二次查账的时候发现钱没过来
上面的是第一隔离级别
我们重新设置第二个隔离级别
这回在张三没提交之前,李四查询不到钱到账
只有当张三提交之后,李四才查询到修改的数据
——————————————————————————————
当张三提交事务后李四还是查询不到记录
只有当李四也提交之后才能查询到记录
这样就解决了不可重复读的问题
在张三还没提交时,李四不可以查询记录,光标一直在闪
只要张三一提交,李四立马就会显示查询结果
十五、用户管理和权限管理
1.管理用户
语法:create user “用户名” @“主机名” identified by “密码”;
语法:drop user “用户名” @“主机名”;
update user password = password("新密码") where user = "用户名"; update user password = password("abc") where user = "lisi";
set password for "用户名"@"主机名" = password("新密码"); set password for "root"@"localhost" = password("123");
1. cmd –> net stop mysql 停止mysql服务
需要管理员打开该cmd
2. 使用无验证方式启动mysql服务:mysql – skip – grant – tables
3. 打开新的·cmd窗口,直接输入mysql命令,敲回车。就可以登陆成功
4. use mysql;
5. update user set password = password(“你的新密码”) where user = “root”;
6. 关闭两个窗口
7. 打开任务管理器,手动结束mysql.exe的进程
8. 启动mysql服务
9. 使用新密码登录-- 1. 切换到mysql数据库 user mysql; -- 2.查询user表 select * from user;
2.权限管理
show grants for "用户名"@"主机名"; show grants for "lisi"@"%";
grant 权限列表 on 数据库名.表名 to "主机名"; -- 给张三用户授予所有权限,在任意数据库任意表上 grant all on *.* to "zhangsan"@"localhost";
revoke 权限列表 on 数据库名.表名 from "用户名"@"主机名"; revoke update on db3."account" from "lisi"@"%"
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算