数据库基础
什么是数据库
数据库是存储和管理书记的仓库
我们常说的数据库是:关系型数据管理系统,即数据库服务器
Java与数据库
应用程序:向数据库请求数据,并显示结果
数据库服务器:存储数据
一、 SQL概述
1、什么是SQL
结构化查询语言:Structured Query Language
作用:客户端使用SQL 来操作服务器
标准:IOS制定,对DBMS的统一操作方式
2、sql语法
- sql语句可以在当行或者多行书写,已分号结尾
- 可以使用空格和缩进增强语句的可读性
- MYSQL不区分大小写,建议使用大写
3、语句类型
DDL:数据定义语句,用于定义数据库对象、库、表、列等
create、drop、alter,修改:库、表结构
DML:数据操作语言,原来定义数据库记录:
insert,delete,update
DCL:数据库控制语言,用来定义访问权限 和安全级别
DQL:数据库查询语句,查询数据
select
4、数据类型
- int :整形
- double:浮点型;double(6.2) 表示最多6位,其中必须两位小数
- decimal:浮点型;不会出现精度缺失
- char :固定长度字符串类型
- varchar:可变长度字符串类型
- text(clib):字符串文本类型
- data:日期类型,格式为:yyyy-MM-dd
- time: 时间类型,格式为:hh:mm:ss
- timestamp: 时间戳类型
二、语句
1、库
show database;
CREATE DATABASE 【xxx】;
user 【xxx】;
//指定数据库的编码
ALTER ADTABASE [xxxx] CHARACTER SET utf-8
//删除数据库
DROP DTABASE [if exist] [xxx]
2、表
2.1 DDL 定义数据库和表
//建表
CREATE TABLE (IF NOT EXISTS) 表名(
列名 列类型,
列名 列类型,
...
列名 列类型
)
SHOW TABLES;//显示所有表
SHOW CREATE TABLE 【表名】;//查看指定表的建表语句
DESC 【表名】;//查看表结构
drop table 【表名】;//删除表
//修改表名
ALTER TABLE 【表名】;
//添加列
ALTER TABLE 【表名】 ADD(
列名 列类型,
...
)
//修改列类型
ALTER TABLE 【表】 MODIFY 【列】 列类型
//修改列名
ALYER TABLE 【表】 CHANGE[【原列名】 【新列名】 列类型
//删除列
ALTER TABLE 【表】 DROP 【列】
//修改表名
ALTER TABLE【表原名】RENAME TO 【新表名】
TRUNCATE TABLE 【表名】;先DROP表。再create 表,且无法回滚
2.2 DML 操作数据库
INSERT INTO 【表名】(列名1,列名2,.....)
VALUES(列值1,列值2,....)
UPDATE【表名】SET
列名1=列值1,
列名2=列值2,
...
where 条件
DELETE FROM 【表名】(where 条件)
2.3 DCL数据控制
一个项目创建一个用户,一个项目对应着一个数据库
这个用户只能对应这个数据库的权限
1、创建用户
CREATE USER 用户名@IP地址 IDENTIFIED BY '密码‘;//用户在指定ip上登录
CREATE USER 用户名@’%‘ IDENTIFIED BY '密码‘;//用户在任意ip上登录
2、给用户授权
GRANT 权限1,权限2, .... ON 数据库.* TO 用户名@IP地址
>权限、用户、数据库
>给用户分派在指定的数据库上的指定的权限
>GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE.SELECT ON mydb1.* TO 用户@IP地址
>GRANT ALL ON mydb1.* TO 用户@IP地址
3、撤销授权
REMOVE 权限1,....,权限n ON mydb1,* from 用户名@IP地址
4、查看权限
SHOW GRANTS FOR 用户名@IP地址
5、删除用户
DROP USER 用户名@IP地址
2.4 DQL 数据查询语句
select * from 【table】
-- 列运算
1. 数量类型的可以做四则运算
select a*2 from table;
2. 字符串类型可以做连续运算
select concat('str',a) from table;
3. 转换nul
select IFNULL(a,0)+1000 from table;
4. 别名
select distinct 列1 as xxx from 【table】
-- 条件控制
--- 条件查询
=,>,< ,in,bentween等
---模糊查询
like "_" 下划线 匹配一个字符,% 匹配0-N个任意字符
--升序 asc 降序 desc
--聚合函数:某列的运算
count:总行数
MAX :最大值
MIN : 最小值
SUM:总数
AVG:平均数
--分组查询
group by
--limit a,b 从第a条开始 总共查b条
三、MySQL
1、备份和恢复
1)、 导出SQL脚本
- 数据库连接根据导入导出
- mysqldump -u用户名 -p密码 数据库名称>生成的脚本文件路径: mysqldump -uroot -p123 mydb1> c:\mydb1.sql
2)、 恢复
-
①不要登录mysql 在cmd控制台下,
-
先删除mydb1库,再创建mydb1库
-
mysql -uroot -p123 mydb1<c:\mydb1.sql
-
②进入mysql数据库,
-
source c:\mydb1.sql
2、主键
- 非空、唯一:当表的某一列被指定为主键后,该列就不能为空,不能重复
create table s(
sid char(10) primary key,
name varchar(20)
);
create table s(
sid char(10) ,
name varchar(20),
primary key(sid)
);
alter table s add primary key(sid);
//删除主键: alter table s drop primary key;
- 主键自增长:由于主键非空唯一,常指定主键类型为整型,自增长来保证非空唯一
create table s(
sid char(10) primary key auto_increment,
name varchar(20)
);
alter table s change sid sid int auto_increment
//删除主键: alter table s drop primary key;
- 非空
建表的时候对字段设置 not null
- 唯一
建表的时候对字段设置 unique
3、外键
- 外键必须是另一表的主键的值
- 外键可以重复
- 外键可以为空
4、多表查询
去除 笛卡尔积
- 合并结果集
要求被合并的表中,列的类型和列数相同
union 去除重复行
union all 不去除重复行
- 连接查询
- 内连接
方言(当前数据库支持):select * from t1,t2 where t1.xx = t2.xx;
标准: select * from t1 inner join t2 on ti.xx = t2.xx
自然: select * from t1 natural join t2
- 外连接
左外:左表无论是否满足条件都查,右表满足条件查,不满足条件为null
select * from t1 left outer join t2 on t1.xx = t2.xx
自然: select * from t1 natural left outer join t2 on t1.xx = t2.xx
右外:右表无论是否满足条件都查,左表满足条件查,不满足条件为null
select * from t1 right outer join t2 on t1.xx = t2.xx
自然:select * from t1 natural right outer join t2 on t1.xx = t2.xx
全链接:可以使用union来实现
- 子查询:查询中还有查询(多个select 关键字)
where后 作为条件
from后作为表
select * from t1 where t1.cid in (select id from c )
select * from (select * from t2 where id =3 ) t2 where
以上为个人学习总结,如有错漏,希望能得到沟通以及指正,非常感谢!