文章

MySQL笔记一

本文介绍MySQL的基础操作,包括数据库的创建、删除、查询等命令,表结构的管理,数据的增删改查,以及SQL函数和连接查询等内容。

MySQL笔记一

文章信息

  • 原文链接:https://jiayq.blog.csdn.net/article/details/76427665
  • 发布时间:2017-07-31 13:04:36
  • 阅读量:496
  • 分类:java同时被 2 个专栏收录, 订阅专栏, mysql
  • 标签:#mysql, #数据库, #服务器

摘要

文章浏览阅读496次。本文介绍MySQL的基础操作,包括数据库的创建、删除、查询等命令,表结构的管理,数据的增删改查,以及SQL函数和连接查询等内容。


数据库(Database,简称DB)的定义: “按照数据结构来组织、存储和管理数据的仓库”

PPT 1-2课
1、在Windows命令提示符下运行:
启动MySql服务:net start mysql
停止MySql服务:net stop mysql
卸载:sc delete mysql
一般要先启动MySQL服务器
注意:运行如上命令时,有时会出现“发生系统错误5 拒绝访问”,这是因为当前用户的操作权限太低了,需要我们要以管理员身份来运行cmd程序。同时还要注意服务名称是否是mysql。

2、MySQL登陆
mysql -hlocalhost -u username -puserpassword
注意:密码如果写在命令行的时候一定不能有空格。

3、MySQL常用命令:

放弃正在输入的命令:\c

显示命令清单:\h
退出mysql程序:\q
查看MySQL服务器状态信息:\s

4、
对MySQL的理解:
档案柜=数据库

抽屉=表

1
文件=记录

第三课:

1、操作数据库
创建数据库:create database dbname;

1
2
显示所有数据库:show databases;
使用MySQL命令

show create database dbname;

可以查看数据库的相关信息(例如MySQL版本ID号、默认字符集等信息)。
选定默认数据库:use dbname;

1
删除数据库,使用SQL语句   drop database dbname;

2、操作数据库表的结构:
创建数据库表之前必须先使用数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
create table students(
id int unsigned not null auto_increment primary key,
name varchar(8) not null,
sex char(4) not null,
age int unsigned not null
);  

使用MySQL命令“desc table_name;”即可查看表名为table_name的表结构。   

使用MySQL命令“show create table table_name;”查看名为table_name表的详细信息。

·添加列
alter table 表名 add 列名 列数据类型 [after 插入位置];
在名为age的列后面插入列birthday:
alter table table_name add birthday data after age;
添加一列s,放在最前面
alter table students add s varchar(22) first ;
·修改列
alter table table_name change 列名称 列新名称 新数据类型;
将表的tel列改名为telphone
alter table table_name change tel telphone char(13) not null;
·如果只对字段的数据类型进行修改
alter table 表名 modify 字段名 新数据类型;    
·删除列
alter table table_name drop 列名称;
·重命名表
alter table table_name rename new_name;
·删除整张表
drop table 表名;

3、查看字符集
查看当前支持的MySQL字符集
show charset;

4、使用MySQL命令
show variables like ‘character%’;
即可查看当前MySQL服务实例使用的字符集。
a、MySQL提供下列MySQL命令可以“临时地”修改MySQL“当前会话的”字符集。
set character_set_client = gbk;
set character_set_connection = gbk;

1
2
3
set character_set_database = gbk;
set character_set_results = gbk;
set character_set_server = gbk;     

第四课

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
符号 <> 是大于或小于的意思

1、模糊查询like
在where 后面使用like
通配符:
%  任意字符
_  单个字符
2、order by 排序
order by price //默认升序排序
order by price desc //默认降序排序
order by price asc //升序排序
order by rand() //随机排序
3、分组查询 group by
一般情况下,group需与统计函数(聚合函数)一起使用才有意义。
//通过name进行分组
select name,count(*) from student group by name;
//将name='lisi'分为一组,将其余的分为一组
select count(*) from student group by name='lisi';
4、Having    指定分组统计条件(一般与group by一起使用!)
select name,count(*) from student group by name having count(*)>2;

·注意where和having的区别:
where只能对表中的字段名进行筛选
having一般对查询结果进行筛选(也可以直接对字段名进行筛选)

5、sql函数

组函数(聚合函数)   功能描述
用于字符、数值、日期型数据的列函数
MAX(column) 列中最大值
MIN(column) 列中最小值
COUNT(*)    表中行的数量
COUNT(column)   列不为null的行数
COUNT(distinct column)  Column指定列中相异值的数量
用于数值数据的列函数
SUM(column) 列中所有值的总和
AVG(column) 列中所有值的平均数

第五课
1、mysql中的decimal数据类型(不常用)
decimal(length, precision)用于表示精度确定(小数点后数字的位数确定)的小数类型,length决定了该小数的最大位数,precision用于设置精度(小数点后数字的位数)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create table students(
id decimal(3,2),
name varchar(8) not null,
sex char(4) not null
);  

2、创建表
create table student(
id int unsigned not null auto_increment primary key,
name varchar(8) not null,
sex char(4) not null
)engine=InnoDB default charset='utf8';
注意不存在utf-8  

·设置主键(Primary Key)约束
如果一个表的主键是多个字段的组合(例如字段名1与字段名2共同组成主键),定义完所有的字段后,使用下面的语法规则将(字段名1, 字段名2)设置为复合主键。

primary key (字段名1, 字段名2)
·MySQL自增型字段的值从1开始递增,且步长为1。设置自增型字段的语法格式如下。   
字段名 数据类型 auto_increment

·复制一个表
方法一:在create table语句的末尾添加like子句,可以将源表的表结构复制到 新表中,语法格式如下。

create table 新表名
like 源表;
方法二、在create table语句的末尾添加一个select语句,可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中。下面的语法格式将源表的表结构以及源表的所有记录拷贝到新表中。

create table 新表名 select * from 源表
;
·添加约束条件
alter table 表名 add constraint 约束名 约束类型 (字段名)
例:如果没有主键,添加主键约束。
alter table ss add constraint pp primary key (id);

1
2
3
4
例:添加外键约束
alter table ss add constraint aa foreign key (ip) reference s (id);
·删除约束条件 
(1)删除表的主键约束条件语法格式比较简单,语法格式如下。

alter table 表名 drop primary key

1
2
3
4
5
6
7
8
9
10
·mysql在cmd中乱码问题
MySQL是默认utf8编码的,所建数据库也是设置utf8编码,使用程序可以新增中文数据,在cmd中使用SQL语句新增数据则报类似Incorrect string value: '\xB2\xE2\xCA\xD4' for column 'title' at row 1错误,而使用SQL语句查询出之前程序所新增中文数据都是乱码的。 

右击在cmd界面上面边框→属性→选项 ,查看cmd的编码方式是是GBK,并不是utf-8。 

其实数据库内部是没有乱码的,只是和cmd的编码方式不一样,在cmd呈现出来的中文数据才是乱码的,也造成了新增不了中文数据的情况。 

使用MySQL的图形界面管理工具则不存在此问题了。 

直接在mysql>下输入 set names gbk; 即可解决问题。

第六课

1、操作数据库表的内容:
·向表中插入数据:
insert into table_name values(now(),’a’);
insert into student (id,name,sex) values(1,’zhangsan’,’nan’);
·向表中插入多条记录
insert into student (name,sex) values(‘xiaoming’,’nan’),(‘xiaohong’,’nv’);
·使用insert….select插入结果

1
2
在insert语句中使用select子句可以将源表的查询结果添加到目标表中,
语法格式如下。

insert into 目标表名[(字段列表1)]

select 字段列表2 from 源表 where 条件表达式

1
2
·使用replace插入新记录
replace语句的语法格式有三种语法格式。

语法格式1:
replace into 表名 [(字段列表)] values (值列表)

语法格式2:
replace [into] 目标表名[(字段列表1)] select (字段列表2) from 源表 where 条件表达式
语法格式3:

replace [into] 表名
set 字段1=值1, 字段2=值2

1
2
3
4
5
replace语句的功能与insert语句的功能基本相同,不同之处在于:使用replace语句向表插入新记录时,如果新纪录的主键值或者唯一性约束的字段值与已有记录相同,则已有记录先被删除(注意:已有记录删除时也不能违背外键约束条件),然后再插入新记录。
·删除表中的数据
delete from table_name where 删除条件;
·使用truncate清空表记录
truncate table用于完全清空一个表,语法格式如下。

truncate [table] 表名

1
2
·更新表中的数据
update table_name set 列名称=新值 where 更新条件;

若省略了where子句,则表示修改表中的所有记录。

第八课
使用Navicat操作MySQL

第七课
1、使用谓词distinct过滤结果集中的重复记录
SELECT DISTINCT 列名称 FROM 表名称
2、使用谓词limit查询某几行记录
select 字段列表
from 数据源
limit [start,] length;

1
2
3
4
5
6
7
8
9
10
11
12
3、使用from子句指定数据源
from 表名1  [ 连接类型 ]  join  表名2  on  表1和表2之间的连接条件
连接类型分为:
inner连接(内连接)和outer连接(外连接)
    内连接分为三种:自然连接、等值连接、非等值连接。
    外连接又分为left(左外连接,简称为左连接)、right(右外连接,简称为右连接)以及full(完全外连接,简称完全连接)。


内连接
·自然连接
select * from course natural join grade;
·等值连接 :使用等于=比较连接列的列值,在查询结果中列出接连表中的所有列,包括其中的重复列:

select * from R join S where R.C = S.C;
或者
select * from R inner join S where R.C = S.C;
·非等值连接 :在连接条件中,可以使用其他比较运算符,比较被连接列的列值,如:<、>、!=等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
外连接     
·左连接(left join)on和后面的条件不能省略
select * from  表1  left  join 表2  on  表1和表2之间的连接条件

查询结果集中须包含表1的全部记录,然后表1按指定的连接条件与表2进行连接,若表2中没有满足连接条件的记录,则结果集中表2相应的字段填入NULL。
·右连接的语法格式 right join / right outer join?    
select * from R right join S on R.C = S.C;

查询结果集中须包含表2的全部记录,然后表2按指定的连接条件与表1进行连接,若表1中没有满足连接条件的记录,则结果集中表1相应的字段填入NULL。
·全连接
select * from course full join grade;

·多表连接
select * from R join S on R.C = S.C join T on S.C=T.C;

==============================================================================================================

为表取别名:
表名 别名

为字段取别名
字段名 [AS] 别名

本文由作者按照 CC BY 4.0 进行授权