五、常用的MySQL命令

一、SQL分类

DDL (数据定义语言)

数据定义语言 - Data Definition Language

用来定义数据库的对象,如数据表、视图、索引等

DML  (数据操纵语言

数据处理语言 - Data Manipulation Language

在数据库表中更新,增加和删除记录

updateinsertdelete

DCL (数据控制语言

数据控制语言Data Control Language

指用于设置用户权限和控制事务语句

grantrevokeifelsewhilebegin transaction

DQL (数据查询语言

数据查询语言Data Query Language select

二、MySQL常用数据类型

字符串型

VARCHARCHAR

大数据类型

BLOB(存储二进制数据,如图片)TEXT(存储文本数据,如介绍)

数值型

TINYINT SMALLINTINTBIGINTFLOATDOUBLE

逻辑性

BIT

日期型

DATETIMEDATETIMETIMESTAMP

三、MySql的基本操作

Sql语句的命令是不分大小写的。

3.1.创建数据库

CREATE  DATABASE  [IF NOT EXISTS] db_name   

[create_specification [, create_specification] ...]

create_specification:   

[DEFAULT] CHARACTER SET charset_name 

[DEFAULT] COLLATE collation_name

CHARACTER SET:指定数据库采用的字符集

COLLATE:指定数据库字符集的比较方式

练习:

创建一个名称为mydb1的数据库。

创建一个使用utf8字符集的mydb2数据库。


创建一个使用utf8字符集,并带校对规则的mydb3数据库。

3.2.查看、删除数据库

1)显示系统所有的数据库语句:

SHOW DATABASES

2)显示数据库创建语句:

SHOW CREATE DATABASE db_name

3)数据库删除语句:

DROP DATABASE  [IF EXISTS]  db_name

练习:

查看当前数据库服务器中的所有数据库


查看前面创建的mydb2数据库的定义信息

删除前面创建的mydb1数据库

3.3.修改数据库

ALTER  DATABASE  [IF NOT EXISTS] db_name   

[alter_specification [, alter_specification] ...]

alter_specification:   

[DEFAULT] CHARACTER SET charset_name 

[DEFAULT] COLLATE collation_name

练习:

切换数据库 use db_name;


查看当前使用的数据库 select database();

查看服务器中的数据库,并把其中某一个库的字符集修改为gbk;

3.4.查看、创建表(基本语句)

注意:创建表前,要先使用use db语句使用库。

CREATE TABLE table_name

(

field1  datatype,

field2  datatype,

field3  datatype

)character set 字符集 collate 校对规则

field:指定列名 datatype:指定列类型

注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user对象

id        int                              

name string

password string

birthday date

练习:

查看当前数据库的所有表:

删除user表:


创建一个员工表employee ---- 查看表结构: desc 表名;


查看employee表的结构:

3.5.定义单表字段的约束(保证数据的有效性和完整性)

定义主键约束

primary key:不允许为空,不允许重复

删除主键:alter table tablename drop primary key ;

主键自动增长 auto_increment

定义唯一约束

unique  

例如:name varchar(20) unique

定义非空约束

not null  

例如:salary double not null

3.6.修改表

使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.

练习:

修改表的名称:rename table 表名 to 新表名;

修改列的名称: change  [column] old_col_name column_definition;

修改表的字符集:alter table user character set utf8;

在上面员工表的基本上增加一个image列。

修改job列,使其长度为60

删除gender列。


修改表的字符集为utf8

3.7.数据库CRUD语句

Insert语句    (增加数据)

Update语句  (更新数据)

Delete语句   (删除数据)

Select语句 (查找数据)

3.7.1.INSERT 插入语句

使用 INSERT 语句向表中插入数据。


插入的数据应与字段的数据类型相同。

数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。

values中列出的数据位置必须与被加入的列的排列位置相对应。

字符和日期型数据应包含在单引号中。

插入空值:不指定或insert into table value(null)

练习:使用insert语句向表中插入数据


3.7.2.UPDATE更新语句

使用 update语句修改表中数据。

UPDATE语法可以用新值更新原有表行中的各列。

SET子句指示要修改哪些列和要给予哪些值。

WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

练习:

将所有员工薪水修改为5000元。



将姓名为zs’的员工薪水修改为3000元。



将姓名为ls’的员工薪水修改为4000,job改为ccc



wu的薪水在原有基础上增加1000元。


3.7.3.DELETE 删除语句

使用 delete语句删除表中数据。


如果不使用where子句,将删除表中所有数据。

Delete语句不能删除某一列的值(可使用update

使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

insertupdate一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题(外键约束)

删除表中数据也可使用TRUNCATE TABLE 语句,它和delete有所不同,truncate删除表的数据,原理是先将该表摧毁(不会影响主键),然后再重建该表。也就是说truncate摧毁表的时候,会将主键的初始值变为1.delete删除,并不会重置主键的初始值。

练习:

删除表中名称为zs’的记录。


删除表中所有记录。


使用truncate删除表中记录。


3.7.4.SELECT 查询语句

1)语句一:

select 指定查询哪些列的数据。

column指定列名。

*号代表查询所有列。

from指定查询哪张表。

DISTINCT可选,指显示结果时,是否剔除重复数据

练习:

查询表中所有学生的信息。

查询表中所有学生的姓名和对应的英语成绩。

过滤表中重复数据。

(2)语句二:

select语句中可使用表达式对查询的列进行运算

select语句中可使用as语句

练习

在所有学生分数上加10分特长分。

统计每个学生的总分。

使用别名表示学生分数。

(2)语句三:

使用where子句,进行过滤查询。

练习:

查询姓名为XXX的学生成绩


查询英语成绩大于90分的同学


查询总分大于200分的所有同学

(4)语句四:

where子句中经常使用的运算符


注意:当andor运算符同时存在时,优先执行and

练习:

查询英语分数在 8090之间的同学。


查询数学分数为89,90,91的同学。

查询所有姓李的学生成绩。


查询数学分>80,语文分>80的同学。

5)语句五:

使用order by 子句排序查询结果。


Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。

Asc 升序、Desc 降序,默认是不写时为 asc升序

ORDER BY 子句应位于SELECT语句的结尾。

练习:

对数学成绩排序后输出。

对总分排序按从高到低的顺序输出

对姓李的学生总成绩排序输出

(6)语句六:

使用group by 子句对列进行分组


HavingWhere均可实现过滤,但在having可以使用聚集函数,having通常跟在group by后,它作用于分组

练习:对订单表中商品归类后,显示每一类商品的总价

归类前:


归类后:

使用having 子句 对分组结果进行过滤

练习:查询购买了几类商品,并且每类总价大于100的商品

3.8.聚合函数

3.8.1.聚合函数COUNT

Count(列名)返回某一列,行的总数

练习:

统计一个班级共有多少学生?

统计数学成绩大于90的学生有多少个?

统计总分大于250的人数有多少?

3.8.2.聚集函数SUM

Sum函数返回满足where条件的行的和

练习:

统计一个班级数学总成绩?

统计一个班级语文、英语、数学各科的总成绩

统计一个班级语文、英语、数学的成绩总和

统计一个班级语文成绩平均分

注意:sum仅对数值起作用,否则会报错。

注意:对多列求和,“,”号不能少。

3.8.3.聚集函数AVG

AVG函数返回满足where条件的一列的平均值

练习:

求一个班级数学平均分?

求一个班级总分平均分


3.8.4.聚集函数-MAX/MIN

Max/min函数返回满足where条件的一列的最大/最小值

练习:

求班级最高分和最低分(数值范围在统计中特别有用)


四、多表设计—外键约束

定义外键约束

foreign key

foreign key(ordersid) references orders(id)

多表设计中三种实体关系:


4.1.多表设计中会遇到的问题 

第一类: 一对多的关系

一对多的时候, 会在 多的一方添加 一方的主键做为 外键约束.

例如: 作者 与 博客之间的关系是 一对多的关系

第二类: 多对多的关系

多对多是时候, 需要引入 第三张关系表, 将两个表中的主键拿过来当作外键.

例如: 员工与 项目是 典型的多对多的关系

第三类: 一对一的关系

一对一,实际上完全可以 将任何一方 添加 一方中去 .

4.2.多表设计案例

teacher表对student表的一对多的关系,需要在多的一方(student)添加另一方(teacher)的主键作为外键约束。

CREATE TABLE teacher (

  id int(11) NOT NULL primary key auto_increment,

  name varchar(20) not null unique

 );

CREATE TABLE student (

  id int(11) NOT NULL primary key auto_increment,

  name varchar(20) NOT NULL unique,

  score double default '0',   //默认值

  teacher_id int(11) NOT NULL,

  FOREIGN KEY (teacher_id) REFERENCES teacher (id)

  ) ;

通过alter命令来添加外键约束


4.3.多表查询

(1)同时显示出dept和emp表的有效数据


(2)查询工资大于9000的员工来自于哪个部门?
























  





猜你喜欢

转载自blog.csdn.net/mchenys/article/details/80492065