mysql入门使用
mysql数据库
(1) 基本语法
-
mysql数据库的定义; 有数据结构组成用于存储,管理数据仓库
数据库: database
数据表: table
数据值: value
-
分类:
-
关系型数据库
mysql , sqlserver , oracle,……
-
非关系型数据库
redis,mongodb,…
-
-
配置环境变量
在window 任何地方都可以直接操作mysql
- 在右键 “我的电脑”
- 选择"属性"
- 左侧选择"高级系统设置"
- 选项卡"高级"
- 选择"环境变量"
- 查看是否由 变量path
有: 选择"编辑", 粘贴mysql目录地址
没有选择: 新建,在粘贴mysql目录地址
win7系统,在有缘path 值的最后面加分号;
在粘贴mysql 目录地址
-
使用mysql
-
进入cmd
-
输入mysql -u root -p 回车
-h 主机或者IP地址 -u用户名 -p密码
-
输入密码: wampserver
分析: -h 地址为localhost 既可以省略否则必须填写
-u 用户名wampserver默认用户名为root
-p 密码 wapserver 默认密码为空 即可回车
-
-
基本语法
每一条命令均已 分号 作为结束符
mysql 命令均大写,不缺分大小写
-
数据库表添加的数据注意点
- 最后一条字段,不要加 逗号
- 字段名 即为信息
- 字段类型
- 字段属性
(2) 数据库-操作
数据库操作 | 功能 | 注意点 |
---|---|---|
mysql -u 用户名 -p 回车 | 进入mysql | |
password: | 回车进入mysql | password 在wampserver中默认为空 |
set password = password ( ‘字符串’ ) | 设置密码 | |
show databases; | 查询所有的库 | |
create database `库名` | 创建新的库 | |
create database if not exists `库名` default charset=utf8 |
创建新的库 | 完整写法 if not exists判断库名是否存在 default允许默认值 charset=编码 |
dorp database`库名` | 删除数据库 | |
use `库名` | 使用数据库 | 在使用任何数据表之前,必须先选择好 数据库 |
例子:
这是建表语句
create table if not exists `user`(
`id` int auto_increment primary key,
`nickname` varchar(20),
`tel` char(11) uniqie not null,
`pwd` char(32) not null comment '加密32为密码',
`sex` tinyint(1) default 1 comment'1-男 2-女',
`birthday` date,
`address` varchar(50),
`status` tinyint(1) default 1 comment'1-** 2-禁用',
`regtime` int
)engine=myisam default charset=utf8;
(3) 数据表-操作
数据表基本操作 | 功能 | 注意点 |
---|---|---|
show tables; | 查询所有的表 | |
drop table `表名` | 删除数据表 | |
desc `表名` | 查看表结构 | |
show crete table `表名` | 查看建表语句(引擎) | |
**数据表操作 (增) ** | 功能 | 注意点 |
INSERT INTO `表名` VALUES(值1,值2,…); | 插入一条完整的数据 |
数据值的个数是 随着字段的个数 值只可以使用单双引号 库名,表名,字段名只可以用反引号 |
INSERT INTO `表名`(字段名1,字段名2…) VALUES(值1,值2,…); | 插入一条部分字段的数据 | 值的个数 要随着前面的字段名的个数, 保持一一对应 具有not null 属性的字段, 必须要添加值 auto_increment 是从记录+1, 而不是从最大字段值+1 |
INSERT INTO `表名`VALUES(值1,值2,…),(值1,值2,…),…; | 插入多条完整数据 | |
INSERT INTO `表名`(字段名1,字段名2,…) VALUES ( 值1,值2,…),( 值1,值2,…),…; | 插入多条部分字段的数据 | |
更新表中的数据 (改) | ||
UPDATE 表名 SET 字段名1 =值1 , 字段名2= 值2 ; | 更新 整表数据 | 可以设置整个表的某个字段的值 都设置成某个值 |
UPDATE 表名 SET 字段名1=值1, 字段名2 = 值2,… WHERE 条件 | 更新部分数据 | 设置更新部分数据, 可以根据条件判断 |
备份删除操作 (删) | delete删数据 不影响 auto_increment 的记录 | |
mysqldump -u 用户名 -p 库名 > 目标地址 | 备份数据表 | mysqldump -u root -p s84 > C:/s84.sql |
mysql -u 用户名 -p < 来源地址 | 导入数据库 | mysql -u root -p s84 < C:/s84.sql |
DELETE FROM `表名` | 删除一张表中所有的数据 | 关键字顺序 不能随意颠倒 |
DELETE FROM `表名` WHERE 条件 | 删除一张表中的部分数据 | where条件 可写可不写, 根据需求决定 |
DELETE FROM 表名 [WHERE 条件] ORDER BY 排序依据 LIMIT 行数 | 删除排序之后的前几条[满足条件]的数据 | 例: DELETE FROM user ORDER BY birthday DESC LIMIT 5 删除表中年纪最小的五个人 |
TRUNCATE TABLE `表名` | 删除树结构 | 将表结构删除,相当于做了一次drop,然后重构一个新表与原表一模一样, auto_increment 会被重置 |
asc / desc | 升序(默认) / 降序 |
(4).聚合函数
聚合函数 | 功能 | 注意点 |
---|---|---|
select count( 字段名 ) | 统计 | |
select sum ( 字段名 ) | 求和 | |
select avg( 字段名 ) | 平均值 | |
select max (字段名) | 最大值 | |
select min( 字段名 ) | 最小值 | |
select concat (字段名或字符串, 字段名和字符串…) | 字段字符拼接函数 | |
select now( ) | 现在的格式化时间 | |
select unix_timestamp( ) | 现在的时间戳 | |
select version( ) | 当前数据库版本 | |
select mad(’ 123456 ') | 查看加密之后的值 |
(5) 查询数据
select distinct | * | 字段名 | 表名.字段名 |字段名 as 别名
select 查询 有以下属性可以配合使用
配合select查询的属性 | |
---|---|
from | 表名 |
where | 条件 ( 分组之前的条件筛选) |
group by | 分组依据 |
having | 筛选条件 (分组之后的条件筛选) |
order by | 排序依据 |
limit |
注意: select 关键字顺序不能颠倒
以下是查询中的各种案例用法:
-
查询所有字段数据 :
select * from 表名;
select * from user; -- 查询USER表中的所有字段
*
: 通配符,一般不推荐使用, 只有在需要查询全部字段时,方可使用,否则会降低效率. -
查询 指定的字段
select 字段名1,字段名2 from 表名;
select tel, pwd from user; --查询user表中电话与密码两个字段
以下是配合where的一些用法
-
带条件查询 字段数据:
select 字段名1,字段名2,..form 表名 where条件;
select nickname, tel, sex, address --查询名字,电话,性别,住址 from user --在user表中 where sex = 2 -- 性别为女的
-
and 逻辑与 ----- or 逻辑或----- ! 取反
select nickname, tel, sex, address--查询昵称,电话,性别住址 from user where sex = 2 and status = 1 --当性别为2与状态为1时
-
null 空 ---- is null 是否为空 ----- is not null 是否不为空
select nickname, tel -- 查询昵称与电话 from user where address is null -- 地址为空 select nickname, tel --查询昵称电话 from user where address is not null --地址不为空
-
区间查询
between A and B
[A,B]not between A and B
<A或>Bselect nickname, birthday --查询字段名和生日 from user where birthday between '2005-01-01' and '2015-12-31' -- 在字段名 birthday 其值在 区间内返回 -- not between 则不再区间内返回
-
in 操作 --判断是否在其中
select nickname, address --查询昵称,地址 from user where address in ('老王隔壁', '召唤师峡谷') --查询 地址为 老王隔壁 召唤师峡谷 在其的昵称和地址
-
分组
group by 分组依据
select sex, count(`id`) --查询性别 和 数量 from user -- 在user表中 group by sex -- 按照性别分组
-
having 筛选条件 (在分组后使用) 一般配合group by 配合使用
select dep, count(`id`) --查询部门 和数量 from salary --在salary表中查询 group by dep --按照部门分组 having count(`id`) > 2 --筛选出数量大于2的组
-
嵌套查询
select uid, dep, money --查询用户唯一ID,部门,工资 from salary --在salary表中查询 where money in (select max(`money`) from salary group by dep) -- 判断外层查询的工资是否在里层 (查询最高工资工资 按照部门排序)
-
多表查询
select 查询的字段
from 表名1, 表名2,…
where 表与表之间的关系( 必须声明)
注意点------ 当查询时,发生多表字段重名.
(使用: 表名.字段名 区分重名字段 )
-
别名 as
from salary as s, test as t --将表名取一个别名 作为多变查询时缩写使用
-
order by 排序 ------- desc降序 / asc升序(默认)
select nickname, birthday -- 查询昵称 生日 from user order by birthday desc -- 按生日 降序排序
-
limit 下标,行数 ----经常被利用在 后期 分页 效果
select id, nickname --查询id 和 昵称 from user limit 0, 5 --查询从第0个开始 向后5条数据
-
Distinct 取消重复
select dep --查询部门 from salary select distinct dep --查询部门 取消重复 from salary
-
支持算数运算符
select 10 + 20; -- 会返回30; + - * % 等等