文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.05.09 lutianfei none 数据库简介 什么是数据库 数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。 关系型数据库 存储的都是 实体 与实体之间的 关系 。 ER模型图 常见
文档版本 | 开发工具 | 测试平台 | 工程名字 | 日期 | 作者 | 备注 |
---|---|---|---|---|---|---|
V1.0 | 2016.05.09 | lutianfei | none |
什么是数据库
关系型数据库
实体
与实体之间的关系
。ER模型图
常见的数据库
注:
访问:
1.停止mysql服务:
2.在cmd>输入一个命令:
3.新打开一个cmd窗口
4.输入命令 show databases;查看数据库,输入命令 use mysql;使用mysql数据库。
过程性语言
:当前的这条语句执行需要依赖于上一条或几条语句非过程性语言
:写一条语句,就会执行一个结果。DDL
(数据定义语言) 对象
,如数据表、视图、索引等DML
(数据操纵语言)(重点) DCL
(数据控制语言) DQL
(数据查询语言)(重点) <code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> table_name ( field1 datatype, field2 datatype, field3 datatype, )<span class="hljs-keyword">character</span> <span class="hljs-keyword">set</span> 字符集 <span class="hljs-keyword">collate</span> 校对规则</span></code>
datatype:指定列类型
练习
删除数据库 : drop database 数据库名称;
练习
语法:alter database 数据库 character set 编码 collate 校对规则;
练习:查看服务器中的数据库,并把其中某一个库的字符集修改为gbk
<code class=" hljs sql"> <span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> 表名( 字段<span class="hljs-number">1</span> 类型(长度) 约束, 字段<span class="hljs-number">2</span> 类型(长度) 约束, 字段<span class="hljs-number">3</span> 类型(长度) 约束, 字段<span class="hljs-number">4</span> 类型(长度) 约束 );</span></code>
字符串型
大数据类型(一般不用)
数值型
逻辑性 对应boolean
日期型
练习,创建员工表的练习
<code class=" hljs sql"> <span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> employee( id <span class="hljs-keyword">int</span>, name <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>), gender <span class="hljs-keyword">varchar</span>(<span class="hljs-number">10</span>), birthday <span class="hljs-keyword">date</span>, entry_date <span class="hljs-keyword">date</span>, job <span class="hljs-keyword">varchar</span>(<span class="hljs-number">100</span>), salary <span class="hljs-keyword">double</span>, resume text );</span></code>
主键约束(重点)
primary key
: 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)auto_increment
数据库维护主键。自动增长。alter table tablename drop primary key
;唯一约束
非空约束
创建新的标签employee2,把约束加上。
<code class=" hljs sql"> <span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> employee2( id <span class="hljs-keyword">int</span> <span class="hljs-keyword">primary</span> <span class="hljs-keyword">key</span> auto_increment, name <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>) <span class="hljs-keyword">unique</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>, gender <span class="hljs-keyword">varchar</span>(<span class="hljs-number">10</span>) <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>, birthday <span class="hljs-keyword">date</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>, entry_date <span class="hljs-keyword">date</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>, job <span class="hljs-keyword">varchar</span>(<span class="hljs-number">100</span>) <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>, salary <span class="hljs-keyword">double</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span>, resume text <span class="hljs-keyword">not</span> <span class="hljs-keyword">null</span> );</span></code>
alter table 表名 add 字段 类型(长度) 约束;
– 添加字段
alter table 表名 drop 字段;
– 删除字段
alter table 表名 modify 字段 类型(长度) 约束;
– 修改类型或者约束
alter table 表名 change 旧字段 新字段 类型(长度) 约束
– 修改字段的名称 rename table 表名 to 新表名;
– 修改表名
alter table 表名 character set utf8;
– 修改字符集
练习
语法:
insert into 表名 (字段1,字段2,字段3..) values(值1,值2,值3...);
有几列就插入多少的值。insert into 表名 values(值1,值2,值3...);
插入所有的列
注意:
字符
和日期型
数据应包含在单引号''
中。练习:
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">1</span>,<span class="hljs-string">'xiaofeng'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">19000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">2</span>,<span class="hljs-string">'美美'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">19000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">3</span>,<span class="hljs-string">'小风'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'WORKER'</span>,<span class="hljs-number">21000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">4</span>,<span class="hljs-string">'芙蓉'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">1000</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">values</span> (<span class="hljs-number">5</span>,<span class="hljs-string">'班长'</span>,<span class="hljs-string">'1994-10-10'</span>,<span class="hljs-string">'2011-1-1'</span>,<span class="hljs-string">'HR'</span>,<span class="hljs-number">100</span>,<span class="hljs-string">'aaa'</span>,<span class="hljs-string">'abc'</span>);</span></code>
<code class=" hljs ini"><span class="hljs-title">[client]</span> <span class="hljs-setting">port=<span class="hljs-value"><span class="hljs-number">3306</span></span></span> <span class="hljs-title">[mysql]</span> <span class="hljs-setting">default-character-set=<span class="hljs-value">gbk</span></span></code>
语法: update 表名 set 字段=值,字段=值... [where ]
练习:在上面创建的employee表中修改表中的纪录。
语法:
delete from 表名 [where];
truncate 表名;
删除所有的数据truncate 和 delete的区别:
Delete语句练习
语法:
select * from 表名;
查询所有(字段)
select 字段名1,字段名2,字段名3 from 表名;
显示查询字段名
select DISTINCT 字段名 from 表名;
去除重复的数据。 select 指定查询哪些列的数据。
*
号代表查询所有列。<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> stu( id <span class="hljs-keyword">int</span> <span class="hljs-keyword">primary</span> <span class="hljs-keyword">key</span> auto_increment, name <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>), math <span class="hljs-keyword">int</span>, english <span class="hljs-keyword">int</span>, chinese <span class="hljs-keyword">int</span> );</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'班长'</span>,<span class="hljs-number">18</span>,<span class="hljs-number">11</span>,<span class="hljs-number">62</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'小风'</span>,<span class="hljs-number">98</span>,<span class="hljs-number">91</span>,<span class="hljs-number">92</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'美美'</span>,<span class="hljs-number">68</span>,<span class="hljs-number">81</span>,<span class="hljs-number">52</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> stu <span class="hljs-keyword">values</span>(<span class="hljs-keyword">null</span>,<span class="hljs-string">'美女'</span>,<span class="hljs-number">98</span>,<span class="hljs-number">90</span>,<span class="hljs-number">65</span>);</span></code>
在select语句中可使用as语句(as 可以省略)
SELECT column as 别名 from 表名;
练习:
查询姓名为班长的学生成绩
查询英语成绩大于90分的同学
查询总分大于200分的所有同学
like – 模糊查询
_
和%
区别:占位符。_
只一个%
可以有多个%
的写法 : is null – 判断是否为null
not – 不成立
练习
查询英语分数在 80-90之间的同学。
select * from stu where english >80 and english
查询数学分数为18,78,46的同学。(in)
查询所有姓班的学生成绩。
order by
升序默认的(asc
)/降序(desc
)<code class=" hljs oxygene"><span class="hljs-keyword">SELECT</span> column1, column2. column3.. <span class="hljs-keyword">FROM</span> table; <span class="hljs-keyword">order</span> <span class="hljs-keyword">by</span> column <span class="hljs-keyword">asc</span>|<span class="hljs-keyword">desc</span></code>
对数学成绩排序后输出。
对总分排序按从高到低的顺序输出
对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
对姓美的学生成绩排序输出
聚集函数
指SQL语句中内置函数
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">Select</span> <span class="hljs-aggregate">count</span>(*)|<span class="hljs-aggregate">count</span>(列名) <span class="hljs-keyword">from</span> tablename [<span class="hljs-keyword">WHERE</span> where_definition] </span></code>
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">Select</span> <span class="hljs-aggregate">sum</span>(列名){,<span class="hljs-aggregate">sum</span>(列名)…} <span class="hljs-keyword">from</span> tablename [<span class="hljs-keyword">WHERE</span> where_definition] </span></code>
ifnull(math,0)
+english+chinese) from stu;AVG函数返回满足where条件的一列的平均值
练习:
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">Select</span> <span class="hljs-aggregate">max</span>(列名) <span class="hljs-keyword">from</span> tablename [<span class="hljs-keyword">WHERE</span> where_definition] </span></code>
GROUP BY子句可以将查询结果按属性列或属性列组合在行的方向上进行分组,每组在属性列或属性列组合上具有相同的值。
注意,使用GROUP BY 时,SELECT 子句中只能由以下部分组成:
having
,不能使用where
例如:
练习:对订单表中商品归类后,显示每一类商品的总价
<code class=" hljs sql"><span class="hljs-operator"><span class="hljs-keyword">create</span> <span class="hljs-keyword">table</span> orders( id <span class="hljs-keyword">int</span>, product <span class="hljs-keyword">varchar</span>(<span class="hljs-number">20</span>), price <span class="hljs-keyword">float</span> );</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">1</span>,<span class="hljs-string">'电视'</span>,<span class="hljs-number">900</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">2</span>,<span class="hljs-string">'洗衣机'</span>,<span class="hljs-number">100</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">3</span>,<span class="hljs-string">'洗衣粉'</span>,<span class="hljs-number">90</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">4</span>,<span class="hljs-string">'桔子'</span>,<span class="hljs-number">9</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">insert</span> <span class="hljs-keyword">into</span> orders(id,product,price) <span class="hljs-keyword">values</span>(<span class="hljs-number">5</span>,<span class="hljs-string">'洗衣粉'</span>,<span class="hljs-number">90</span>);</span> <span class="hljs-operator"><span class="hljs-keyword">select</span> product,<span class="hljs-aggregate">count</span>(*),<span class="hljs-aggregate">sum</span>(price) <span class="hljs-keyword">from</span> orders <span class="hljs-keyword">group</span> <span class="hljs-keyword">by</span> product;</span> </code>
having
sum(price) > 100;S-F-W-G-H-O 组合
备份命令 mysql/bin/mysqldump
将数据库SQL语句导出
mysqldump -u 用户名 -p 数据库名 > 磁盘SQL文件路径
例如: 备份day12数据库 — c:\day12.sql
cmd > mysqldump -u root -p day12 > c:\day12.sql 回车输入密码
恢复数据库(前提创建空的数据库,并且use)
恢复命令 mysql/bin/mysql
将sql文件导入到数据库
例如:将c:\day12.sql 导入 day12数据库
补充知识:恢复SQL也可以在数据库内部执行 source c:\day12.sql
练习