mysql入门 博客园_MySQL入门

1. mysql是一种常用的数据库管理软件,优点有:免费,开源,跨平台,本文只是介绍一下MySQL的简单操作

2.数据库的基本结构

可以把数据库理解成一个文件夹,数据库中的数据存放的单位是表,可以理解为excel表格,表格的表头称为字段,表中的每一条数据称为记录

d469544496846ec33448c9958da6b5ed.png

3.MySQL安装

1.从官网下载 https://www.mysql.com/downloads/

2.下载msi格式的文件,双击安装即可

3.配置环境变量

windows环境安装比linux简单的多,所以安装过程就不赘述

4.安装好以后,打开命令提示行,输入mysql -uroot -pkey,(key为安装过程中设置的 密码),然后回车出现  mysql > ,就表示安装成功了

4.sql语句规范

sql是结构化查询语言的缩写。我们通过sql语句来操作数据库,下面是sql语句的一些书写规范

1.sql语句不区分大小写,但是建议sql命令大写,自定义的库名表名之类小写

2.sql语句支持分行,以分号结尾,关键词不能跨行

3.用空格和缩进来提高语句可读性

4.单行注释:--

多行注释:/*....*/

5.中括号里的内容表示 可有可无

5.数据库简单操作

1.创建数据库  CREATE DATABASE database_name;

可以在创建数据库的时候指定编码集  CREATE DATABASE database_name CHARACTER SET utf8;

2.删除数据库  DROP DATABASE database_name; 从删库到跑路

3.查看已创建的数据库  SHOW DATABASES;

4.查看数据库创建信息   SHOW CREATE DATABASE database_name;

5.修改数据库字符集  ALTER DATABASE database_name CHARACTER SET utf8;

6.使用数据库  USE database_name;    进入数据库后没有退出名令,但是可以继续用SHOW查看数据库并用USE切换到其他数据库

6.表的简单操作

使用数据库后执行的操作

1.创建表  CREATE TABLE table_name(字段名称 字段数据类型  [约束],

字段名称 字段数据类型  [约束],

字段名称 字段数据类型  [约束]

);

2.查看所有表  SHOW TABLES;

查看表的详细信息  DESC table_name;

查看表的创建信息  SHOW CREATE TABLE table_name;

3.增加列  ALTER TABLE table_name ADD 列名 类型 [完整性约束条件] [first|after 字段名];

增加多列用逗号隔开

4.修改

修改一列类型   ALTER TABLE table_name MODIFY 列名 类型  [完整性约束条件];

修改列名    ALTER TABLE table_name CHANGE 列名 新名 类型 [约束条件];

修改表名  RENAEM TABLE 表名 TO 新名;

修改表的字符集  ALTER TABLE table_name CHARACTER SET utf8;

5.删除

删除一列  ALTER TABLE table_name DROP 列名;

删除表   DROP TABLE table_name;

删除主键的自增长  ALTER TABLE table_name CHANGE id id int(10)

7.约束条件

创建表的时候,字段后面要加约束条件。常用的约束条件有:

1.非空  not null

2.唯一性 unique

3.主键  primary key  如果一个字段设置了非空属性和唯一性约束,那么自动识别为主键

4.自增  auto_increment  只有主键可以设置这个约束

8.sql数据类型

数值类型:

类型大小范围(有符号)范围(无符号)用途

TINYINT

1 字节

(-128,127)

(0,255)

小整数值

SMALLINT

2 字节

(-32 768,32 767)

(0,65 535)

大整数值

MEDIUMINT

3 字节

(-8 388 608,8 388 607)

(0,16 777 215)

大整数值

INT或INTEGER

4 字节

(-2 147 483 648,2 147 483 647)

(0,4 294 967 295)

大整数值

BIGINT

8 字节

(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)

(0,18 446 744 073 709 551 615)

极大整数值

FLOAT

4 字节

(-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)

0,(1.175 494 351 E-38,3.402 823 466 E+38)

单精度

浮点数值

DOUBLE

8 字节

(1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

双精度

浮点数值

DECIMAL

对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

依赖于M和D的值

依赖于M和D的值

小数值

时间类型:

类型大小

(字节)范围格式用途

DATE

3

1000-01-01/9999-12-31

YYYY-MM-DD

日期值

TIME

3

'-838:59:59'/'838:59:59'

HH:MM:SS

时间值或持续时间

YEAR

1

1901/2155

YYYY

年份值

DATETIME

8

1000-01-01 00:00:00/9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

8

1970-01-01 00:00:00/2037 年某时

YYYYMMDD HHMMSS

混合日期和时间值,时间戳

字符串类型:

类型大小用途

CHAR

0-255字节

定长字符串

VARCHAR

0-65535 字节

变长字符串

TINYBLOB

0-255字节

不超过 255 个字符的二进制字符串

TINYTEXT

0-255字节

短文本字符串

BLOB

0-65 535字节

二进制形式的长文本数据

TEXT

0-65 535字节

长文本数据

MEDIUMBLOB

0-16 777 215字节

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16 777 215字节

中等长度文本数据

LOGNGBLOB

0-4 294 967 295字节

二进制形式的极大文本数据

LONGTEXT

0-4 294 967 295字节

极大文本数据

9.表记录操作

1.插入数据 insert

INSERT [INTO] table_name (字段名称,,,) VALUES(值,,,),

(值,,,),

.......

(值,,,);

2.修改表记录

UPDATE table_name SET 字段=值,字段=值....WHERE子句;

3.删除表记录

DELETE FROM table_name WHERE子句; 不加where子句的话会把整个表删除

TRUNCATE TABLE table_name;  删除整个表

delete和truncate的区别:

1.语法不同

2.delete后面可以加限制条件,选择删除某条记录,而truncate只能删掉整个表

3.delete 可以返回删除的数据,但是truncate不能

4.在删除整个表的时候,delete的原理是一条一条的删除,而truncate 的原理是把整个表删掉,再新建一个同样字段的表

所以,如果表中有自增长的字段,delete删除之后,新的表是从上个位置开始自增的,但是truncate是从1开始

10.表记录查询  select

这个是最重要,也是最常用的

1.单表查询

SELECT [DISTINCT] *|field1,field,... from table_name where .... group by .... order by...[desc|asc]

1.显示表的全部信息  SELECT * FROM table_name;

显示指定列的信息  SELECT 列,列.. FROM table_name;

SELECT 后面可以跟 表达式 、distinct(表示去重)

2.用WHERE子句进行过滤

WHERE子句中可以使用:

1.比较运算符  > < >= <= !=

2.between .. and ..   在..和.. 之间

3.in (a,b,c)         在a,b,c 这三个值中一个

4.like  条件  eg: like "李%"  表示已“李”开头

like "李_"    表示以“李”开头,并且后面有一个字符,一个下划线代表一个字符

5.逻辑运算符 and or not

3.order by  表示以。。排序,排序的列可以是列名,也可以是设置的别名

order语句后面可以跟两个模式,asc表示升序(默认),desc表示降序

4.group by 表示以..分组,分组后只会显示每个字段的第一条记录,分组后的筛选用的关键字是having ,作用和 where一样,与where相比,having后面可以使用聚合函数

5.聚合函数:

1.avg() 求平均值

2.count() 统计个数

3.sum() 求和函数

4.max(),min()  最大值最小值函数

6.limit 关键字用来控制显示的条数,limit 1 表示只显示第一行,limit 2,5 表示显示第2到5行

7.使用正则表达式

2.多表查询

1.外键

如果两张表要创建联系,就需要使用到外键,需要考虑几种关系:一对一,多对多,和一对多

1.一对多: 这种模型中,有主表和子表的区别,比如一个老师有多个学生,一个学生只能有一个老师,这种情况老师就是主表,学生就是子表,我们需要在子表中创建关联字段(外键)

增加外键:[ADD CONSTRAINT name] FOREIGN KEY (字段名)REFERENCES table_name;

删除外键:ALTER TABLE table_name DROP FOREIGN KEY name;

(这个name是增加外键时给外键起的名字,如果没有设置,从表的创建方式中可以找到)

2.多对多:需要借助第三张表,在第三张表中创建两个外键

3.一对一:这种实际就是外键加一个unique,很少用

4. 一旦两张表建立了关联,就不能随便从表中删除记录了,必须解除关联后才能删

2.内连接

我们在查询表记录的时候,可以同时显示多张表的记录,类似

select * from tableA,tableB

但是这样并不是我们想要的结果,当然我们可以在查询结果后面用where子句进行筛选,但更常用的是用内连接:

select * from tableA inner join tableB on tableA.id = tableB.id

3.外连接

1.左外连接:在内连接的基础上增加左边有右边没有的结果

select * from tableA left join tableB on tableA.id = tableB.id

2.右外连接:在内连接的基础上增加右边有左边没有的结果

select * from tableA right join tableB on tableA.id = tableB.id

多表查询练习(代码通过navicat书写):

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 -- 1.查询平均成绩大于八十分的同学的姓名和平均成绩2 -- SELECT sname,avg(num) fromstudent INNER JOIN score3 -- on student.sid =score.student_id4 --GROUP BY student_id5 -- HAVING avg(num) >80

6

7 -- 2、查询所有学生的学号,姓名,选课数,总成绩8

9 -- SELECT student.sid,sname,count(course_id),sum(num) fromstudent10 --INNER JOIN score11 -- on score.student_id =student.sid12 --GROUP BY student_id13 -- 3、查询没有报李平老师课的学生姓名14

15 -- SELECT sname from student WHERE sid not in (SELECT DISTINCT student_id from score WHERE course_id in (SELECT cid fromteacher16 --INNER JOIN course17 -- on teacher.tid =course.teacher_id18 -- WHERE tname like '李平%'))19

20 -- 4、查询物理课程比生物课程高的学生的学号21 -- SELECT * from

22 --

23 -- (SELECT * from score WHERE course_id = (SELECT cid from course WHERE cname="物理")) as A24 --

25 --INNER JOIN26 --

27 -- (SELECT * from score WHERE course_id = (SELECT cid from course WHERE cname="生物")) as B28 --

29 -- on A.student_id =B.student_id30 --

31 -- WHERE A.num >B.num32 --

33 -- 5、查询没有同时选修物理课程和体育课程的学生姓名34

35 -- SELECT sname from student where sid not in(SELECT student_id fromscore36 --WHERE course_id37 -- in (select cid fromcourse38 --WHERE cname39 -- like "物理" or cname = "体育")40 -- GROUP BY student_id having count(sid)=2)41 --

42

43 -- 6、查询挂科超过两门(包括两门)的学生姓名和班级44

45 -- SELECT sname,caption fromstudent46 -- INNER JOIN class

47 -- on student.sid = class.cid48 -- where sid in

49 -- (SELECT student_id fromscore50 -- where num <60GROUP BY student_id51 -- HAVING count(num) >=2)52

53 -- 7、查询选修了所有课程的学生姓名54 -- SELECT sname fromstudent55 -- WHERE sid in (SELECT student_id fromscore56 --GROUP BY student_id57 -- HAVING count(course_id) = (SELECT count(cid) fromcourse)58 --)59

60

61

62

63 -- 8、查询不同课程但成绩相同的学号,课程号,成绩64

65 SELECT student_id,course_id,num from score WHERE student_id = (SELECT A.student_id from

66

67 (SELECT *,COUNT(DISTINCT num) as C FROM score GROUP BY student_id)as A68

69 LEFT JOIN70

71 (SELECT *,count(num) as D FROM score GROUP BY student_id) as B72

73 on A.sid =B.sid74

75 where C!=D)76

77 -- 9、查询没学过“李平”老师课程的学生姓名以及选修的课程名称;78

79 SELECT a.sname,course.cname fromcourse80 RIGHT JOIN (SELECT * fromstudent81 WHERE sid not in

82 (select student_id83 from score where course_id =3) )as A84 on course.cid =A.class_id85

86

87

88

89 -- 10、查询所有选修了学号为1的同学选修过的一门或者多门课程的同学学号和姓名;90

91 --

92 SELECT sid,sname93 fromstudent94 WHERE sid in (SELECT DISTINCT student_id fromscore95 WHERE course_id96 in(SELECT course_id97 from score where student_id = 1))98

99

100

101

102 -- 11、任课最多的老师中学生单科成绩最高的学生姓名103

104 SELECT sname fromstudent105 where sid in (SELECT DISTINCT student_id fromscore106 WHERE course_id in (SELECT cid fromcourse107 where teacher_id=(SELECT teacher_id fromcourse108 GROUP BY teacher_id order by count(cid) desc limit 1))109 and num=(SELECT max(num) from score WHERE course_id in

110 (SELECT cid from course where teacher_id=(SELECT teacher_id111 from course GROUP BY teacher_id order by count(cid) desc limit 1)) ))-- SELECT * from score GROUP BY course_id having

练习题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值