MySql 数据库是关系型数据库 MySQL 数据库不区分大小写
在本文中出现的部分语法如 goudan,dachui,cuihua 都不是固定语法可以起任意名称
数据类型 | |
---|
整型 | int(m) m表示长度 | 长整型 | bigint(m) | 浮点数 | double(m,d) m代表总长度d小数点长度 | 超高精度浮点数 | decimal(m,d) | 字符串 | char(m) 最大长度255 | 字符串 | varchar(m) 最大65535 超过255用text | 字符串 | text(m) 最大长度65535 | 年月日 | date | 时分秒 | time | 年月日时分秒 | datetime | 时间戳 | timestamp |
增加
添加数据库
create database goudan; //goudan 是数据库的名字
create database if not exists goudan;//创建数据库 不显示任何错误
查看所有的数据库
show database;
创建使用gbk 字符集
create database dachui character set gbk;//使用gbk字符集的数据库
带校验规则的
create database cuihua character set gbk
collate gbk_chinese_ci;
添加数据库对象
选择数据库
use goudan;//进入goudan数据库
查看当前的数据库
select database();
创建表
必须选择一个数据库use dachui;
create table goudan(//创建goudan表
sno char(6) not null,//创建sno列 类型是char 长度是6 值不为空(也就是必须存在)
sgender char(2) default '男',//sgender列 类型是char 长度是2 默认值是男
sday datetime);//sday列 类型是datetime时间
创建唯一值
create table test(
id int primary key auto_increment,//id列 自动增长 只能拥有一列 primary key 主键
name char(10));
设置主键
create table goudan(
sno char(6) primary key,//将sno这一列设置为主键
sdata datetime);
主键不能重复 且不能为空
创建组合主键
create table dachui(
sno char(6),
cno char(6),
primary key(sno,cno)//设置组合主键的方法
);
主键约束定义不在同一列时一列中的值可以重复
创建外键约束表
有些表需要有父子关系 用外键约束
create table goudan(
sno char(6),
cno char(6),
score decimal(4,1),
foreign key(sno) references dachui(sno)//让自己的sno列参照dachui的sno列
);
表数据的添加
向所有的列表添加数据insert
insert into goudan(sno,sname,sgender,sbirthday,sdept)//必须列出所有的字段顺序可以不一致
values('18110','大锤','女','2002-02-14 00:00:00','d12001');//值一一对应
查看是否添加成功
select * from goudan;
省略字段名的方式添加
insert into goduan
values('18111','潘安','男','2001-03-05 00:00:00','d12003');//因为没有字段名所以必须按照定义的顺序来添加
数据的指定字段添加值
insert into goudan(sno,sname,sgender)
values('18112','狗蛋','男');//值一一对应
#值得注意的是当某个字段 为非空 并没有设置默认值那么添加值时 必须 为此字段添加数值否则 报错
数据的添加多条记录
insert into goudan(sno,sname,sgender)
values('18113','高火','男'),('18114','张三','男'),('18115','李四','男');
查找
换行输出\G 比如:
select * from 数据库名\G;
查看某一个数据库
show create database goudan;
查看数据表
首先选中数据库use goudan;
show tables;
查看数据表结构
show create table 数据表名;
以二维表结构展示数据表
describe 数据表名;//简写desc 数据表名
数据查寻select
查询所有数值
select * from goudan;//不建议 数据过多时消耗性能大
查询指定字段的所有值
selsct sname,sage from goudan;
条件查询
selsct sno,sname from goudan where sno='19102';//sno为学号sname为名称
in查询多条
select sno,sname from goudan where sno in('18102','18103','18105');
查询学号不为特定值
select sno,sname from goudan where not in('18102','18103');//只要加上not就可以
查询区间范围内的值
select sno,sname from goudan where sno between '值一' and '值二';
//查询的解构包含值一和值二
查询学号不为特定区间的值
select sno,sname from goudan where sno not between '值一' and '值二';
空值查询
select sno,sname,sgender from goudan where sgender is null;
//查询sgender是否是null
非空值的查询
select sno,sname,sgender from goudan where sgender is not null;
//sgender不为空的值
查询记录不重复
select distinct sgender from goudan;//distinct关键字为不重复
//查询sgender查询记录不重复
字符串模糊查询
select sno,sname from goudan where sname like '狗%';
//% 通配符 可以匹配任意长度的字符串 包括空字符串 可以代表任意字符
_ 通配符 可以匹配任意长度的字符串 包括空字符串 只能代表一个字符
select * from goudan where sname like '王_锤';
and 多条件查询
select * from goudan where sno='18101' and sname='狗蛋';
//查询学号为18101并且名称是狗蛋的值
or 多条件查询
select * from goudan where sno<'18101' or sdept='d12001';
//or是 或者 的意思
关系运算符 | 说明 |
---|
= | 等于 | <> | 不等于 | != | 不等于 | < | 小于 | <= | 小于等于 | > | 大于 | >= | 大于等于 |
分类汇总查询
聚集函数
函数名 | 作用 |
---|
count() | 返回某列的行数 | sum() | 返回某劣值的和 | avg() | 返回某列的平均值 | max() | 返回某列的最大值 | min() | 返回某列的最小值 |
转大写,小写
upper('asd');//大写
lower('NGMD')//小写
查询一共有多少条记录
select count(*) from goudan;//goudan数据表中有多少记录
查询平均值
select sname,avg(scorge) from goudan GROUP BY sname;
//查询goudan表中scorge的平均值
分类查询 group by
goudan 表中scorge 平均值大于80的所有学生sno 的值
select sno,avg(scorge) from goudan group by sno HAVING avg(scorge)>80;
having 后面写函数
查询结果排序
asc 升序, 默认升序 desc 降序
select sno,sname,sdept from goudan ORDER BY sno;
//查询goudan表按照sno进行排序
用asc 进行排序
select sno,sname,sdept from goudan order by sno asc;
用desc 进行排序
select sno,sname,sdept from goudan order by sno desc;
性别用降序学号用升序
select sno,sname,sgender from goudan order by sgender desc, sno acs;
//开始用sgender来排序当sgender相同时用sno排序
限制查询limit
select sno,sname,sgender from goudan LIMIT 4;//显示表前四条记录
第五位到第八位
select sno,sname,sgender from goudan limit 4,4//第五位到第八位
联合查询
union 不包含重复行 union all 包含重复行
select cno,cname,sgender,sdept from goudan where sgender='女'
UNION
select cno,cname,sgender,sdept from goudan where sdept='d12001';
等值连接和内连接:
-
等值连接 select * from A表名称 A,B表名称 B where A.字段=B.字段 and 条件;
-
内连接 select * from A join B on A.字段=B.字段 where 条件
多表查询
交叉查询 存在大量的重复数据
select * from dachui CROSS JOIN goudan;//展示dachui表和goudan表的所有数据
内连接
select * from dachui INNER JOIN goudan
ON dachui.snum=goudan.snum;//dachui表的snum等于goudan的snum的数据
//只有两个表snum相等的数据才出现在结果当中
表别名
select s.sno,sname from goudan s INNER JOIN dachui d ON s.sno=d.sno;
//简化数据表的名称 但是 一旦用了别名不能用原名 否则报错
外连接
select sname,deptname from dachui d LEFT JOIN goudan g
ON d.deptname=g.deptname;//左外连接
以谁为标准谁就在左 右链接 查询结果包括右表中的所有记录和左表中符合链接条件的记录 如果右表中的某条记录在左表不存在,则在左表中显示null
select sname,deptname from goudan g RIGHT JOIN dachui d
ON g.deptname=d.deptname;
自连接
自己链接自己 一定要用表别名
select work.name,work.num,student.name,student.num from goudan work INNER JOIN goudan student ON work.num=student.name;
子查询
一个查询语句嵌套在另一个查询语句的内部
select * from goudan
where sdate>(select sdate from goudan where name='大锤');
//先查询名字叫大锤的日期然后比较大小
子查询的参数
操作符 | 含义 |
---|
in | 等于列表中的某一个值 | any | 与列表中的任意值比较 | all | 与列表中的所有值比较 |
select name from goudan
where num in (select num from dachui where num='210203');
相关子查询
select * from goudan
where EXISTS (select num from goudan where year(date)=2000);//查询是否有2000年出生的人
EXISTS 查询的结果返回真和假 如果为真继续执行 如果为加则不执行外层
子查询写的位置
-
写在where 或having 后面 -
写在创建表的时候 create table emp_10 as (select * from emp where deptno=10);
-
写在from 后面 需要起别名 select ename from (select * from emp where deptno=20) newtable;
关键字的顺序
select...from 表名 where ...group by ... having ... order by ... limit...
修改
将字符集编码改为utf-8
alter database dachui character set utf8;
添加数据表字段
先进入数据库use goudan;
alter table 表名称 add 字段名 varchar(20);//自动添加到最后一个
添加到固定位置
alter table 表名称 add 字段名 char(20) after goudan;//放到goudan后面
//写 first 就是第一个字段
修改字段名称
alter table 表名称 change 字段名称 新名称 旧规则;
可以修改位置
alter table 表名称 change 字段名称 新名称 旧规则 after 字段名称;//放在了所需的字段后面
修改字段规则
alter table 表名称 modify 字段名 新类型;
重命名数据表
alter table 表名称 rename 新名称;
将表中的一列设置为主键
alter table goudan//回车
add primary key(con);//con列改为主键
会自动检查是否满足条件 不满足条件设置失败
删除主键约束
alter table dachui
drop primary key;
只是删除了主键约束没有删除字段或字段组
唯一性约束
这个表中的唯一性
alter table goudan
add unique(cname);//将unique设置为表中的唯一字段
也就是在cname 这一列中不能有重复的
修改创建外键约束
在已经添加的表中增加外键约束
alter table goudan
add constraint sc_con foreign key(cno) references dachui(cno);
//创建外键名为sc_con 把自己的cno列参照dachui表中的cno列进行约束
删除外键约束
只是删除了外键约束 并没有删除结构 删除外键只需要删除外键名即可
alter table goudan drop foreign key sc_cno;//删除goudan表中的外键sc_cno
表中数据的修改update
修改所有数据
update dachui
set sname='狗蛋';//将sname这一列全部修改为狗蛋
修改部分数据
update goudan
set sname='大锤'
where sno='18101';//where判断 sno等于18102的这一条数据
如果表中有多个值满足判断的条件那么将一起更改
删除
删除数据库
drop database goudan;
删除不存在的数据库会报错
drop database if exists gouda;//添加了 if exists 这个可选项之后报错信息不显示
删除数据库中的数据表
drop table goudan;//goudan表
删除数据表中的字段
alter table 表名称 drop 字段名称;
表中数据的删除delete
删除全部数据
delete from goudan//删除goudan里的全部数据
删除部分数据
delete from goudan
where sno='18101' and con='110013';
//删除表中cno为18101的数据和con为110013的数据
索引
索引的优点
- 保证数据表中的数据的唯一性
- 加快数据表的检索速度
- 加速表和表之间的联系
- 使用分组和排序子句进行数据检索时减少检索时间
- 在查询过程中使用优化隐藏器提高系统的性能
索引的缺点
- 创建索引耗费时间且随着数据量的增加而增加
- 创建索引占物理空间
- 索引需要动态的维护降低了数据的维护速度
适合创建索引的条件
- 经常需要搜索的列上面
- 作为主键的列上面
- 经常作为连接的列上面
- 经常需要根据范围进行搜素的列上
- 经常需要排序的列上
- 经常使用
where 子句中的列上
主索引
必须在主键字段创建的索引
普通索引
有key 或index 定义的索引,MySQL 中的基本索引类型
唯一索引
由unique 定义的索引 该索引值所在的字段的值必须是唯一的
全文索引
由fulltext 定义的索引 创建在字符或文本类型的字段上 注意只有MySAM 存储引擎支持
单列索引
是指在表中单个字段上创建的索引
组合索引
在表中将多个字段创建一个组合索引 在组合索引中 查询条件只有使用多个字段中的第一个字段时该索引才会被使用 一个表可以有多个单例索引,但这不是组合索引,因为组合索引是由多个字段创建的一个索引
创建索引
创建普通索引
create index dachui ON goudan(name);
//给goudan数据表中的name字段创建了dachui索引
//默认长度不限制 升序索引
创建唯一索引
create UNIQUE index 索引名 ON 表名(字段名[(长度)] [ASC|DESC]);
create unique index goudan ON dachui(sno DESC);
//给dachui数据表中的sno字段创建了goudan唯一索引 索引降序排列
创建全文索引
create FULLTEXT index 索引名 ON 表名(字段名[(长度)] [ASC|DESC]);
create fulltext index goudan2 ON dachui(address);
//将dachui数据表的address字段创建了全文索引goudan2
创建多列索引
create index dachui on goudan(sno,sname);
//在goudan数据表中创建名为dachui的多列索引
alter table 创建索引
alter table 表名 add [UNIQUE|FULLTEXT] index 索引名 (字段名[(长度)] [ACS|DESC]);
alter tablr 一次只能创建多个索引 create index 一次只能创建一个 alter tablr 可以不指定索引名,默认为第一列列名 create index 必须指定索引名
索引的查看和删除
数据库中索引文件的查看
show index from 数据库表名
索引的删除
语法一
ALTER TABLE 表名 DROP INDEX 索引名;
语法二
DROP INDEX 索引名 ON 表名;
视图
视图是一个或多个数据表中导出来的一个虚拟存在的数据表,表的结构和数据都依赖于源表
作用 查看源表中的数据;对源表数据进行增删改查操作
优点
- 简化查询语句,数据所见即所得
- 数据安全性,用户只能查询或修改所能见得到的数据
- 逻辑独立性,可以屏蔽真是表结构变化带来的影响
缺点
- 性能: 查询速度慢
- 表的依赖关系: 更改相关联的表,必须更改视图
创建视图
create VIEW 视图名[(字段名列表)] AS SELECT 语句;//如果指定某一特定的数据库需要
//数据库名.视图名
创建名为view_stu 的视图,将goudan 数据库中的ssno,sname,sdata 三列导入视图,并分别命名为学号,姓名,出生日期
create view view_stu(学号,姓名,出生日期) as select sno,sname,sdata from goudan;
查看
select * from 视图名;
查看视图定义
DESC 视图名;//更直观
//或者
show CREATE view 视图名;//更详细
修改
ALTER VIEW 视图名[(字段名)] AS SELECT 语句;
更新视图
//插入记录
INSERT INTO 视图名(字段名列表) VALUES(值列表);
//删除记录
DELETE from 视图名[WHERE 条件表达式];
//更新部分数据
UPDATE 视图名 SET 字段名1=表达式1[,字段名2=表达式2,...][WHERE 条件表达式]
删除视图
DROP VIEW [IF EXISTS] 视图名1[,视图名2,...];//如果不写 IF EXISTS 要保证用户指定删除的视图已存在 否则报错
|