mysql基本操作总结。

JAVA ZMAS 52℃ 0评论

MySQL:

启动:
1.右键我的电脑- 管理- 服务与应用 – 服务 – 找到mysql服务开启
2. net start mysql 开启
net stop mysql 关闭

卸载:
1. 先去mysql安装目录,找到my.ini
记录地址:
datadir=”C:/ProgramData/MySQL/MySQL Server 5.5/Data/”
2. 找到控制面板, 卸载程序 , 选择卸载mysql
3. 删除 C:/ProgramData/MySQL/

登录:
1.打开cmd窗口
mysql -u用户名 -p密码

mysql -hIP -u用户名 -p密码

2.点击开始菜单
找到mysql 点击 CommandLineClient 输入密码即可
mysql目录:
安装目录:basedir=”C:/Program Files/MySQL/MySQL Server 5.5/”

基本概念:
mysql服务器 : 安装了mysql服务端软件的计算机
库: mysql服务器可以有多个数据库
表: 一个库中会有多个表
表中: 使用行和列这种结构管理了 多条记录

SQL:
概念: Structrued Query Language 结构化查询语言
定义了查询所有关系型数据库数据的规则。 当然数据库之间也会有一些小差别称为 数据库”方言”

* SQL分类
DDL:数据定义语言 (Data Defination Language)
管理库的增删改查,及表结构的增删改查: create alter
DML:数据操作语言 (Data Manipulation Language)
管理表中记录的增删改操作: insert update delete
DQL:数据查询语言 (Data Query Language)
查询表中记录 : select
DCL:数据控制语言 (Data Control Language)
定义数据的访问权限和安全控制。 grant

SQL语法:
1. 每一行语句 以 ; 号结尾,用图形化工具可以省略
2. 注释:
行注释 : –空格 注释内容 或 # 注释内容 (mysql)
多行注释: /* 多行注释 */
3. mysql数据库中不区分大小写。 建议使用大写。

DDL:数据定义语言
操作库:
查询:
show databases;
show create database 数据库名; — 查看数据库信息
创建:
create database 库名;
create database if not exists day06; — 如果不存在就创建(存在也不报错)
修改:
alter database day06 character set gbk;
删除:
drop database day06; — 删除数据库
drop database if exists day06; — 如果存在就删除(不存在也不报错)

使用库:
use 数据库名;
select database();

操作表:
查看:
show tables;
desc 表名;

创建:
语法: create table 名称(
字段1 类型1(字段长度),
字段2 类型2,

字段n 类型n
);

注意:最后一列字段后面不加逗号
数据类型:
int 整数类型
如:年龄 age
double 浮点型
如:工资 price
varchar(64) 字符类型
如: 姓名
date 日期类型 格式: yyyy-MM-dd 年月日
datetime 日期类型 格式: yyyy-MM-dd HH:mm:ss 年月日 时分秒
timestamp 时间戳类型 格式: yyyy-MM-dd HH:mm:ss 年月日 时分秒
— 如果 你没给这个字段赋值的话,时间戳会帮你自动获取当前系统时间,并赋值
— 创建学生表:
create table student(
id int,
name varchar(32),
age int,
score double(4,1), — 4代表中位数为4位,1代表小数据后1位
birthday date,
create_time timestamp
)
修改:
修改表名
alter table 表名 rename to 新表名;
修改表字符集
alter table 表名 character set gbk;
修改 添加一个新字段
alter table 表名 add 字段名 类型;
修改一个字段
alter table 表名 change 旧列名 新列名 类型
alter table 表名 modify 列名 类型
删除一个字段
alter table 表名 drop 列名

删除:
drop table 表名;

使用SQLYog客户端:

DML: 数据操作语言 增删改
增加数据:
insert into 表名 (字段1,字段2,.. 字段N) values (值1,值2,..值N);

— 给全部字段赋值可以省略字段列表
insert into 表名 values (值1,值2,..值N); — 给所有字段赋值

— 一次性插入多条记录
insert into 表名 values (值1,值2,..值N),(值1,值2,..值N),(值1,值2,..值N);

注意: 字段和值 一定要一一对应
当 你要给所有字段赋值时 , 字段列表可以省略
非数字类型,赋值时 用 引号括起来 ” “”

查询表中全部数据: select * from 表名

删除数据:
delete from 表名 [where 条件]

注意: 如果不加where条件,代表你要删除所有数据
delete from 表名 — 删除全部数据 , 多条数据每一条都执行一次删除操作
truncate table 表名 — 删除全部数据 , 删除数据效率更高。
drop table 表名 — 表结构也会被删除。

修改数据:
update 表名 set 字段1=值1,字段2=值2,…字段n=值n [where 条件]

注意: 如果不加where条件, 全部的数据会被修改

DQL:数据查询语言
基本语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段列表
having
分组后条件
order by
排序字段
limit
分页参数

基础查询:
* 多字段的查询
select 字段1,字段2…字段n from 表名
select * from 表名 — 显示全部字段

* 查询结果去重复 DISTINCT
— 查询结果 去重
select DISTINCT address from student3;

* 列可以进行简单的四则运算
— 查询所有人的名称,及数学和英语成绩的总和 数值类型列可以进行四则运算
SELECT NAME,math+english FROM student3;

* 通过ifnull() 函数可以给null值设置一个莫认真
— 通过 ifnull函数 给null值设置一个默认值
SELECT NAME,math+IFNULL(english,0) FROM student3;

* 通过as关键字给列起别名
— 给列起个别名 as
SELECT NAME AS ‘名称’,math+IFNULL(english,0) AS ‘总成绩’ FROM student3;
SELECT NAME ‘名称’,math+IFNULL(english,0) ‘总成绩’ FROM student3;

条件查询:
1.where关键字后面 跟条件
2. >、<、<=、>=、=、<> !=
BETWEEN…AND
IN(集合)

IS NULL
and or not (&& || !)
— 条件查询

SELECT * FROM student3
— >、<、<=、>=、=、<> !=

— 大于22所有同学
SELECT * FROM student3 WHERE age > 22;
SELECT * FROM student3 WHERE age >= 22;
— 小于55岁的同学
SELECT * FROM student3 WHERE age < 55;

SELECT * FROM student3 WHERE age = 55;
— 查询不等于55岁的所有同学
SELECT * FROM student3 WHERE age != 55;
SELECT * FROM student3 WHERE age <> 55;

— 大于等于22 小于等于55的所有同学
SELECT * FROM student3 WHERE age >= 22 AND age <= 55
SELECT * FROM student3 WHERE age BETWEEN 22 AND 55

— 查询 年龄 = 22 或者 18 或者 20的所有同学
SELECT * FROM student3 WHERE age=18 OR age=20 OR age=22;
SELECT * FROM student3 WHERE age IN(18,20,22);

— and 和 or 可以一起使用,但是一起使用时 and的优先级高
SELECT * FROM student3 WHERE (address = ‘香港’ OR age >= 22) AND age <= 55

— 将英语成绩为null的记录查询出来
SELECT * FROM student3 WHERE english IS NULL;

— 将英语成绩不为null的记录查询出来
SELECT * FROM student3 WHERE english IS NOT NULL;

模糊查询
字段 like ‘表达式’
_ 匹配任意一个字符

% 匹配任意多个字符

— 查询所有姓马的同学 第一个字马 XXX
select * from student3 where name like ‘马%’

— 查询名字中包含 德字的同学
select * from student3 where name like ‘%德%’
— 名字中以华字结尾
select * from student3 where name like ‘%华’

— 查询所有姓马的同学 名字是两个字
SELECT * FROM student3 WHERE NAME LIKE ‘马_’
— 所有名字是3个字的同学
SELECT * FROM student3 WHERE NAME LIKE ‘___’

— 名字中第二个字是化的同学
SELECT * FROM student3 WHERE NAME LIKE ‘_化%’

排序
order by 排序字段1 排序方式1,排序字段2 排序方式2

升序:asc 默认情况

降序:desc

聚合函数:将一列数据作为一个整体,进行纵向的运算
count() 计算数量
sum() 计算总和
avg() 计算平均值
max() 计算最大值
min() 计算最小值
— 查询20-55 人的数量 聚合函数不计算null值
— count(使用主键)
— count(*)
SELECT COUNT(id) FROM student3 WHERE age BETWEEN 20 AND 55;
— avg 平均数
SELECT AVG(IFNULL(english,0)) FROM student3
SELECT * FROM student3 WHERE math = (SELECT MAX(math) FROM student3)
SELECT * FROM student3 WHERE math = (SELECT MIN(math) FROM student3)
SELECT SUM(math) FROM student3

分组查询
语法: group by 字段

— 统计 班里边 男同学的数学平均成绩 女同学的平均成绩avg
SELECT
sex,COUNT(*),AVG(math)
FROM
student3
GROUP BY
sex

— 统计 班里边 男同学的数学平均成绩 女同学的平均成绩 (要求成绩大于70才能参与分组)
SELECT
sex,COUNT(*),AVG(math)
FROM
student3
where
math > 70
GROUP BY
sex

— 统计结果 分组人数>2才有效
SELECT
sex,COUNT(*) AS 人数,AVG(math)
FROM
student3
WHERE — 写条件
math > 70

GROUP BY
sex
HAVING — 写条件 分组字段 或者 聚合函数做条件
人数 > 2

注意: 在使用分组时,select后面通常我们会写分组字段 和 聚合函数
where和having的区别?
where 在分组之前筛选数据的条件
having 分组之后的筛选数据的条件
where 条件不可以使用聚合函数
having 可以使用聚合
having 跟着group by一起使用

### 分页查询:
limit 参数1,参数2 参数1:偏移量(起始下标) 参数2:查询几条数据

计算起始下标公式: (第几页-1)*每页条数

select * from student3 limit 0,2 — 第1页
select * from student3 limit 2,2 — 第2页
SELECT * FROM student3 LIMIT 4,2 — 第3页

可以使用limit 和 排序关键字 实现 如: 取成绩前三名等需求
limit : mysql的”方言”
### 约束:
概念: 数据库会对表中的数据进行一系列的限制,来保证数据的安全、准确、有效

约束分类:

非空约束: not null
唯一约束: unique
主键约束: primary key
外键约束: foreign key

非空约束: 指定的列不能为null
1. 创建表时指定:
create table 表名(
字段 类型 not null
)

2. 删除非空约束
alter table test modify name varchar(20)

3. 创建表之后添加
alter table test modify name varchar(20) not null

注意:添加约束时,如果数据库数据不满足要求,无法添加
通过default关键字 指定默认值

唯一约束: 指定的列不能够重复
1. 创建表时指定:
create table test(
id int,
idcard varchar(20) unique
)
2. 删除唯一约束
ALTER TABLE test DROP INDEX idcard

3. 创建表后添加唯一
alter table test modify idcard varchar(20) unique

4. 联合唯一约束
CREATE TABLE test002(

id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
stu_no VARCHAR(20),
UNIQUE(NAME,stu_no) — 指定多个列 整体唯一
)

注意: 唯一约束没有限制 null
主键约束:
特点:
1.能够让指定的列 非空且唯一
2.每一个表里只能指定一个主键约束
3.主键就是我们表数据的唯一标识
4.主键可以指定多个列 ,联合主键

小技巧: 一般不会选择业务字段作为主键。

1.创建表时创建。
CREATE TABLE test(
id INT primary key,
idcard VARCHAR(20)
)
2.删除主键
ALTER TABLE test DROP PRIMARY KEY

3.创建表后指定主键
Alter table test modify id int primary key

4. 列自动增长 auto_increment
创建表时指定:
CREATE TABLE test(
id INT primary key auto_increment,
idcard VARCHAR(20)
)
删除自动增长
alter table 表名 modify id int;
创建表后添加
alter table 表名 modify id int auto_increment;

5. 联合主键:指定多个列作为一个主键
create table test001(

rid int,
cid int,
primary key(rid,cid) — 指定联合主键

)

外键约束:
概念: 使两张表产生关系, 从而保证数据的准确性
constraint 外键的名字 foreign key (外键列名) references 主表(列) — 外键引用的主表列要保证唯一

1.创建表时创建。
create table 表(
字段 类型,
constraint 外键名称 foreign key (外键列) references 主表(外键引用列)
)
2.删除外键
alter table employee drop foreign key emp_dept_fk

3.创建表之后添加外键
alter table employee ADD constraint 外键的名字 foreign key (外键列名) references 主表(列)

4.级联操作
级联删除
on delete cascade
级联更新
on update cascade

constraint 外键的名字 foreign key (外键列名) references 主表(列) on delete cascade on update cascade

注意: 使用时先谨慎的考虑清楚,具体业务是否需要

## 数据库的设计:

表和表的关系:
一对一:
人 和 身份证
分析: 一个人 只能对应一个身份证, 一个身份证号也只能对应一个人

一对多(多对一):
班级 和 同学 员工和 部门
分析: 一个班级会有多个学生, 多个学生对应一个班级

多对多:
学生 课程
分析: 一个学生可以选择多个课程, 一个课程也可以被多个学生选择

一对多的实现:
如: 员工 和 部门 班级和学生 分类和商品
实现: 在多的一方创建外键,指向一的一方的主键

多对多的实现:
如: 学生 选课
实现: 多对多需要借助中间表来实现,在中间表中至少包含两个字段,分别对应着
学生的主键 和 课程的主键

一对一的实现:
如: 商品 和 商品详情
实现: 1.可以在任意一方设置外键,关联另一方的主键
2. 直接将一个表的主键设置为外键,关联另一个表的主键

## 数据库范式:
概念:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
范式分类:
第一范式(1NF)、
第二范式(2NF)、
第三范式(3NF)、
巴斯-科德范式(BCNF)、
第四范式(4NF)、
第五范式(5NF,又称完美范式)。
主要了解三大范式即可:
1. 1NF,保证表中每一列都是原子的,不可以在拆分的 (每一列描述一个属性)

2. 在满足1NF的基础上,要求所有的非主属性必须依赖主属性,消除局部依赖 (每张表做一件事情)

3. 在满足2NF 的基础上, 消除传递依赖,表中的每一列必须直接依赖主属性,不能产生间接依赖

## 数据库备份:
命令行:
语法:
mysqldump -u用户名 -p密码 数据库名 > 要备份到哪(硬盘路径).sql
还原:
通过cmd进入mysql
创建数据库
使用数据库(use)
通过source 文件路径
客户端:
备份:
右键要备份的数据库
选择备份导出
导出结构和数据到指定目录
还原:
右键数据库链接
执行SQL脚本(之前备份的.sql文件)

## 小知识点:
## 查询语法的书写顺序:

select–from–where–group by–having–order by — limit

## 语法关键字的执行顺序:

from–where–group by–having–select–order by–limit

from:需要从哪个数据表检索数据

where:过滤表中数据的条件

group by:如何将上面过滤出的数据分组

having:对上面已经分组的数据进行过滤的条件

select:查看结果集中的哪个列,或列的计算结果

order by :按照什么样的顺序来查看返回的数据

limit : 返回结果中的哪些数据

转载请注明:ZMAS‘S blog » mysql基本操作总结。

喜欢 (2)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址