本博客写是装好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.更新视图    和查询表操作一样只不过将表名换为了视图名,更新试图对基表数据没有影响

MySQL实用基本操作的更多相关文章

  1. linux的基本操作(mysql 的基本操作)

    Mysql 的基本操作 在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些 ...

  2. php基础系列:从用户登录处理程序学习mysql扩展基本操作

    用户注册和登录是网站开发最基本的功能模块之一,现在通过登录处理程序代码来学些下php对mysql的基本操作. 本身没有难点,主要是作为开发人员,应该能做到手写这些基本代码,算是自己加强记忆,同时希望能 ...

  3. mysql 的基本操作总结--增删改查

    本文只是总结一下mysql 的基本操作,增删改查,以便忘记的时候可以查询一下 1.创建数据库 语法:CREATE DATABASES 数据库名; 例子: CREATE DATABASES studen ...

  4. (三)mysql SQL 基本操作

    文章目录 MySQL服务器对象 mysql 的基本操作 SQL的注释 库操作 表(字段)操作 数据操作 MySQL服务器对象 mysql 服务器对象内部分成了 4 层: 系统(DBMS)----> ...

  5. mysql数据库基本操作sql语言

    mysql的启动与关闭 启动 /etc/init.d/mysql start 多实例使用自建脚本启动 2种关闭数据库方法 mysqladmin -uroot -p密码 shutdown #优雅关闭/e ...

  6. 自学 linux——14.mysql的基本操作

    MySQL的基本操作 1.名词介绍 以Excel文件举例: 数据库:可以看作是整个excel文件. 数据表:可以看作是一个excel文件中的工作表. 行(记录):可以看作是一个工作表中的一行 列(字段 ...

  7. mysql 之基本操作

    已经在板子内部把所有的环境都搭好了,现在的要求是对Mysql 进行一些基本的操作. 在这之前,记录几个要点以防以后忘记. 一,准备工作. 1. 将usr/share/mysql 目录下的 my-lag ...

  8. 数据库 —— mySQL的基本操作

    学习资源: 0.学习教程 :MySQL 教程(runoob.com)   (MySQL Tutorial)turtorialPoint 1.学习帮助手册与平台: MySQL学习平台   英文手册chm ...

  9. 数据库(MySQL)表基本操作

                                    数据库表基本操作 思前想后,最终还是把博客的名字改成了数据库表基本操作,以前叫SQL语句大全,感觉用"大全"这个名词 ...

随机推荐

  1. Winfrom 动画实现

    Winform 动画实现 实际上是调用的系统的 Win32 class Animation { // 从左到右打开窗口 public const Int32 AW_HOR_POSITIVE = 0x0 ...

  2. vw实现移动端自适应页面

    一.设备支持情况 测试网站:https://caniuse.com/#search=vw css3test:https://airen.github.io/css3test/,https://gith ...

  3. Physics Experiment 弹性碰撞 [POJ3684]

    题意 有一个竖直的管子内有n个小球,小球的半径为r,最下面的小球距离地面h高度,让小球每隔一秒自由下落一个,小球与地面,小球与小球之间可视为弹性碰撞,让求T时间后这些小球的分布 Input The f ...

  4. React(二)组件

    1.组件概念: 我理解的组件的概念就是复用性,一个组件开发完成后可以重复使用. 2.简单的组件编写 (1)在src中创建一个components的文件夹,里面创建一个header.js的文件 (2)在 ...

  5. git 强制覆盖分支

    假设要用develop覆盖master分支,如下操作 git checkout master git reset --hard develop //先将本地的master分支重置成develop gi ...

  6. JAVA 学习日记

    4. 数组 int[] in = new int[5];in[0] = 1;in[1] = 11;in[2] = 111;for(int i=0;i<in.length;i++){ System ...

  7. oc与c语言的相互调用

    一:OC调用C语言 C语言的.h文件 // // TestPrint.h // TestDemo // // Created by Techsun on 14-8-12. // Copyright ( ...

  8. css学习_css3过渡

    1.css3过渡 注意:记住多属性设置的方式:若把过渡写在了hover里面的话鼠标移走时不会有过渡效果!:不同属性同时变时用  all 就可以实现了. 2.css3  transform属性 1.移动 ...

  9. php删除文件夹

    function deldir($dir) { $dh=opendir($dir); while ($file=readdir($dh)) { if($file!="." & ...

  10. Java 通过getbean取出的类为什么要强转为接口类

    这个问题是之前一个同学问我的,这些是我在网上找到的资料,由于我自己也没有完全搞明白,先大概记录一下 首先问题是为什么在bean文件中注入的是实现类,但是通过getBean()取出的时候却必须强制转化为 ...