MySQL数据库基础(必备技能)

第一章:数据库的设计

1.第一范式:
第一范式的目标是确保每列的原子性,如果每列(或者每个属性值)都是不可再分的最小数据单元(也成为最小的原子单元),则满足第一范式

2.第二范式:
第二范式其目标是确保表中的每列都和主键相关,并且除了主键以外的其他列都全部依赖于该主键

3.第三范式:
第三范式的目标是确保每列都和主键列直接相关,而不是间接相关,并且除了主键以外的其他列都只能依赖于主键列,列与列之间不能存在相互依赖关系

第二章:初始MySQL

1.端口设置(默认启用TCP/IP网络,默认端口为3306)

2.默认字符集设置(默认值为utf8)

3.MySQL文件夹
* bin文件夹:该文件夹下存放着可执行文件
* include文件夹:该文件夹下存放着头文件
* lib文件夹:该文件夹下存放着库文件
* share文件夹:该文件夹下存放着字符集,语言等信息

4.修改MySQL配置文件来手动配置数据库服务器MySQL时,常用参数:
* default - character - set:客户端默认字符集
* character - set - setver:服务器端默认字符集
* port:客户端和服务器端的端口号
* delault - storage - engine:MySQL默认存储引擎

5.开服务:(net start mysql)

6.关服务:(net stop mysql)

7.命令行方式连接数据库
语法:
mysql -h 服务器主机地址 -u 用户名 -p 密码 (如果是本机可省略 -h)

8.操作数据库
1.创建数据库
语法:
create database 数据库名;

2.查看数据库列表
  语法:
       show databases;
 
3.选择数据库
  语法:
       use 数据库名;

4.删除数据库
  语法:
       drop database 数据库名;
  
5.创建表
  语法:
       create table if not exists 表名(
             字段1 数据类型 字段属性 约束 索引 注释,
             ...
       )表类型 表字符集 注释;

6.单字段主键
  语法:
       create table if not exists 表名(
              字段1 数据类型 primary key,
              ...
       );

7.查看表
  语法:
       show tables;

8.查看表的定义
  语法:
       describe 表名;
        或
       desc 表名;

9.删除表
  语法:
       drop table if exists 表名;

9.如果需要以0填充不足的位置,需要在类型后添加zerofill关键字

10.各数据类型都包含有符号数和无符号数两类,默认为有符号数,既可以保持负数,如该字段为非负数,则需添加unsigned属性

11.数据类型
常用数值类型

   数据类型                字节数
 tinyint[(m)]               1            
 smallint[(m)]              2
 mediumint[(m)]             3
 int[(m)]                   4
 float[(m,d)]               4
 double[(m,d)]              8
 decimal[m([,d])]          m+2
    bit             bit称为位数据类型,其数据有两种取值:0和1 长度为1位,用来表示真假,是否	

12.字符串类型
字符串类型

   数据类型              字节                说明 
   char[(m)]             m          固定长字符串,M为0-255的整数
 varchar[(m)]         可变长度      可变长度,M为0-65535的整数
  tinytext             0-255        微型文本串
    text              0-65535       文本串
 decimal(m,d)     该类型一般用于金额方面,m表示要显示的长度,d表示保留的小数位数 

13.日期类型
日期类型

   数据类型               格式
    date              yyyy-mm-dd                   
  datetime            yy-mm-dd hh:mm:ss:
    time              hh:mm:ss:
  timestamp           yyyymmddhhmmss
    year              yyyy              

14.字段的约束及属性
常用的属性约束

  字段属性,约束名          关键字
   非空约束               not null
   默认约束               default
   唯一约束               unique key(uk)
   主键约束               primary key(pk)
   外键约束               foreign key(fk)
   自动增长               auto_increment

15.MySQL的存储引擎
常用的存储引擎
InnoDB 和 MyISQM存储引擎比较

    功能                InnoDB                 MyISAM
  支持事物                支持                  不支持 
  支持全文索引            不支持                 支持
  外键约束                支持                  不支持
  表空间大小              较大                   较小
  数据行锁定              支持                  不支持

  操作系统的默认存储引擎是 InnoDB

  查看存储引擎的语法:
     show variables like 'storage_engine%';

16.指定表中的存储引擎
语法:
create table 表名(

)engine=存储引擎;

第三章:高级查询(一)

1.修改表
1.修改表名
语法:
alter table 原表名 rename 新表名

2.添加字段
  语法:
      alter table 表名 add 字段 数据类型 属性

3.修改字段
  语法:
      alter table 表名 change 原字段名 新字段名 数据类型 属性

4.删除字段
  语法:
      alter table 表名 drop 字段名

2.添加主外键
1.添加主键约束
语法:
alter table 表名 add constraint 主键名 primary key 表名(主键字段)

2.添加外键约束
  语法:
      alter table 表名 add constraint 外键名 foreign key(外键字段) references 关联表名 (关联字段)

3.插入数据记录
1.插入单行数据
语法:
insert into 表名 (字段列表) values(值列表)

2.插入多行数据
  语法:
      insert into 表名 (字段列表) values(值列表1),(值列表2),...

3.将查询结果插入到新表中
  语法1:
       insert into 新表 (字段1,字段2...) 
       select 字段1,字段2...
       from 表名

  语法2:
   create table 新表 (select 字段1,字段2,...from 表名)

3.数据更新记录
语法:
update 表名 set 字段1=值1,字段2=值2,… where 条件

4.删除数据记录
语法1:
delete from 表名 where 条件

语法2:
truncate table 表名

5.数据查询
语法:
select <字段列表>
from <表名或视图>
where <查询条件>
group by <分组的字段名>
having <条件>(注意:该位置的条件是 筛选组)
order by <排序的字段名> asc或desc

6.limit子句
语法:
select <字段列表>
from <表名或视图>
where <查询条件>
group by <分组的字段名>
order by <排序的字段名> asc或desc
limit 位置偏移量,行数

7.常用函数
1.聚合函数
常用聚合函数

   函数名               作用  
   avg()           返回某字段的平均值
   count()         返回某字段的行数
   max()           返回某字段的最大值
   min()           返回某字段的最小值
   sum()           返回某字段的和

2.字符串函数
                                  常用字符串函数

         函数名                            作用                         举例        
      concat(str1,str2,...strn)       连接完整字符串          select concat('My','S','QL')
                                                             返回:MySQL 
      insert(str,pos,len,newstr)      替换                    select insert('这是SQL Server数据库',3,10,'MySQL') 
                                                              返回:	这是MySQL数据库						                  lower(str)                      变小写                  select lower('MySQL')  							                                                          返回:mysql			
      upper(str)                      变大写                  select upper('mysql')  
                                                              返回:MYSQL
      substring(str,num,len)          截取                    select substring('JavaMySQLOracle',5,5)
                                                              返回:MySQL

3.时间日期函数
                          常用日期函数

      函数名                   作用                         举例
    curdate()             获取当前日期                    select curdate() 
    curtime()             获取当前时间                    select curtime()
    now()                 获取当前日期和时间               select now()
    week(date)            返回日期date为一年中的第几周     select week(date)
    year(date)            返回日期date的年份               selct year(date)
    hour(time)            返回时间time的小时值             select hour(now())
    minute(time)          返回时间time的分钟值             select minute(now())
    datediff(date1,date2) 返回日期参数date1和date2相隔天数  select datediff(now(),'2008-8-8')
    adddate(date,n)       计算日期参数date加上n天后的日期   select adddate(now(),5)  

4.数学函数
             常用数学函数

   函数名                作用
   ceil(x)           返回大于或等于x的最小整数
   floor(x)          返回小于或等于x的最大整数
   and()             返回0-1间的随机数

8.子查询
语法:
select …
from 表1
where 字段1比较运算符(子查询)

9.in和not in子查询
1.in子查询
注意:如果条件后面是用等号跟的子查询,那么该查询就不能返回多个值
使用in则相反

2.not in子查询
  注意:in前面加not就是结果的反向值

事列:
     #嵌套子查询事列
     SELECT re.`studentNo`
     FROM `result` re
     WHERE re.`subjectNo`NOT IN(
      		 SELECT su.`subjectNo` FROM `subject` su
   		 WHERE su.`subjectName`='HTML'					
		) AND re.`examDate` IN(
				 SELECT MAX(r.`examDate`)  FROM `result` r
				 WHERE r.`subjectNo`NOT IN(
	                         SELECT s.`subjectNo` FROM `subject` s
			         WHERE s.`subjectName`='HTML'
			        )					     
			);

第四章:高级查询(二)

1.exists 和 not exists子查询
1.exists 子查询
语法:
select … from 表名 where exists(子查询)

2.not exists子查询
  exists 和 in一样,同样允许添加not关键字实现取反操作,not exists表示不存在

3.嵌套在select语句的from子句中的子查询语法:
  select * from (子查询) as 表的别名
  注意:表的别名一定要写

4.创建临时表
  语法:
       create temporary table 表名 (查询语句)

5.联合查询
  语法:
       union

6.把时间区分为季度的函数
  QUARTER()
  注意:括号里面存放想要区分的时间

第五章:事务,视图,索引,备份和恢复

1.事务
事务是指将一系列数据操作捆绑成为一个整体进行统一管理

1.事务特性
  1.原子性
    事务是一个完整的操作,事务的各元素是不可分的(原子性)

  2.一致性
    在事务开始之前,数据库中储存的数据处于一致状态

  3.隔离性
    对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务

  4.持久性
    事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的    

2.如何执行事务
  支持事务的存储引擎有InnoDB和BDB,InnoDB存储引擎事务主要通过UNDO日志和REDO日志实现
    * UNDB 日志:复制事务执行前的数据,用于在事务发生异常是回滚数据
    * REDO 日志:记录在事务执行中,每条对数据进行更新的操作,当事务提交时,该内容将被刷新到磁盘

3.执行事务的语法:

  1.开始事务
  语法:
       begin 或 start transaction

  2.提交事务
  语法:
       commit 

  3.回滚(撤销)事务
  语法:
       rollback

  4.设置自动提交关闭或开启
  语法:
       set autocommit=0|1
        * 值为0:关闭自动提交
        * 值为1:开启自动提交  

2.视图
视图是保存在数据库中的select查询
视图是一种虚拟表,通常 是作为来自一个或多个表的行或列的子集创建的

1.使用sql语句创建视图
  语法:
       create view 视图名
       as
          

2.使用sql语句删除视图
  语法:
       drop view if exists 视图名

3.使用sql语句查看视图数据
  语法:
       select 字段 from 视图名

3.索引

1.索引的分类:

 1.普通索引
   普通索引是mysql中的基本索引类型,允许在定义索引的列中插入重复值和空值,它的唯一任务是加快对数据的访问速度

 2.唯一索引
   唯一索引不允许两行具有相同的索引值

 3.主键索引
   在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型

 4.复合索引
   在创建索引时,并不是只能对其中一列创建索引,与创建主键一样,可以将多个列合作为索引

 5.全文索引
   全文索引的作用是在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值,主要用于在大量文本文字中搜索字符串

 6.空间索引
   空间索引是对空间数据类型的列建立的索引

2.创建索引
语法:
create unique|fulltext|spatial index 索引名
on 创建索引的表名 (创建索引的表名的列名)
* unique|fulltext|spatial:分别表示唯一索引,全文索引和空间索引

3.删除索引
语法:
drop index 索引名 on 创建索引的表名

4.查看索引
语法:
show index from 创建索引的表名

4.数据库的备份和恢复

1.使用mysqldump命令备份数据库
  语法:
       mysqldump -u 用户名(一般为root) -h 主机名(一般不写) -p 密码 要备份的数据库名 要备份的数据库中的表名 > 路径(例如:d:\1\java.sql)

2.使用mysql命令恢复数据库
  语法:
       mysql  -u 用户名(一般为root) -h 主机名(一般不写) -p 密码 要给恢复的数据库名 < 路径(例如:d:\1\java.sql)

  注意:1和2一定记住是在dos命令下写的

3.mysql命令是在dos环境下的恢复数据库命令,如果已经登录列MySQL服务器,也可以使用source命令恢复数据库
  语法:
       source 数据库备份文件(所谓的路径)

4.将所有数据写入到数据文件中
  语法:
       flush tables

5.表数据导出到文本文件
  语法:
       select 查询的列
       from 表名
       where 条件
       into outfile 路径(列如:'d:/1/java.txt')

6.文本文件写入到数据表
  语法:
       load data infile 路径(列如:'d:/1/java.txt') into table 要导入的表名(注意:要导入的表名要提前创建好)

7.知识扩展
  * fields 
      terminated by 'string':用来设置字段的分割符为字符串对象,默认为“\t”  

  * fields
      optionally | enclosed by'char':用来设置括上字段值的字符符号,如果使用了optionally,则只有char和varchar等字符数据字段被包括,
                                     默认情况下不使用任何符号  

  * fields
      escaped by'char':用来设置转义字符的字符符号,默认情况下使用“\”字符

  * lines
       starting by'char':用来设置每行开头的字符符号,默认情况下不使用任何符号

  * lines
       terminated by'string':用来设置每行结束的字符符号,默认情况下使用“\n”字符串  

第七章:JDBC

1.JDBC访问数据库的步骤

1.加载JDBC驱动
  Class.forName("JDBC驱动类的名称")   注意:JDBC驱动类的名称一般为:com.mysql.jdbc.Driver

2.与数据库建立连接
  Connection conn=DriverManager.getConnection(数据连接字符串,数据库用户名,密码)      注意:数据库连接字符串一般为:jdbc:mysql://本机名(一般为:localhost):3306/数据库名  数据库用户名一般为:root  密码一般为:root

3.发送SQL语句,并得到返回结果
  一旦建立连接,就是用该连接创建Statement接口的对象,并将SQL语句传递给它所连接的数据库,如果是查询操作,将返回类型为ResultSet的结果集,它包含执行SQL查询的结果
  Statement stmt = conn.createStatement();
  ResultSet rs=stmt.executeQuery("select `id`,`name` from `master`")

4.处理返回结果
  处理返回结果主要是针对查询操作的结果集,通过循环取出结果集中每条记录并做相应处理

2.Statement接口和ResultSet接口

             Connection 接口常用方法

    方法名称                         作用
  void close()                     释放资源
Statement createStatement()        创建一个Statement对象来将SQL语句发送到数据库
  PreparedStatement
preparedStatement(String sql)      创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库
  boolean isClosed()               查询此Connection对象是否已经关闭

             Statement 接口常用方法

    方法名称                           作用              
ResultSet executeQuery(String sql)    可以执行SQL查询并获取ResultSet对象
  int executeUpdate(String sql)       执行增,删,改操作,返回影响行数
  boolean execute(String sql)         可以执行任意SQL语句,若结果为ResultSet对象,则返回true,反之为false

                ResultSet 接口常用方法及作用

      方法名称                           作用          
 boolean next()                      下一行
 boolean previous()                  上一行
 void close()                        释放资源
 int getInt()                        int类型
 int getFloat()                      float类型
 String getString()                  String类型
 int getRow()                        得到光标当前所指行的行号
 boolean absolute(int row)           光标移动到row指定的行

3.PreparedStatement接口
PreparedStatement接口继承Statement接口

               PreparedStatement 接口常用方法

      方法名称                           作用     
  boolean exectute()                 true或false
  ResultSet executeQuery()           查询
  int executeUpdate()                执行增,删,改操作,返回影响行数
  void setInt(int index,int x)       给参数
  void setObject(int index,Object x) 使用给定对象设置指定参数的值

第八章:DAO模式

1.Properties类
properties配置文件

              Properties类的常用方法
   
     方法                                         描述
 String getProperty(String key)               用指定的键在此属性列表中搜索属性,通过参数key得到其所对应的值
 Object setProperty(String key,String value)  调用Hashtable的方法put,通过调用基类的put()方法来设置键-值对
 void load(InputStream inStream)              从输入流中读取属性列表(键和元素对),通过对指定文件进行装载获取该文件中所以键-值对
 void clear()                                 清除所装载的键-值对,该方法有基类Hashtable提供

你可能感兴趣的:(MySQL数据库基础)