数据库MySQL
2017-05-18 20:26:03 10 举报
AI智能生成
数据库是一个用于存储、管理和检索数据的计算机系统。它以结构化的方式组织数据,使得用户可以轻松地查找、更新和分析信息。数据库通常由一个或多个表组成,每个表包含一系列相关的数据记录。这些记录以行和列的形式排列,其中每一列代表一个特定的数据类型(如文本、数字或日期),而每一行则表示一个独立的数据项。数据库管理系统(DBMS)负责处理对数据库的所有操作,包括添加、删除和修改数据,以及执行复杂的查询和报告任务。常见的数据库类型包括关系型数据库(如MySQL、Oracle和SQL Server)、非关系型数据库(如MongoDB和Redis)以及分布式数据库(如Hadoop和Cassandra)。
作者其他创作
大纲/内容
JDBC操作数据库的六个步骤:
注册驱动;Class.forName("com.mysql.jdbc.Driver");
获取数据库;<br>Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/baby","root","ws199210");
通过con获取Statement对象;<br>Statement st =con.createStatement();
发送并执行SQL语句;<br>String sql="select * from<br>student where name like'刘__'"; <br>ResultSet rs = st.executeQuery(sql);
遍历结果集;
while(rs.next()){ //有结果集就进去
System.out.println("id:"+rs.getInt("id"));
}
关闭数据源。
事务
con.setAutoCommit(false);//手动事务
con.rollback();//回滚
con.commit();//提交
函数
逻辑函数
<span lang="EN-US">subString(</span><span>字段 <span lang="EN-US">from num for num)</span>:将字段从第几个截取到第几个</span><br>
<p align="left"><!--[if !supportLists]--><span lang="EN-US">1、</span><!--[endif]--><span lang="EN-US">upper</span><span>(字段):将字段转大写;<span lang="EN-US"><o:p></o:p></span></span></p> <br>
<span lang="EN-US">lower</span><span>(字段):将字段转小写</span>
<span lang="EN-US">position</span><span>(‘元素’ <span lang="EN-US">in </span>列名):元素在字段的哪个位置</span>
<span lang="EN-US">character_length(</span><span>字段<span lang="EN-US">)</span>:统计字段的长度</span>
<span lang="EN-US">trim</span><span>(字段):去两侧空格</span>
<p align="left"><span>聚合函数:(不跟<span lang="EN-US">where</span>和<span lang="EN-US">order by </span>语句)<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><!--[if !supportLists]--><span lang="EN-US">1、</span><!--[endif]--><span lang="EN-US">count</span><span>(<span lang="EN-US">*</span>):统计多少行;<span lang="EN-US"><o:p></o:p></span></span></p>
<span lang="EN-US">max</span><span>(字段):最大值</span>
<span lang="EN-US">min</span><span>(字段):最小值</span>
<span lang="EN-US">avg</span><span>(字段):平均值</span>
<span lang="EN-US">sum</span><span>(字段):求和</span>
<p align="left">其他函数:包括数学函数<span lang="EN-US"><o:p></o:p></span></p>
<p align="left"><span>分组函数:<span lang="EN-US">group by<o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">having</span><span>:子语句,分组后过滤;<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">ceil</span><span>(列):向上取;<span lang="EN-US"><o:p></o:p></span></span></p>
<span lang="EN-US">floor</span><span>(列):向下取</span>
<span lang="EN-US">mod</span><span>(列,列):取余</span>
<span lang="EN-US">ABS</span><span>(列):取绝对值</span>
<span lang="EN-US">limit </span><span>分页</span>
<p align="left"><!--[if !supportLists]--><span lang="EN-US">一、</span><!--[endif]--><span lang="EN-US">limit num</span><span>:取前<span lang="EN-US">num</span>条数据<span lang="EN-US"> <o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">limit num1</span><span>,<span lang="EN-US">num2 </span>从第<span lang="EN-US">num</span>条开始,取<span lang="EN-US">num</span>条后<span lang="EN-US">num1</span>条数据;<span lang="EN-US"><o:p></o:p></span></span></p>
<span>笔试题<span lang="EN-US"> having</span>与<span lang="EN-US">where </span>区别<span lang="EN-US">?</span></span>
<span lang="EN-US">1.Where</span><span>是用于分组前进行过滤,<span lang="EN-US">having</span>是用于分组后进行过滤。</span>
<p align="left"><span lang="EN-US">2.where</span><span>后面不可以使用聚合 函数,<span lang="EN-US">having</span>后面可以使用<span lang="EN-US"><o:p></o:p></span></span></p>
子查询
按结果分
<span>单行单列:<span lang="EN-US">>,<,>=,<=,!=</span></span>
<span>多行单列:<span lang="EN-US">in</span>(),<span lang="EN-US">any</span>(),<span lang="EN-US">and</span>()</span>
<p align="left"><span>多行多列:<span lang="EN-US"><o:p></o:p></span></span></p>
按性质分<span>(子有没有用到父的条件)</span>
<span>相关子查询</span>
<span>非相关子查询</span>
<span>自连接</span>
<span lang="EN-US">select * from </span><span>表 <span lang="EN-US">as </span>名<span lang="EN-US">1,</span>表<span lang="EN-US"> as </span>名<span lang="EN-US">2 where </span>名<span lang="EN-US">1.</span>字段<span lang="EN-US">=</span>名<span lang="EN-US">2.</span>字段</span>
视图
<p align="left"><span lang="EN-US">create view </span><span>图名<span lang="EN-US"> as select</span>语句;<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span>如果视图中的<span lang="EN-US">SQL</span>使用了<span lang="EN-US">group up</span>,<span lang="EN-US">having</span>,<span lang="EN-US">distinct,</span>聚合函数,则视图不可更新;<span lang="EN-US"><o:p></o:p></span></span></p>
<span>视图的优点</span>
<span>简化查询</span>
<span>简化结构</span>
<span>安全性</span>
<span>数据完整性</span>
<span>视图缺点</span>
<span>性能不高,数据更新受限</span>
<span>修改数据库密码</span>
<p align="left"><span lang="EN-US">1) </span><span>停止<span lang="EN-US">mysql</span>服务器<span lang="EN-US"> </span>运行输入<span lang="EN-US">services.msc </span>停止<span lang="EN-US">mysql</span>服务<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">2) </span><span>在<span lang="EN-US">cmd</span>下<span lang="EN-US"> </span>输入<span lang="EN-US"> mysqld
--skip-grant-tables </span>启动服务器<span lang="EN-US"> </span>光标不动<span lang="EN-US"> </span>(不要关闭该窗口)<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">3) </span><span>新打开<span lang="EN-US">cmd </span>输入<span lang="EN-US">mysql -u root -p </span>不需要密码<span lang="EN-US"> </span></span></p><p align="left"><span lang="EN-US">use mysql;<o:p></o:p></span></p> <br><p align="left"><span lang="EN-US">update user
set password=password('abc') WHERE
User='root';<o:p></o:p></span></p> <br>
<span lang="EN-US">4) </span><span>关闭两个<span lang="EN-US">cmd</span>窗口<span lang="EN-US"> </span>在任务管理器结束<span lang="EN-US">mysqld </span>进程</span>
<p align="left"><span lang="EN-US">5) </span><span>在服务管理页面<span lang="EN-US"> </span>重启<span lang="EN-US">mysql </span>服务<span lang="EN-US"><o:p></o:p></span></span></p>
<span>密码修改完成</span>
<span lang="EN-US">DOS</span><span>窗口数据库命令</span>
<span lang="EN-US">show databases:</span><span>查看数据库</span>
<span lang="EN-US">use </span><span>数据库名字:进入数据库</span>
<span lang="EN-US">show tables;</span><span>查看表。</span>
基本内容
什么是数据库?
存储持久型数据的集合。(本质是文件系统)
数据库规则
数据库里的数据集合都存放在数据表里
数据表有数据行(row)和数据列组成
一个数据行就是数据表里的一条记录
记录可以包含多个信息项,数据表里的每一个数据列都对应一个信息项
数据库的的作用?
子主题
什么是关系型数据库?
关系型数据库以行和列的形式存储数据,以便于用户理解。这一系列的行和列被称为表,一组表组成了数据库。表与表之间的数据记录有关系。用户用查询(Query)来检索数据库中的数据。
主键
关系型数据库中的一条记录中由若干个属性,若其中某一个属性组能唯一标识一条记录,该属性组就可以称之为一个主键
外键
外键用于与另一个表的关联,是能确定另一张表记录的字段,用于保持数据的一致性。<span style="color: rgb(86, 95, 105); font-family: 'Microsoft Yahei'; line-height: 1.8;">某个表的一列,包含另一个表的主键值。</span>
MySQL特点
优点
MYSQL短小精悍,容易上手,操作简单,免费供用的。相对其它数据库有特色又实用的语法多一些。
缺点
缺点分析:MYSQL难担当大系统的数据仓库,运行速度慢,不够稳定,有掉线的情况。
预备键(Prepare
key)
候选关键字。
子主题
DDL—数据定义语言(Create,Alter,Drop,DECLARE)
建库、建表、设置约束等:
DML—数据操纵语言(Select,Delete,Update,Insert)
数据授权,收回授权.
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
主要指数据的增删查改。
引用表(reference
list)
11、包含外键的表。也叫子表。被引用的表叫做父表。
引用完整性(Referential Integrity)
11、字表中的外键仅限于附表中的值。
自引用(For
Table)
外表可以引用自己表的主键。
11、数据类型:
int范围是:-2147483648到2147483647
integer是int的同义词;
bigint范围-2^63到2^15-1;
smallint范围是-2^15到2^15-1;
double和float:浮点型,存放数据最多5位;
decimal:浮点型,保存对精准度有重要要求的值;
date:日期类型,只有年月日,没有时分秒;
datetime:日期类型,既有年月日,又有时分秒
time:时间类型,只有时分秒没有年月日;
timestamp:时间类型:既有年月日,又有时分秒;
11、 范式:
1) 第一范式:
每个字段为最小单位,不可分割;
有主键。
1) 第二范式:
包括第一范式再加上不能部分依赖。
1) 第三范式:
第二范式再加上不能传递依赖
11、char和varchar区别:
char是一个定长字符串,指定长度不会随着内容的不足而改变;
varchar是一个长度可变的字符串,他根据信息自动改变长度(只在字符串长度小于指定字符串的情况下)。
11、标识符:
标识符后的字符可以是“_”、“@”、“#”、“$”及数字;
标识符不允许是SQL的保留字;
标识符内不允许有空格和特殊字符。
增删改查:
查询(select):
格式 :select 字段 from 表名 where 条件;
比较运算符
> >= < <= =
!=(<>)
as 重命名
逻辑运算符
and or not
.between ...and
相当于 >= and
<=
注意:between 后面的值必须是小值 and后面的是大值。
in()
可以比较多个值
like” ”
模糊查询,like只对字符串起作用,对数字、日期不起作用。
通配符使用:
% 匹配多个
._ 匹配一个,一个下划线代表一个字。
null值操作
is null; 判断为空<br>is not null; 判断不为空
distinct去重
select distinct 字段 from table;
插入(insert):
1)插入部分:
insert into table(列,列...)values (值,值...);
1)插入全部:
insert into table
values (值,值...)
注:自增时,在栏位-主键-自动递增打钩,选项-自动递增注明起始数值
更新(update):
update table set 字段=“值” where 字段=“值”;
注:前一个字段为更新的值。
删除
drop table 表名;删除表结构和数据;
delete from 表名;删除表数据;
delete from 表名where 字段=“”
truncate table 表名;把表删除,在创建一个同名无数据表。
关于delete 与truncate的区别?(笔试题)
1.delete是一行一行删除 truncate是将表结构销毁,在重新创建表结构.
如果数据比较多,truncate的性能高。
2.delete是dml语句 truncate dcl语句
delete是受事务控制. 可以回滚数据.
truncate是不受事务控制. 不能回滚.
在SQL表中,什么是空、空串和null?
空就是将表设置为null;空串是表中什么都不写;null是表中写入null,是长度为4的字符串。
怎样将表导出后再复制创建新表?
导出表—复制—查询—粘贴—改表名—刷新
IFNULL(字段,0)
如果字段为空,则将其赋值为0,在参与其运算。
函数
逻辑函数(标量函数)
subString(字段 from num for num):将字段从第几个截取到第几个
upper(字段):将字段转大写;
lower(字段):将字段转小写;
position(‘元素’ in 列名):元素在字段的哪个位置;
character_length(字段):统计字段的长度
trim(字段):去两侧空格
聚合函数:(不跟where和order by 语句)
count(*):统计多少行;
max(字段):最大值
min(字段):最小值;
avg(字段):平均值;
sum(字段):求和
limit 分页 limit num:取前num条数据 <br>limit num1,num2 从第num条开始,取num条后num1条数据;
<span lang="EN-US" style="font-size: 12pt; font-family: 宋体; color: rgb(86, 95, 105); background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">now() </span><span style="font-size: 12pt; font-family: 宋体; color: rgb(86, 95, 105); background-image: initial; background-attachment: initial; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">插入当前时间</span>
外连接
<p align="left"><span>把有关联和无关联的数据都查出来。<span lang="EN-US"><o:p></o:p></span></span></p>
<span>左外连接</span>
<p align="left"><span>表<span lang="EN-US">1 left outer join </span>表<span lang="EN-US">2 on </span>条件;以左表为参考(<span lang="EN-US">outer</span>可省略)<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span>右外连接</span></p>
<p align="left"><span>表<span lang="EN-US">1 left outer join </span>表<span lang="EN-US">2 on </span>条件;以右表为参考(<span lang="EN-US">outer</span>可省略)<span lang="EN-US"><o:p></o:p></span></span></p>
<span>全外连接</span>
<span lang="EN-US">MySQL</span><span>不支持</span>
内连接
<span>联系有关联数据</span>
<span>交叉连接:表 <span lang="EN-US">cross join </span>表 <span lang="EN-US">where </span>表<span lang="EN-US">.d_id =</span>另表<span lang="EN-US">.d_id </span></span>
<p align="left"><span>相等连接:表 <span lang="EN-US">inner join </span>表 <span lang="EN-US">on</span>表<span lang="EN-US">.d_id=</span>另表<span lang="EN-US">.d_id </span>。(<span lang="EN-US">inner</span>可省略)<span lang="EN-US"><o:p></o:p></span></span></p> <br><span>表 <span lang="EN-US">join </span>表 <span lang="EN-US">using</span>(字段)</span>
<span>隐式连接:表,表<span lang="EN-US">where</span>表<span lang="EN-US">.d_id =</span>另表<span lang="EN-US">.d_id </span></span>
<p align="left"><span>自然连接:表 <span lang="EN-US">natural join </span>表 。(字段相对应)<span lang="EN-US"><o:p></o:p></span></span></p>
<span>集合操作</span>
<p align="left"><span lang="EN-US">union:</span><span>合并行(去重)连接<span lang="EN-US">select</span>语句<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">union all:</span><span>合并行(不去重)连接<span lang="EN-US">select</span>语句<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">intersect</span><span>:查找相同行 <span lang="EN-US"> mysql</span>不支持<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">except</span><span>:查找不同行<span lang="EN-US"> MySQL</span>不支持<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">exists</span><span>:存在<span lang="EN-US"> </span>条件跟的是不相同的字段。不跟相同字段。<span lang="EN-US"><o:p></o:p></span></span></p>
索引
<span>创建普通索引</span>
<span lang="EN-US">create index </span><span>索引名 <span lang="EN-US">on </span>表名 (字段);</span>
<span>创建唯一索引</span>
<span lang="EN-US">create unique index </span><span>索引名 <span lang="EN-US">on </span>表名 (字段);</span>
<span>创建组合索引</span>
<span lang="EN-US">create index </span><span>索引名 <span lang="EN-US">on </span>表名 (字段,字段)</span>
<span>删除索引</span>
<span lang="EN-US">drop index </span><span>索引名 <span lang="EN-US">on </span>表名</span>
<span>函数</span>
<span lang="EN-US">explain </span><span>展示表中信息</span>
<p align="left"><span>慢查询:<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">show variables
like ‘%quer%’;<o:p></o:p></span></p>
<p align="left"><span lang="EN-US">set
long_query_time=2;<o:p></o:p></span></p>
<p align="left"><span lang="EN-US">set global
slow_query_log=’on’;<o:p></o:p></span></p>
<p align="left"><span>备份数据库:<span lang="EN-US"><o:p></o:p></span></span></p>
子主题
<b><span>库内备份</span></b>
<p align="left"><span>新建数据库—》右击需备份库—》数据传输—》源:连接,数据库—》目标:连接,数据库—》选择对象—》开始<span lang="EN-US"><o:p></o:p></span></span></p>
<b><span>恢复数据库</span></b>
<p align="left"><span>和备份一样。<span lang="EN-US"><o:p></o:p></span></span></p>
子主题
<b><span>库外备份</span></b>
<p align="left"><span lang="EN-US">Mysqldump –u </span><span>库用户名 <span lang="EN-US">–p </span>库名<span lang="EN-US">></span>路径<span lang="EN-US">/</span>备份后库名<span lang="EN-US">.sql </span>回车<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">password:</span><span>密码;<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><b><span>库外恢复</span></b><span>:<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">Mysql –u </span><span>库用户名 <span lang="EN-US">–p </span>库名<span lang="EN-US">(</span>需在<span lang="EN-US">Navicat</span>中创建<span lang="EN-US">)<</span>路径<span lang="EN-US">/</span>备份后库名<span lang="EN-US">.sql </span>回车<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><span lang="EN-US">password:</span><span>密码;<span lang="EN-US"><o:p></o:p></span></span></p>
<p align="left"><b><span>库内恢复</span></b><span lang="EN-US"><o:p></o:p></span></p>
<p align="left"><span lang="EN-US">create database </span><span>数据库的名字<span lang="EN-US">; </span>第二:进入数据库<span lang="EN-US"> </span>第三:<span lang="EN-US">source
d:mydb1.sql<o:p></o:p></span></span></p>
0 条评论
下一页