• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
申镇华
博客园    首页    新随笔    联系   管理    订阅  订阅

MySQL实用基本操作

本博客写是装好Mysql并配好环境变量后的基本操作(windows10系统下)且都是黑框内的操作。

一、登陆MySQL

首先启动服务,在桌面左下角图标处点击右键Windows PowerShell(管理员)(A),然后会出来个蓝框,在蓝框内输入net start mysql80(80是对应的MySQL版本如果是其他版本则输入对应的版本号,如5.7版本输入net start mysql57),然后按回车键,若显示服务已启动,则服务启动成功。

在搜索框内输入cmd则会弹出命令提示符点击进去,所谓的黑框就弹了出来,黑框不一定是黑的,可以通过右键点击左上角改变其属性,接着在黑眶内输入mysql -u root -p,按回车键,输入你的密码,敲回车,登陆成功进入MYSQL。

二、对数据库的操作

(1)查看数据库:show databases;

(2)创建数据库:create database 数据库名;

(3)使用数据库:use 数据库名;

(4)删除数据库:drop database 数据库名;

部分实例

三、对表的操作

(1)创建数据表:create table 数据表名 (

属性1 类型, 属性2 类型,);

 

类型后边可以加限定条件:primary key(主键)、not null(不能为空)、unique(唯一的)、foreign key(外键)、default(定义初值)、

primary key:主键是一个表的特殊字段,可以唯一标识表的每条信息,主键的目的是为了快速查找表中的某条信息,主键必须是唯一的,主键值是非空的,主键可以是单一字段也可以是多个字段组合。

foreign key(外键):外键表是一个特殊的字段,设置外键原则,必须依赖于数据库已存在的父表的主键,外键可以为空值,建立改表与其父表的关联关系。foreign key(父表主键属性) references 外键名(同父表相同的属性)

not null:字段不能有空值,保证所有记录该字段都有值

unique:所有记录该字段的值不能重复出现

auto_increment:用于为表插入的新纪录自动生成唯一的id,一个表只能有一个字段使用该约束,必须为主键的一部分,约束字段可以是任何整数类型,默认值从一开始自增

default:创建表时指定该字段的默认值,当插入一条型记录没有为该字段赋值时,系统会自动为该字段插入默认值

创建表newstudent、newcourse、newsc实例

 

(2)删除数据表:drop table 数据表名;

(3)查询数据表

1.查看表结构:desc 数据表名;

2.查看表的详细定义:show create table 数据表名;

(4)修改基本表

alter table 修改表名,修改字段数据类型,条件约束...等等

1.修改表名:alter table 旧表名 rename 新表名;

2.修改字段的数据类型:alter table 表名 modify 属性名 数据类型;

3.修改字段名:alter table 表名 change 旧属性名 新属性名 新数据类型;

4.增加字段:alter table 表名 add 属性1 数据类型 (完整约束)first | after 属性名2;      若不设置位置,默认加到最后的位置

5.删除字段:alter table 表名 drop 属性名;

6.修改字段排列位置:alter table 表名 modify 属性1 数据类型 first | after 属性名2;

7.修改数据引擎:alter table 表名 engine = 储备引擎名;

8.删除表的外键约束:alter table 表名 drop foreign key 外键别名;

9.删除表的主键约束:alter table 表名 drop primary key;

10.删除表:drop table (if exists) 表名;

(5)索引

索引是由数据表中一列或多列组合而成,作用提高对表中数据的查询速度。优点:提高检索数据的速度,对于有依赖关系的父表和子表之间的联合查询,可以提高查询速度使用分组和排序子句进行查询时,节省查询中分组和排序时间。缺点:创建和维护索引需要浪费时间,耗费时间数量随数据量增加而增加,索引需要占用物理空间,增加,删除,修改数据时,要动态维护索引

索引的创建方式:

create table 表名 (属性名 数据类型 [完整约束],属性名 数据类型 [完整约束],[unique] index 索引名(属性名 [(长度)] [asc | desc]);

1.普通索引:这是最基本的索引,它没有任何限制。

2.唯一性索引:它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式

3.全文索引:全文索引只设置在char、varchar、text类型字段上,查询数据量较大的字符串时可以提高查找效率

4.单列索引:在表中单个字段上创建索引

5.多列索引:在表中多个字段上创建一个索引

6.空间索引

在存在的表上创建索引

create [unique | fulltext | spatial] index 索引名 on 表名 (属性名 [(长度)] [asc | desc]);

 alter table 创建索引

alter table 表名 add [unique | fulltext | spatial] index 索引名 (属性名 [(长度)] [asc | desc]);

删除索引

drop index 索引名 on 表名;

alter table 表名 drop index 索引名;

四、数据查询

1.单表查询

select [all | distinct] 属性名1,属性名2 | * from 表名1,表名2 [where 条件表达式 ] [group by 属性名 [having 条件表达式]] [order by 属性名 asc | desc ] [limit n];

 distinct:去除重复

 

查 询 条 件

谓    词

比    较

=,>,<,>=,<=,!=,<>,!>,!<;NOT+上述比较运算符

确定范围

BETWEEN AND,NOT BETWEEN AND

确定集合

IN,NOT IN

字符匹配

LIKE,NOT LIKE

空    值

IS NULL,IS NOT NULL

多重条件(逻辑运算)

AND,OR,NOT

order by:可以按一个或多个属性列排序   asc升序    desc降序       排序时空值默认排最后

聚集函数:计数count([all | distinct] *)   count([all | distinct] 列名)   计算总和sum([all | distinct] 列名)    计算平均值avg([all | distinct] 列名)   最大值max([all | distinct] 列名)   最小值min([all | distinct] 列名)

where与having差别:where用于基表或视图,从中选择满足条件的元组,having短句用于组,从中选择满足条件的组

limit(MySQL独有)两种使用方式:limit 记录数           limit 初始位置 记录数

2.连接查询

[表名1.] 列名 <比较运算符> [表名2.] 列名

[表名1.] 列名 betwee [表名2.] 列名 and  [表名2.] 列名2

自身连接

复合条件连接

3.嵌套查询

一个select-from-where语句称为一个查询块

将一个查询块嵌套在另一个查询块的where子句或having语句条件中的查询成为嵌套查询

带有in关键字的子查询

带有比较运算符的子查询 (<,>,=,!=,<=,>=,<>)   与any或all谓词配合使用      any任意一个值   all所有值

带有exists谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”

4.集合查询     union  /  union all   参加集合操作的各查询结果的列数必须相同,对应项的数据类型也必须相同

 

复杂查询经典例题:

    统计每门课程的学生选修人数(超过3人的才统计)。要求输出课程号和选修人数,结果按人数降序排列,若人数相同,按课程号升序排列

select cno,count(sno) from sc group by cno having count(sno)>3 order by count(sno),cno desc;

  

           查询学号比李丽大,而年龄比他小的学生姓名。

select sname from student where sno>(select sno from student where sname='李丽') and sage<(select sage from student where sname='李丽');

           查询08001和08002两个学生都选修的课程的信息

select *from course where cno in(select cno from sc where sno=8004) and cno in(select cno from sc where sno=8006);

           查询李丽同学不学的课程的课程号

select cno from course where cno not in(select cno from sc where sno=(select sno from student where sname='李丽'));

           查询选修了3号课程的学生平均年龄

select avg(age) from student where sno in(select distinct sno from sc where cno=3);

           求每门课程学生的平均成绩

select cno,avg(grade) from sc group by cno;

           查询既选修了2号课程又选修了3号课程的学生姓名、学号

select sno,sname from student where sno in(select sno from sc where cno=1 and sno in(select sno from sc where cno=2));

           求年龄大于女同学平均年龄的男同学姓名和年龄

 select sname,sage from student where sage>(select avg(sage) from student where ssex='女') and ssex='男';

           求年龄大于所有女同学年龄的男同学姓名和年龄

select sname,sage from student where sage> all(select sage from student where ssex='女') and ssex='男';

           查询至少选修了08002选修的全部课程的学生号码

select distinct sno from sc scx where not exists(select * from sc scy where scy.sno=8001 and not exists (select * from sc scz where scz.sno=scx.sno and scz.cno=scy.cno));

 

五、数据更新

1.插入数据

插入元组

Insert into 表名 [(列名1,列名2)] values (常量1,常量2);

into :属性序列可与表中定义的顺序不一致

values:提供的值必须与into子句匹配

 

插入子查询结果         将子查询结果插入到表中

Insert into 表名 [(列名1,列名2)] 子查询;

select语句目标必须与into语句匹配

2.修改数据       修改指定表中满足where字句条件的元组

update 表名 set 列名 = 值, [列名 = 值] [where 条件]; 

3.删除数据       删除指定表中满足where字句条件的元组

delete from 表名 [where 条件];

经典例题

           把低于总平均成绩的女同学成绩提高5分

update sc set grade=grade+5 where grade<(select * from (select avg(grade) from sc) temp) and sno in (select sno from student where ssex='女');

           修改2号课程的成绩,若成绩小于75分提高5%,成绩大于75时提高4%

update sc set grade=grade*1.05 where grade< all(select grade from(select grade from sc where grade>=75) temp) and cno=2;
update sc set grade=grade*1.04 where grade> all(select grade from(select grade from sc where grade<=75) temp) and cno=2;

   查询每一门课程成绩都大于等于80分的学生学号、姓名和性别,把值送往另一个已经存在的基本表STU(SNO,SNAME,SSEX)中

insert into stu(sno, sname, ssex) select sno, sname, ssex from student where sno in(select distinct sno from sc where grade>=80);

   统计3门以上课程不及格的学生把相应的学生姓名、系别追加到另外一个表中

 insert into newstu(sname, sdept) select sname,sdept from student where sno in(select sno from sc  where grade<60 group by sno having count(grade)>3);

   删除SC表中无成绩的记录

delete from sc where grade=null;

 

六、视图       提高了数据的安全性

特点:虚表,是由一个或几个基本表(或视图)导出的表

只存放视图的定义,不存放视图的数据

基表的数据改变,从视图中查询的数据也随机改变,而对视图显示的数据操作并不改变基表数据

1.定义视图

建立视图

create [algorithm={undefined | merge | temptable}] view 视图名 [(列名1,列名2)] as select 语句 [with [cascaded | local] check option];

undefined:MySQL自动选择所需要的算法

merge:使用视图语句与视图的定义合并起来,使得视图定义的某一部分取代语句的对应部分

temptable:将视图结果存入临时表,然后使用临时表执行语句

cascaded:可选参数,更新视图时要满足所有相关视图和表的条件,改参数为默认值

local:表示更新视图时要满足该视图本身的定义条件即可

删除视图

drop view [if exists] 视图名;

2.查询视图    和查询表操作一样只不过将表名换为了视图名

3.更新视图    和查询表操作一样只不过将表名换为了视图名,更新试图对基表数据没有影响

posted @ 2019-04-23 23:32  谁伏特  阅读(662)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3