数据库类型:网状型数据库、层次型数据库、关系型数据库、面向对象数据库,关系型数据库最广泛
数据库分为两部分,①存放数据的库(DB)②管理数据的软件(DBMS)
数据库安装(Navicat Premium 15为例)
常用SQL语句/用法
DQL (Data Query Language,数据操作语言)查询语句:主要由于select关键字完成,查询语句是SQL语句中最复杂,功能最丰富的语句。
DML(Data Munipulation Language,数据操作语言)语句,这组DML语句修改后数据将保持较好的一致性;操作表的语句,如插入、修改、删除等
DDL(Data Definition Language,数据定义语言)语句,操作数据对象的语言,有create、alter、drop。
DCL(Data Control Language,数据控制语言)语句,主要有grant、revoke语句。
TCL (Transaction Control Language)事务控制语句:主要有commit、rollback和savepoint三个关键字完成
常见数据库对象
表:
table, 表是数据库存储的逻辑单元,以行和列的形式存在,行是一条数据记录,列是字段
数据字典, 就是系统表,存储数据库相关信息的表,系统表里的数据通常有数据库系统维护。系统表结构和数据,开发人员不应该手动修改,只能查询其中的数据
视图 view, 视图就是一张虚拟的表,并不真正存储数据
索引 index, 提高查询性能
约束 constraint, 执行数据检验规则,保证数据完整性规则
函数 function, 完成一个特定的计算,具有返回值和参数
存储过程 procedure, 完成某项完整的业务处理,没有返回值,但可通过传出参数将多个值传个调用环境
触发器 trigger, 监听器,当数据库发生特定事件后触发器被触发,完成响应
常用数据类型
列类型
整型(tinyint/smallint/mediumint int(integer)/bigint):整数,有符号和无符号
浮点型(float/double):单精度和双精度浮点类型
精确浮点型(decimal(dec)):精确小数类型,相当于float和double不会产生精度丢失问题
日期(date):日期类型,不能保存时间,当Java里的Data对象保存到该类中,时间部分丢失
时间(time):时间类型,不能保存日期,当Java里的Data对象保存到该类中,日期部分丢失
日期时间:日期,时间类型
时间戳(timestamp)
年份
字符(char):定长字符串类型 , (varchar):可变长度字符串类型
二进制(binary):定长二进制字符串类型,它以二进制形式保存字符串
二进制字符串(varbinary):可变长度的二进制字符串类型,二进制形式保存字符串
存放大对象:1~4字节的二进制大对象,存储超图片、音乐等二进制数据(255/64K/16M/4G的大小)
文本类型:1~4字节的文本对象,存储超长长度的字符串(255/64K/16M/4G的大小)
枚举(enum):该列的值只能是enum括号中出现的值的之一
集合(set):该列的值可以是set中的一个或多个值
常用操作
显示所有数据库:show databases;
删除数据库:drop database dbName;
创建数据库:create database [if not exists] dbName;
中括号部分可选的,判断该数据不存在就创建
切换、使用指定数据库:use dbName;
显示当前使用数据库所有的表对象:show tables;
显示表结构describe(desc):desc tableName;
创建一张表:
create table user (
–int 整型
uId int,
–小数
uPrice decimal,
–普通长度文本,default设置默认值
uName varchar(255) default ‘zhangsan’,
–超长文本
uRemark text,
–图片
uPhoto blob,
–日期
uBirthday datetime
);
子查询建表方法:
部分列名匹配模式:
create table userInfo (
name varchar(20),
sex char
)
as
select name, sex from user;
上面的列名和子查询的列名以及类型要对应
全部列名模式:
create table userInfo
as
select * from user;
直接将整个表的类型和数据备份到新表userInfo中
添加表字段:
添加单列
alter table user add tel varchar(11) default ‘02012345678’;
添加多列
alter table user
add (
photo blob,
birthday date
);
上面就同时增加了多列字段
修改表字段:
修改tel列
alter table user modify tel varchar(15) default ‘02087654321’;
修改tel列的位置,在第一列显示
alter table user modify tel varchar(15) default ‘02087654321’ first;
修改tel列的位置,在指定列之后显示
alter table user modify tel varchar(15) default ‘02087654321’ after age;
注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改
但是MySQL可以通过多个modify的方式完成:
alter table user
modify tel varchar(15) default ‘02087654321’ first,
modify name varchar(20) after tel;
删除指定字段:
alter table user drop photo
重命名表数据
表重命名
alter table user rename to users;
字段重命名
alter table users change name u_name varchar(10);
alter table users change sex u_sex varchar(10) after u_name;
如果需要改变列名建议使用change,如果需要改变数据类型和显示位置可以使用modify
删除表
drop table users;
drop删除表会删除表结构,表对象将不存在数据中;数据也不会存在;表内的对象也不存在,如:索引、视图、约束;
truncate删除表
truncate都被当成DDL出来,truncate的作用就是删除该表里的全部数据,保留表结构。相当于DDL中的delete语句,
但是truncate比delete语句的速度要快得多。但是truncate不能带条件删除指定数据,只会删除所有的数据。如果删除的表有外键,
删除的速度类似于delete。但新版本的MySQL中truncate的速度比delete速度快
约束
常用五种约束:
not null:非空约束,指定某列不为空
unique: 唯一约束,指定某列和几列组合的数据不能重复
primary key:主键约束,指定某列的数据不能重复、唯一
foreign key:外键,指定该列记录属于主表中的一条记录,参照另一条数据
check:检查,指定一个表达式,用于检验指定数据
MySQL不支持check约束,但可以使用check约束,而没有任何效果
约束可分为单列约束和多列约束
索引
提高对表的检索查询速度,不能独立存在,必须对某个表对象进行依赖
创建索引:
create index idx_temp_name on temp(name)
组合索引:
create index idx_temp_name$pwd on temp(name, pwd)
删除索引:
drop index idx_temp_name on temp
视图
限制对数据的访问
让复杂查询变得简单
提供数据的独立性
可以完成对相同数据的不同显示
创建,修改视图
create or replace view view_temp
as
select name, age from temp
修改视图:
alter view view_temp
as
select id, name from temp
删除视图:
drop view view_temp
显示创建语法:
show create view v_temp
DML语句
①insert into 插入语句:
insert into temp values(null, ‘jack’, 25)
指定列:
insert into temp(name, age) values(‘jack’, 22)
使用子查询插入:
insert into temp(name) select name from classes
多行插入:
insert into temp values(null, ‘jack’, 55), (null, ‘jackson’ 33)
②update修改语句
修改所有数据:
update temp set name = ‘jack3’
修改指定条件的记录需要用where:
update temp set name = ‘jack’ where age > 55
③delete删除语句
删除所有数据:
delete from temp
删除指定条件数据:
delete from temp where age > 20
select查询语句
function 函数
分为多行函数和单行函数
单行函数分为
类型转换函数;
位函数;
流程控制语句;
加密解密函数;
信息函数
组函数
组函数就是多行函数,组函数是完成一行或多行结果集的运算,最后返回一个结果,而不是每条记录返回一个结果
多表查询
种类:
MySQL中多表连接查询有两种规范,SQL92、SQL99
较早的SQL92规范支持,如下几种表连接查询:
等值连接
非等值连接
外连接
广义笛卡尔积
SQL99规则提供了可读性更好的多表连接语法,并提供了更多类型的连接查询,SQL99支持如下几种多表连接查询:
交叉连接
自然连接
使用using子句的连接
使用on子句连接
全部连接或者左右外连接
子查询
注意:
子查询用括号括起来,特别情况下需要起一个临时名称
子查询当做临时表时(在from之后的子查询),可以为该子查询起别名,尤其是要作为前缀来限定数据列名时
子查询用作过滤条件时,将子查询放在比较运算符的右边,提供可读性
子查询作为过滤条件时,单行子查询使用单行运算符,多行子查询用多行运算符
存储过程
游标
触发器
触发器分为insert、update、delete三种触发器事件类型
还有after、before触发时间
创建触发器:
create trigger trg_temp_ins
before insert
on temp for each row
begin
insert into temp_log values(NEW.id, NEW.name);
end//
删除触发器:
drop trigger trg_temp_ins