MYSQL基本操作命令

在介绍基本操作命令之前,首先简单说说范式的相关概念。

范式是什么?简而言之就是,数据库设计对数据的存储性能,还有开发人员对数据操作都有莫大的关系。所以,建立科学,规范的数据库需要满足一些规范来优化数据库的数据存储方式。在关系型数据库中,这些规范称之为范式!

第一范式(1NF)

要求:数据表中的每一列或者每一个字段必须是不可拆分的最小单元,确保了每一列的原子性。

特点:1>有主键,且主键不能为空;2>字段不能再分

示例:(以下例子不满足第一范式)

学号年龄信息
10119湖北武汉市,电话:12345678
10120湖北

主键:学号

不满足第一范式的原因:1>主键重复;2>信息这一字段可以再分

第二范式(2NF)

要求:在满足第一范式的基础上,且每一个非主属性完全依赖于主键

特点:1>满足第一范式;2>表中的每一个非主属性,必须完全依赖于主键;3>只有当一个表中,主键由两个或者两个以上的属性组成的时候,才会出现不符合第二范式的情况

示例:(以下例子不满足第二范式)

学号课程号得分课程名
10100395数据库

主键:学号、课程号

不满足第二范式的原因:课程名不完全依赖于所定义的所有的主键,课程名部分依赖于主键课程号

第三范式(3NF)

要求:在第二范式的基础上,且消除传递依赖性

特点:1>满足第二范式;2>所有的非主键列部分依赖于主键列

学生课程老师老师职称教师上课时间
小明语文王五讲师1108:30

主键:学生、课程

上面的“学生上课表”符合2NF,可以这样验证:两个主属性单独使用,不用确定其它四个非主属性的任何一个。但是它有传递依赖!在“老师”和“老师职称”这里,一个老师一定能确定一个老师职称。

如果不消除这种传递依赖,有可能会出现:

1、老师职称变了,变教授了,要改数据库,表中有N条,改了N次……(修改异常)

2、没人选这个老师的课了,老师的职称也没了记录……(删除异常)

3、新来一个老师,还没分配教什么课,他的职称记到哪?……(插入异常)

所以为了解决这些问题应把表拆分成:

学生课程老师教室上课时间
小明语文王五1108:30
老师老师职称
大宝讲师

范式越高、拆分的表会越多、表越多带来的问题是:
1、查询是需要连接多个表,增加查询的复杂度
2、查询时需要连接多个表,降低了查询的性能

命令操作

1、断开数据库: exit;

2、查看存在的数据库:show databases;

3、创建数据库:create database 数据库名;

4、选择数据库:use 数据库名;

5、查看数据库下的表:show tables;

6、删除数据库:drop database 数据库名;

7、创建表
create table table_name(
属性名 类型 [完整性约束],
属性名 类型 [完整性约束],
...
属性名 类型[完整性约束]
);

示例:

学生表
   Student(SID,Sname,Sage,Ssex)   --SID 学生编号,Sname 学生姓名,Sage 年龄,Ssex 学生性别
  
  create table Student(
  SID INT primary key unique,
  Sname varchar(25) not null,
  Sage  INT,
  Ssex  char(4) default 'nan'
  ); 

8、查看表:

desc table_name;  通过desc关键字查看表的字段名称、类型、是否为null、约束条件,默认值、备注信息
show create table table_name; 展示创建表的SQL语句,并且打印了存储引擎以及字符集编码

9、删除表:drop table table_name; 

插入数据:insert into table_name(属性1、属性2...属性n) values (v1,v2...vn);

eg:insert into Student(SID,Sname,Sage,Ssex) values (1,'zhan san',12,'nan');

删除数据:drop from table_name where 属性名=value;

10、修改表:
在使用过程中不满足使用情况下修改,用alter命令修改

1)、修改表名:alter table  old_table_name RENAME new_table_name;

eg:alter table Student rename gdz;

2)、修改属性类型:alter table table_name MODIFY 属性名 属性类型;
eg:alter table Student modify Ssex varchar(4);

3)、修改属性名:alter table table_name CHANGE 旧属性名 新属性名 数据类型;
eg:alter table Student change Ssex Stest varchar(4);

4)、增加字段:alter table table_name ADD 属性名 属性类型 [完整性约束];
eg:alter table Student add Stest varchar(10) default 'hello';

5)、删除字段:alter table table_name DROP 属性名;
eg:alter table Student drop Stest;

6)、修改属性排列位置
alter table table_name MODIFY 属性名 属性类型 FIRST;    //将当前属性放到第一个位置
alter table table_name MODIFY 属性名1 属性类型 AFTER 属性名2;  // 属性1排列在属性2后面 
eg:alter table Student modify Ssex varchar(4) after Sname;

7)、修改表的存储引擎:alter table table_name ENGINE = INNODB|MYISAM;

11、查询表:

select 属性列表 from 表名 [where 条件表达式1]
[group by 属性名1[having 条件表达式]]
[order by 属性名2 [asc | desc]]

1)、带in子查询:[not] in (元素1 ,元素2... 元素3);         eg:select * from Student where SID in(2,3,4);
2)、带between and 的范围查询:[not]between 取值1 and 取值2;      eg:select * from Student where Sage between 20 and 21;
3)、带like的通配符匹配字符串:[not] like '字符串';
通配符:
%:表示0个或者任意长度的字符串
_:只能表示1个字符
eg:select * from Student where Sname like '%l%';
4)、空值查询:is [not] null;           eg:select * from Student  where Sname is not null;
5)、带and的多条件查询:条件表达式1 and 条件表达式2 [ ... and 条件表达式2]       

eg:select * from Student where SID >2 and Ssex='nv';
6)、带or的多条件查询:条件表达式1 or 条件表达式2 [ ... or 条件表达式2]     eg:select * from Student where SID > 2 or Ssex='nv';
7)、去重复查询 :select distinct 属性名                                eg:select distinct Ssex from Student;
8)、用group by 属性名[having 表达式];          select * from Student group by Ssex;

9)、对结果排序:order by 属性名[asc | desc];   asc:升序排列,数据越来越大,默认是升序     desc:降序排列,数据越来越小
eg:select * from Student order by Sage asc;

10)、union 联合查询
select 属性列表 from table_name1 [where 条件表达式] union
select 属性列表 from table_name2 [where 条件表达式]
联合查询默认的结果数据进行了去重,distinct   
使用All 可以展示不去重的结果

eg:select SID from Student union all  select SID from SC;

11)、limit 分页查询
select * from Student limit 90 ;一个参数指从起始0号位置开始读取指定长度的数据

select * from Student limit200,9 ; 第一个位置值得是起始位置,第二个参数指的是读取数据的长度(个数)

12)、联合查询

左连接(left join)
右连接(right join)
内连接(inner join)

左连接:select * from Student a left join SC b on a.SID = b.SID;

内连接:select * from Student a inner join SC b on a.SID = b.SID;

右连接:select * from Student a right join SC b on a.SID = b.SID;

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值