数据库(MySQL)基础快速入门!

前言:这篇送给那些想要学会数据库,但又不想花太多时间的同学们。看了这篇数据库知识,轻轻松松搞定它!用不同的工具操作数据库命令可能会有小小的不同,我用的是系统自带的cmd。(凡是数据库名称,数据表名称若有对不上的地方,不重要!!!替换成你自己的数据库名称,数据表名称即可!)
在这里插入图片描述

命令大小写都可以!!! 命令中间的或者后面的标点符号都是英文符号!

1、数据库的创建,删除,显示,使用。

(1)创建数据库:create database 数据库名;例如:create database test;(如果之前没创建过数据库,就会显示Empty set
在这里插入图片描述
(2)删除数据库:drop database 数据库名;例如:create database text;
在这里插入图片描述
(3)显示所有的数据库:show databases;
在这里插入图片描述
(4)使用数据库(选中某个数据库进行操作):use 数据库名;例如:use test;(若要对某个数据库进行操作,那么创建完数据库,或者对某数据库进行操作前必须执行这一步!)
在这里插入图片描述

2、数据表的创建,删除,显示。

(1)创建数据表:

create table 数据表名(
     名称1 类型(大小)(其他属性:主键,是否可以为空,汉语显示等等),
     名称2 类型(大小)(其他属性:主键,是否可以为空,汉语显示等等),
     ······
     名称n 类型(大小)(其他属性:主键,是否可以为空,汉语显示等等),
);  
例:create table mingzhu(
              name varchar(20),
              author varchar(20),
              sex char(5));

在这里插入图片描述
(2)删除数据表:drop table 数据表名;例如:drop table mingzhu6;
在这里插入图片描述
(3)显示所有的数据表:show tables;
在这里插入图片描述
(4)显示数据表的结构:describe 数据表名;例如:describe mingzhu;
在这里插入图片描述

3、数据表的增,删,查,改。

(1)增: insert into 数据表名 values('name1','author1','sex1');(根据定义字段的类型输入对应类型的值)例如:insert into mingzhu values ('红楼梦','曹雪芹','男'); insert into mingzhu values('hongloumeng','caoxueqin','nan');
在这里插入图片描述
在这里插入图片描述
注意: 创建数据表时应该在后面加上:default charset=utf8,否则将中文插进去会是乱码!
例如:
在这里插入图片描述
(2)删: 删除数据表里的数据:delete from 数据表名 where 表的一个字段="字段的内容";例如:delete from mingzhu1 where name="红楼梦";
在这里插入图片描述
(3)查: 查看数据表的全部信息:select * from 数据表名;例如:select * from mingzhu;
在这里插入图片描述
根据某一字段查询相应的内容:select 要查询的字段 from 数据表名 where 字段="该字段的内容";例如:select name from mingzhu1 where author="罗贯中";
在这里插入图片描述
(4)改: 修改数据表里的数据:update 数据表名 set 字段="要修改后的样子" where 另一个字段="能根据这个来定位要修改的字段";例如:update mingzhu1 set author="wuchengen" where name="西游记";
在这里插入图片描述

4、MySQL中常用的数据类型:

MySQL支持多种类型,大致可分为三类:数值,日期/时间和字符串(字符)类型。
(1)字符串数据类型: 在这里插入图片描述
1.char(n)和varchar(n)中括号中n代表字符的个数,并不代表字节个数,所以当使用了中文的时候(UTF8)意味着可以插入m个中文,但是实际会占用m*3个字节。
2.同时char和varchar最大的区别就在于char不管实际value都会占用n个字符的空间,而varchar只会占用实际字符应该占用的空间+1,并且实际空间+1<=n。
3.超过char和varchar的n设置后,字符串会被截断。
4.char的上限为255字节,varchar的上限65535字节,text的上限为65535。
5.char在存储的时候会截断尾部的空格,varchar和text不会。
6.varchar会使用1-3个字节来存储长度,text不会。
(2)数值数据类型:
整型:
在这里插入图片描述
浮点型:
在这里插入图片描述
日期和时间数据类型:
在这里插入图片描述
其他类型:
1.enum(“member1″, “member2″, … “member65535″) enum数据类型就是定义了一种枚举,最多包含65535个不同的成员。当定义了一个enum的列时,该列的值限制为列定义中声明的值。如果列声明包含NULL属性,则NULL将被认为是一个有效值,并且是默认值。如果声明了NOT NULL,则列表的第一个成员是默认值。
2.set(“member”, “member2″, … “member64″) set数据类型为指定一组预定义值中的零个或多个值提供了一种方法,这组值最多包括64个成员。值的选择限制为列定义中声明的值。

5、MySQL建表约束:primary key

(1)主键约束:它能够唯一确定一张表中的一条记录,也就是我们通过给某个字段加约束,就可以使得该字段不重复且不为空。
例如:假如你设置一张表中的字段name为主键,那么你就不能插入相同的name的内容,且插入的name不能为空,若你非要背道而驰,那就会报错喽。(有两种设置主键的方法!)
在这里插入图片描述
下面设置的是联合主键,只要id和name重合时不一样就不会出现错误。即:id一样,name不一样,id不一样,name一样都是正确的。只有id一样且name一样才会出错。
在这里插入图片描述

(2)自增约束:和主键约束一起用,可以顺序的插入数据。
在这里插入图片描述
再插入一个:
在这里插入图片描述
修改表结构:添加主键,可以:alter table 数据表名 add primary key(字段);例如:alter table mingzhu5 add primary key(id);
在这里插入图片描述
删除主键:例如:alter table mingzhu5 drop primary key;
在这里插入图片描述
还可以添加:使用modify修改字段,添加约束。例如:alter table mingzhu5 modify id int primary key;
在这里插入图片描述

(3)唯一约束:约束修饰的字段的值不能重复。与主键约束的区别是:唯一约束可以为空。通过:alter table mingzhu5 add unique(name) 添加唯一约束。也可以在建表的时候添加,和主键约束相似。

create table mingzhu5(
           id int unique,
           name varchar(30),
           author varchar(30))default charset=utf8;
 或者:
 create table mingzhu5(
           id int,
           name varchar(30),
           author varchar(30),
           unique(id,name)  //这种的可以使多个字段是唯一约束,只要组合在一起不重复就OK
           )default charset=utf8;

删除唯一约束:例如:alter table mingzhu5 drop index name;,modify添加约束:alter table mingzhu5 modify name varchar(30) unique;
在这里插入图片描述
总结:
1、建表的时候就可以添加约束,两种。。。
2、可以使用alter。。。add。。。添加约束
3、可以使用alter。。。modify。。。添加约束
4、删除约束:alter。。。drop。。。

(4)非空约束:修饰的字段不能为空。建表的时候在字段后面直接加上 not null 就好。

(5)默认约束:当我们插入字段值的时候,如果没有传值,就会使用默认值。
可以设置默认值。默认值设置完毕,如果没有传入其他的值,则会显示默认值,如果传的有值,就会显示传入的值。
在这里插入图片描述
也可以用alter。。。add。。。//alter。。。modify。。。添加默认值。

(6)外键约束:涉及到两个表(主表,副表)
在这里插入图片描述显示新建的两个数据表:
在这里插入图片描述
插入四个班级:
在这里插入图片描述
在这里插入图片描述
结论:1、主表classes中没有的数据值,在副表中,是不可以使用的;
2、主表中的记录被副表引用,是不可以删除的。

6、数据库的三大范式

(1)第一范式(1NF):数据表中的所有字段都是不可分割的原子值。
字段值还可以拆分的,就不满足第一范式,字段设计的越详细不一定就是最好的,要根据实际情况来判断。
(2)第二范式(2NF):在满足第一范式的条件下,第二范式要求除主键外的每一列都必须完全依赖主键。如果出现不完全依赖的情况,只可能出现在联合主键的情况下。
举例:设计一个订单表:当出现以下问题时需要拆分表!
在这里插入图片描述
(3)第三范式(3NF):在满足第二范式的条件下,除主键列之外的其他列之间不能有传递依赖关系。
在这里插入图片描述

7、语句练习

下面的示例语句都是有应用场景的,仅供参考,切忌生搬硬套!!!

(1)查询学生表的所有记录:select * from students;
(2)查询students表中的所有记录的sname,sex和class列:select sname,sex,class from students;
(3)查询教师所有的单位即不重复的depart列:select distinct depart from teacher;(distinc:排除重复)
(4)查询score表中成绩在60到80之间的所有记录:select * from score where degree between 60 and 80; || select * from score where degree>60 and degree<80;
(5)查询score表中成绩为85,86或88的记录(同一个字段用in):select * from score where degree in(85,86,88);
(6)查询student表中“95031”班或性别为“女”的同学记录(不同的字段用or):select * from student where class='95031' or sex='女';
(7)以class降序查询student表的所有记录:select * from student order by class desc; //降序;select * from student order by class asc; //升序默认(asc:也可不写)
(8)以cno升序,degree降序查询score表的所有记录:select * from score order by cno asc,degree desc; //先按照cno升序,遇到相同的cno,再根据degree降序
(9)查询“95031”班的学生人数:select count(*) from student where class='95031';
(10)查询score表中的最高分的学生学号和课程号(子查询或者排序):
子查询:select sno,cno from score where degree=(select max(degree) from score); || ①select max(degree) from score;select sno,cno from score where degree=max(degree);
排序:select sno,cno,degree from score order by degree;//默认的升序排列,最后一个就是最大的
(11)查询score表中至少有2名学生选修的并以3开头的课程的平均分数:
select cno,avg(degree) from score group by cno having count(cno)>=2 and cno like '3%';
(12)查询学号为108,101的同学同年出生的所有学生的sno,sname和sbirthday列:select * from student where sno in (108,101); select year(sbirthday) from student where sno in (108,101); //year()截取年份,month()截取月份

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值