MySQL入门 和 SQL语句
1 什么是MySQL?
MySQL原本是一个开放源码的关系数据库管理系统,把数据保存在不同的表中,而不是堆一起,所以它的灵活性强、速度也快,
而且因为它体积小、速度快、成本低、最主要是开放源码,所以中小型的公司都使用它作为网站数据库。
SQL是MySQL中用来访问数据库的结构化查询语言
2 MySQL特点?
体积小 、使用成本低 、可移植性强 、适用用户范围广
3 什么是数据库?
【数据库 】DataBase(DB)
数据库就是按照数据结构来组织,存储和管理数据的仓库
数据库提供了很多功能,可以通过SQL语句来定义来操作数据
【数据库管理系统】(DataBase Management System,DBMS)
操作和管理数据库的大型软件,用于建立、使用和维护数据库
常见的数据库管理系统
MySQL : 开源免费的数据库, 小型的数据库, 被Oracle收购了, 但是MySQL的应用场景多
Oracle : 收费的大型数据库 ,但是Oracle要比MySQL强大, Oracle里面的数据库管理、监控基本都是配套的。Oracle收购 SUN公司、收购MySQL
SqlServer: Microsoft 公司收费的中型的数据库。 C#、.net等语言常使用
数据库三大范式:
第一范式:原子性,不可分割
第二范式:就是完全依赖,没有部分依赖;【表中必须有一个主键;没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分】
第三范式:就是没有传递依赖
【关系型数据库】
关系: 一张二维表,每个关系必须有一个关系名,也就是俗称的表名
字段/属性:二维表中的一列
记录/元祖:二维表中的一行
超键(super key):在关系中能唯一标识元祖的属性集称为关系模式的超键
候选键(candidate key):不含有多余属性的超键,
主键(primary key):用户选作元祖标标识一个候选键
外键:用于关联两张表
范式:符合某一级别的关系模式的集合,构造数据库的表必须遵循一定的规则
4 MySQL安装
1 安装
参考MySQL安装图解.doc
2 配置MysQL服务
找到你所安装MySQL的 目录, 找到bin 里面的这个应用程序
打开就是这个样子的
3 启动和关闭 (以管理运行cmd命令窗口)
4 登录
格式1:cmd> mysql –u用户名 –p密码
例如:mysql -root–root
格式2:cmd> mysql --user=用户名 --host=ip地址 --password=密码
cmd命令窗口
启动服务
任务管理器--mysql
控制面板---服务--mysql
cmd ---start mysql
2.启动mysql
1.开始--mysql--命令符
2.cmd: mysql -uroot -proot
3.Sqlyog:视图化工具
3.mysql的命令
--设置cmd显示的编码集 set names gbk;
--help 数据类型 mysql的帮助命令 在cmd中写
5 SQLyog 安装与使用
安装 : 提供的SQLyog 是免费的,可以直接使用
使用:
输入用户名、密码,点击连接按钮,进行访问MySQL数据库进行操作
在Query窗口中,输入SQL代码,选中要执行的SQL代码,按F8键运行,或按执行按钮运行。
6 什么是SQL?
SQL全称是“结构化查询语言(Structured Query Language)
SQL(STructured Query Language)是一种资料库查询和程式设计语言,用於存取资料以及查询、更新和管理关联式资料库系统。
SQL同时也是数据库文件格式的扩展名。
什么是sql注入?
就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令
7 事务
事务:是数据库中提供的一种机制,一个操作序列。它包含了一组数据库操作命令,将这些命令作为了一个整体,是一组必须要同时完成或同时取消的操作组成,是不可分割的工作单元
事务的属性(ACID):
原子性(Atomicity) : 事务是一个完整的操作,不可再分,必须作为一个整体提交或回滚
一致性(Consistency): 事务完成时,数据应该保持一致,如银行转账:2个用户的总金额应该在事务前后金额一致
隔离性(isolation) :当有事务对数据进行操作时候,其他事务应该要等待该事务操作完毕
持久性(durability) : 事务一旦提供成功,事务的结果是永久的改动到数据库
8 SQL语句
1创建表
1.删除表 drop table [if exists] 表名;
2.创建表 create table [if not exists] 表名 (
字段1 数据类型 [字段属性|约束][索引][注释],
字段n 数据类型 [字段属性|约束][索引][注释]
)[表类型][表字符集][注释];
【注意:1、如果数据库名,表名,字段名等与保留字冲突,用【撇号(‘)】括起来
2、多个字段使用【逗号】隔开
3、单行注释:# 多行注释:/*…*/
4、设置为自动增长: auto_increment
】
3.查看表 show tables;
4.显示创建表的sql show create table 表名;
5.查看表的定义 describe 表名; 或者 desc 表名;
6.显示当前表状态值 show table status like '表名';
7.清空表数据,序列号从1开始 truncate table 表名;
8.设置mysql显示编码 set names gbk ; //解决查询出中文数据乱码问题
示例:
drop table if exists 表名
create table if not exists 表名 #if not EXISTS判断是否存在
(
id int primary key comment '主键' auto_increment, #主键,自动增长(默认从1开始,每次自动增长1) COMMENT 注释的意思
name varchar(50) not null comment '姓名' UNIQUE key, #unique key 唯一约束
address varchar(50) default '地址不详' comment '地址', #default ‘默认值’ 【注意:如果有中文,需指明charset='utf8'】
testId Int unsigned #unsigned无符号
primary key(主键列[,主键列2])#可以定义复合主键 示例,primary key(id,name)
)comment ='测试' charset = 'utf8' auto_increment=10
#comment ='测试'表的注释。charset='utf8' 设置表的编码 【auto_increment=10 设置从10开始增长】
2 修改表
1.修改表名 alter table 旧表名 rename 新表名; #表名在数据库中是唯一的
2.添加字段 alter table 表名 add 字段名 数据类型 属性
3.删除字段 alter table 表名 drop 字段名
4.修改字段 alter table 表名 change 旧字段名 新字段名 数据类型 [属性] #如果不需要修改数据类型使用写出源数据类型,不能为空
5.更新字段 alter table 表名 modify 字段名 数据类型
3 约束
1.添加主键 alter table 表名 add constraint 键名 primary key (列名[,列名2])
2.添加唯一 alter table 表名 add constraint 键名 unique key (列名[,列名2])
3.添加外键 alter table 表名 add constraint 键名 foreign key (外键列) reference 主表名(列名)
4.添加默认 alter table 表名 alter 列名 set default '默认值'
5.添加非空 alter table 表名 modify 列名 INT(5) NOT NULL;
删除默认值:alter table 表名 alter 列名 drop default;
删除主键: alter table 表名 drop primary key;
删除唯一: alter table 表名 drop index 唯一约束名;
MySQL的分页关键字是:limit
4 子查询
--方式一:用表连接
select studentName,studentResult from student s
inner join result r on s.studentNo=r.studentNo
inner join subject b on r.subjectNo = b.subjectNo
where subjectName ='java' and studentResult<60
--方式二:用子查询 【返回多个值使用in】
SELECT StudentName FROM Student where studentNo in
( select studentNo from result r inner join subject s on r.subjectNo =s.subjectNo
where studentResult<60 and subjectName ='java') 【思考,还可以再拆为子查询】
9 运算符
比较运算符 |
> < <= >= = <> |
大于、小于、大于(小于)等于、不等于 |
BETWEEN ...AND... |
显示在某一区间的值(含头含尾) |
|
IN(set) |
显示在in列表中的值,例:in(100,200) |
|
LIKE ‘张_’ |
模糊查询,Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’; |
|
IS NULL |
判断是否为空 |
|
逻辑运算符 |
and |
多个条件同时成立 |
or |
多个条件任一成立 |
|
not |
不成立,例:where not(salary>100); |
聚合函数:
l 特点:只对单列进行操作
常用聚合函数:
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素个数
字段类型:
常用的字段类型:
分类 |
类型名称 |
说明 |
整数类型 |
tinyInt |
很小的整数 |
smallint |
小的整数 |
|
mediumint |
中等大小的整数 |
|
int(integer) |
普通大小的整数 |
|
小数类型 |
float |
单精度浮点数 |
double |
双精度浮点数 |
|
decimal(m,d) |
压缩严格的定点数------开发时用 |
|
日期类型 |
year |
YYYY 1901~2155 |
time |
HH:MM:SS -838:59:59~838:59:59 |
|
date |
YYYY-MM-DD 1000-01-01~9999-12-3 |
|
datetime-开发用 |
YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 |
|
timestamp |
YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC |
|
文本、二进制类型 |
CHAR(M) |
M为0~255之间的整数 |
VARCHAR(M) |
M为0~65535之间的整数 |
|
TINYBLOB |
允许长度0~255字节 |
|
BLOB |
允许长度0~65535字节 |
|
MEDIUMBLOB |
允许长度0~167772150字节 |
|
LONGBLOB |
允许长度0~4294967295字节 |
|
TINYTEXT |
允许长度0~255字节 |
|
TEXT |
允许长度0~65535字节 |
|
MEDIUMTEXT |
允许长度0~167772150字节 |
|
LONGTEXT |
允许长度0~4294967295字节 |
|
VARBINARY(M) |
允许长度0~M个字节的变长字节字符串 |
|
BINARY(M) |
允许长度0~M个字节的定长字节字符串 |
分组:
SQL语法关键字:GROUP BY 和 HAVING