本帖最后由 小石姐姐 于 2018-10-19 11:12 编辑
Mysql登陆:
1.mysql-uroot-p密码
2.mysql-h ip -uroot-p连接目标的密码
Mysql退出:
quit ,exit
服务器开启:
net start mysql
服务器停止:
net stop mysql
sql指令:
1.什么是SQL?
Structured Query Language :结构化查询语言
其实就是定义了操作所有关系型数据库的规则.每一种数据库操作的
方式存在不一样的地方,称为"方言".
2.SQL通用语法
(1)SQL语句可以单行或多行书写,以分号结束. show databases查看数据库
(2)可使用空格和缩进来增强语句的可读性.
(3)Mysql数据库的sql语句不区分大小写.建议使用大写
(4)3种注释
*单行注释: -- 注释内容(两个横岗一个空格)或 # 注释(Myqsql特有)
*多行注释:/* 注释 */
3.sql常见的分类
*DDL:数据库定义语音,作用创建数据库和数据表以及修改数据库和数据表
*DCL:数据库控制语音,作用给数据库和数据表进行授权操作
*DML:数据库操作语音,作用对表中的记录(数据)进行添加,修改,删除操作
*DQL:数据库查询语言,作用对表中的记录,进行查询操作
4.sql操作数据库和表
==DDL 创建数据库和数据表以及修改等操作.关键词:create,drop,alter
1.操作数据库:CRUD
(1)C(create):创建
*创建数据库:
create database + 数据库名称;
*创建数据库,判断不存在,再创建:
create database if not exists + 数据库名称;
*创建数据库制定字符集
create database 数据库名称 character set + 字符集
(2)R(retrieve):查询
*查询所有数据库的名称:
show databases;
*查询某个数据库的字符集:查询某个数据库的创建语句
show create database
(3)U(update):修改
*修改数据库的字符集
alter database 数据库名称 character set 字符集
(4)D(Delete):删除
*删除数据库
drop database 数据库名称;
*判断数据库存在,再删除
drop database if exists 数据库名称;
(5)使用数据库
*查询当前正在使用的数据库名称
select database();
*使用数据库
use 数据库名称;
5.操作表
(1)C(create):创建
1.语法:
create table 表名(
列名1 数据类型1, age int,
列名2 数据类型2,
....
列名n 数据类型n,
);
最后一列不需要加逗号,
*数据类型
1.int 整数类型 age int,
2.double:小数类型 score double(5,2)
3.date:日期 只包含年月日 yyyy-MM-dd
4.datetime:日期 包含年月日时分秒 yyy-MM-dd HH:mm:ss
5.timestamp:时间错类型 包含年月日时分秒 yyy-MM-dd HH:mm:ss
* 如果将来不给这个字段赋值,或赋值为Nll,则默认采用当前系统时 间,来自动赋值.
6.varchar:字符串
* name varchar (20):姓名最大20个字符
*创建表
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
(2)R(retrieve):查询
*查询某个数据库中所有的表名称
show tables;
*查询表结构
desc 表名;
(3)U(update):修改
1.修改表名 alter table 表名 rename to 新的表名;
2.修改表的字符集 alter table 表名 character set 字符集;
3.添加一列 alter table 表名 add 列名 数据类型;
4.修改列名称 类型 alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型(只改数据类型)
5.删除列 alter table 表名 drop 列名;
(4)D(Delete):删除
* drop table if exists 表名;
* drop table 表名;
6.DML:增删改表中数据
(1)添加数据
*语法:
insert into 表名(列名1,列名2...列名n) values(值1,值2,...值n);
*注意:
1.列名和值要一一对应.
2.如果表名后,不定义列名,则默认给所有列添加值
3.除了数字类型,其他类型需要使用引号引起来(单引双引都可以)
(2)删除数据
*语法
delete from 表名[where 条件] 例:Delect from sut where id=1;
*注意
1.如果不加条件,则删除表中所有记录(不推荐,有多少条记录就会执行多少次删除操作)
2. truncate table 表名;(推荐使用)-- 先删除表,然后在创建一个一模一样的空表 (属于DDL的SQL语句)
(3)修改数据
* 语法:
update 表名 set 列名1=值1,....[where 条件];
*注意:
1.如果不加任何条件,则会将表中的所有记录全部修改
7.DQL:查询表中的记录
* select * from 表名;
1.语法:
select
字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
2.基础查询
1.多个字段的查询
select 字段名1,字段名2...from 表名;
*注意:
如果查询所有字段,则可以使用*来替代字段列表
2.去处重复
* distinct
3.计算列
* 一般可以使用四则运算一些列的值.(一般只会进行数值型的计算)
* ifnull(表达式1,表达式2):
表达式1:哪个字段需要判断是否为null
表达式2:该字段为null后的替换值
4.起别名
* as:as也可以省略
1. 条件查询
(1)Wher子句后跟条件
(2)运算符 > < >= <=
Between 值1 and 值2 等同于字段 >=值1 and 字段<=值2
字段 in(值1,…,值n)等同于 字段=值1 or 字段=值2,
Is null 如果值为null 不能使用= 要使用is null
2. 模糊查询
基本语法:where 字段 like; 字符:%表示任意字符(0-n个字符),_表示任意字符
3. 排序查询
语法: order by 子句
order by 排序字段1, 排序字段2…..
排序方式:
升序:asc 默认的.
降序:desc
注意:如果有多个排序条件,则当前面的条件值一样时,才会判断第二条件
4. 聚合函数查询
将一列数据作为一个整体,进行纵向的计算
(1) count:计算个数
(2) max:计算最大值
(3) min:计算最小值
(4) sum:计算和
(5) avg:计算平均值
*注意:聚合函数的计算会排除null
解决方案: 选择不包含非空的列进行计算,Ifnull函数
5. 分组查询
基本语法: group by 字段要有共同的特点进行分组
注意: 分组之后查询的字段:分组字段,聚合函数
Where和having区别:
1.where在分组之前进行限定,如果不满足条件则不参与分组
having在分组之后进行限定,如果不满足结果,则不会被查询出来
2. where后不可以跟聚合函数,having可以进行聚合函数的判断
查询时,关键词的先后顺序:
Select 字段
From 表名
Where 分组前条件判断
Group by 分组
Having 分组后条件判断
Order by 排序
6. 分页查询
分页:数据太多,一次性查询出来,展示效果不好,就是用户的体验不好
分页操作,不同的数据库分页基本原理不一样
Mysql: limit 进行分页,其他数据库不能使用limit进行分页
公式: 开始的索引=(当前的页码-1)*每页显示的条数
概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性
分类:
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key
1.非空约束:not null
1. 在创建表时添加约束
2. 创建表完后,添加非空约束
2.唯一约束:unique 在同一列不能有相同的值
注意:唯一约束可以有Null值,但是只能有一条记录为null
删除唯一约束:
Alter table stu drop index 列名;
3.主键约束:primary key
一. 注意:
1. 含义:非空且唯一
2. 一张表只能有一个字段为主键
3. 主键就是表中记录的唯一标识
二.在创建表时,添加主键约束
Create table stu(
Id int primary key, -- 给id添加主键约束
Name varchar(20)
);
删除主键:
Alter table stu drop primary key;
自动增长:
概念如果某一列是数值类型的,使用 auto_increment 可以完成值的自动增长
在创建主键时:
Create table stu(
Id int primary key auto_increment, -- 给id添加主键约束
Name varchar(20)
);
删除自动增长:
Alter table stu modify id int;
4. 外键约束
外键的作用:让表与表建立关系,保证数据的有效性和正确性.
外键的特点:
1.外键的值不能随意写.
2. 外键的值应用于另一张表的主键值
3.外键的值可以为null,但是为null没有任何意义.
外键设计原则:
主表
子表
在创建表时,可以添加外键
Create table student(
外键列
Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
);
1. 删除外键: alter table 表名 drop foreign key 外键名称;
2. 添加外键: alter table 表名 add Constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称)
1. 多表查询的分类
1. 内连接查询
隐式内连接:使用where 条件来消除无用的数据
显示内连接:select 字段列表 from 表名 inner join 表名2 on 条件
内连接查询:
*从哪些表中查询数据, 条件是什么, 查询哪些字段
2. 外链接查询
左外连接: select 字段列表 from表1 left (outer) join 表2 on 条件
查询的是左表所有数据以及其交集部分
右外链接: select 字段列表 from表1 right (outer) join 表2 on 条件
查询的是右表所有数据以及其交集部分
3. 子查询: 查询中嵌套查询,称嵌套的查询为子查询
子查询作为一个值(单行单列):
子查询可以作为条件,使用运算符判断
子查询作为一个数组(多行单列):
子查询可以作为条件,使用运算符in来判断
子查询作为一个表(多行多列)
2. 笛卡尔积
多个表放在一起查询
出现问题:笛卡尔积(就是出现的无用数据)
通过主键和外键关联(因为外键的值,引用于主键的值)
3. 事务
1概念:如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败
*操作:
1开启事务: start transaction
2回滚事务:rollback
3提交事务: commit
4 MySQL数据库中事物默认自动提交
*一条DML(增删改)语句会自动提交一次事务
*事务提交的两种方式
自动提交:mysql就是自动提交的
手动提交:需要先开启事务,在提交
*修改事务的默认提交方式
Select @@autocommit; 1-代表默认提交 0-代表手动提交
修改方式:set@autocommit=0/1;
2事务的四大特征:
(1) 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败
(2) 持久性:当事务提交或回滚后,数据库会持久化的保存数据
(3) 隔离性:多个事务之间,相互独立
(4) 一致性:事务操作前后,数据总量不变
3事务的隔离级别
*概念:多个事务之间隔离的,相互独立的.但是如果多个事务操作同一批数据,则会引发一些问题,设计不同的隔离级别就可以解决这些问题
*存在问题:
(1)脏读:一个事务,读取到另一个事务中没有提交的数据
(2)不可重复读:在同一个事务中,两次读取到的数据不一样
(3)幻读:一个事务操作数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改
*隔离级别:
(1)read uncommitted:读未提交
产生的问题:脏读,不可重复读,幻读
(2)read committed :读已提交 (Oracle默认)
*产生的问题:不可重复读,幻读
(3)repeatable read:可重复读 (mysql默认)
*产生的问题:幻读
(4)serializable :串行化
*解决所有问题
*注意:隔离级别从小到大安全性越来越高,但是效率越来越低
*数据库查询隔离级别:
*select @@tx_isolation
JDBC
1.*概念: Java DataBase Connectivity Java 数据库连接,Java语言操作数据库
定义了操作所有关系型数据库的规则。
其本质是官方(sun公司)定义的一套所有关系型数据规则,即接口.各个数据库厂商去实现这套接口,提供数据库驱动jar包,我们可以使用这套接口编程,真正执行代码的驱动是驱动jar包中的实现类。
2.快速入门:
*步骤:
(1)导入驱动jar包
1.复制包到项目libs目录下
2.右键 –>add as library
(2)注册驱动
(3)获取数据库连接对象 Connection
(4)定义sql
(5)获取执行SQL语句的象 Statement
(6)执行sql,接受返回结果
(7)处理结果
(8)释放资源
3.详解各个对象
1.DriverManager 驱动管理对象
*功能:
注册驱动: Class.forName(“com.mysql.jdbc.Driver”);,
Mysql5之后的驱动jar包可以省略注册驱动的步骤
获取数据库连接:
Static Connection getConnection(String url,String user,String password)
参数: url:指定连接的路径
语法:jdbc:mysql://IP地址:端口号/数据库名称
细节:如果连接的是本机的服务器,并且mysql服务器默认的端口是3306
则可以简写为 jdbc:mysql///数据库名称
2.Connection 数据库连接对象
获取执行sql对象: statement createsta
PreparedStatment preparedstatment=(string sql)
3.Statement 执行sql对象
Boolean execute(String sql):可以执行任意的sql (了解)
Int executeUpdate(String sql):执行DML(insert,update,delect)语句,DDL(create,alterdrop)
*返回值:影响的行数,可以通过这个影响行数判断DML语句是否执行成功,返回值>0则执行成功
Resultset executeQuery(String sql):执行DQL语句
4.ResultSet 结果集对象
5.PreparedStatment 执行sql的对象
|
|