E:Entity实体 R:relation关系
关系型数据库作用:主要是用来存储实体与实体之间的关系,
关系型数据库:
mysql : 小型.开源免费,大多数中小型互联网公司都在使用这个,sun公司收购了 (集群),5.5以前的都是免费的,6.X之后的版本都是收费的
mariadb: 开源免费数据, 和mysql基本上一模一样,但是它是免费的,并且在不停的更新,是mysql开源版本的一个分支
Oracle : 中大型的数据库,服务收费的,安全稳定. 证券,银行,保险公司, Oracle收购了sun公司, mysql6.x之后就开始收费了
SQL Server : 大学里面教学使用比较多, 政府官网, 图形化界面做的很好 c#
DB2 : IBM公司, 主要运用在银行系统, 服务器软硬件解决方案
sybase : powerdesinger 数据建模工具
SQLite : 运用在嵌入式系统中的小型数据库,android
查看数据库排名网站: https://db-engines.com/en/ranking
数据库服务器安装了Mysql服务软件的一台电脑
SQL: Structrued Query Langauage 结构化的查询语言
数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。
方式一: mysql -u root -p 按回车后提示后输入密码
方式二:mysql -uroot -p自己的密码
完整格式:
mysql -h主机地址 -u用户名 -p密码
连接本机:
mysql -hlocalhost -uroot -p123456
mysql -h127.0.0.1 -uroot -p123456
注意:不写-hlocalhost代表默认访问本机数据库服务器
-u username 用户名
-p password密码
create database 数据库的名字;
create database 数据库的名字 character set 字符集;
create database 数据库的名字 character set 字符集 collate 校对规则;
--查看数据库定义的语句
show create database 数据库的名字;
--查看所有的数据库
show databases;
--查看当前使用的数据库
select database();
--修改数据的字符集
alter database 数据库的名字 character set 字符集;
drop databae 数据库的名字;
--切换数据库
use 数据库的名字;
show engines;
show variables like 'have%';
show variables like 'storage_engine%';
打开MySQL安装目录下的my.ini,找到如图所示,default-storage-engine=INNODB,修改INNODB值即可
* MyISAM存储引擎:由于该存储引擎不支持事务、也不支持外键,所以访问嘟嘟比较快。因此对事务完整性没有要求,并以访问为主的应用格式和该存储引擎。
* InnoDB存储引擎:由于该存储引擎在事务上具有优势,即支持具有提交、回滚和崩溃恢复能力的事务安装,所以比MyISAM存储引擎占用更多的磁盘空间。因此需要进行频繁的更新、删除操作,同时还对事务的完整性要求比较高,需要实现并发控制,此时适合该存储引擎。
* MEMORE存储引擎:该存储引擎使用内存来存储数据,因此该存储引擎的数据访问熟读快,但是安全上没有保障。如果应用中涉及数据比较小,需要快速访问,则适合使用该存储引擎。
表中的数据库对象包含列、索引和触发器。
create table 表名(
列名 列的类型 [列的约束],
列名 列的类型 [列的约束]
);
--查看所有的表
show tables;
--查看表的创建过程
show create table 表名;
或者
show create table 表名 \G
--查看表的结构
desc 表名;
或者
describe 表名;
alter table 旧表名 rename [to] 新表名;
或者
rename table 旧表名 to 新表名;
alter table 表名 character set 字符集;
drop table 表名;
列的类型 分为如下:
数字类型
整数: tinyint、smallint、mediumint、int、bigint
浮点数: float、double、real、decimal
日期和时间: date、time、datetime、timestamp、year
字符串类型
字符串: char、varchar
文本: tinytext、text、mediumtext、longtext
二进制(可用来存储图片、音乐等): tinyblob、blob、mediumblob、longblob
对比Java中的类型:
列的类型
java mysql
byte TinyInt
short SMALLINT
int int
float float
double double
String char(长度)/varchar(长度)
char 和varchar:区别主要体现在存储字符时候,如果是char存储类型,不足的字符会以空格存储,varchar则不会
boolean boolean
Date date : YYYY-MM-DD 年/月/日
time : hh:mm:ss 时:分:秒
datetime:
timestamp:最大取值是2038年.
text: 大文本类型
blob: 二进制大对象类型
--建表时
create table table_name(
列名 列的类型 列的约束,
列名 列的类型 列的约束
......
constraint 外键约束名 foreign key(属性名) references 表名(外表的属性)
)
alter table 表名 add 列名 列的类型 列的约束;
--在表的所有字段第一个位置添加字段
alter table 表名 add 列名 列的类型 列的约束 first;
--在表的指定字段添加字段
alter table 表名 add 列名 列的类型 列的约束 after 列名;
--修改列的类型
alter table 表名 modify 列名 列的类型;
--修改某个字段的顺序
alter table 表名 modify 列名 列的类型 first|after 列名;
--修改列名
alter table 表名 change 旧列名 新列名 列的类型 列的约束;
alter table 表名 drop 列名;
由于数据存储在数据库表中,所以索引是建立在数据库表对象上的,由表中的一个字段或者多个字段生成的键组成。这些键存储在数据结构中,通过MySQL快速有效地查找键值相关联的字段。根据索引的存储类型,可以将索引分为B型数索引(BTREE)和哈希索引(HASH)。
注意:InnoDB和MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HSAH类型索引。
MySQL支持六种索引:普通索引、唯一索引、全文索引、单列索引、多列索引和空间索引。
create table table_name(
列名 列的类型 [列的约束],
列名 列的类型 [列的约束],
index|key [索引名](属性名 [长度] [asc|desc1])
)
create index 索引名 on 表名(属性名 [长度] [asc|desc]) ;
alter table table_name add index|key 索引名(属性名 [长度] [asc|desc]) ;
create table table_name(
列名 列的类型 列的约束,
列名 列的类型 列的约束,
unique index|key [索引名](属性名 [长度] [asc|desc])
)
create unique index 索引名 on 表名(属性名 [长度] [asc|desc]);
alter table table_name add unique index|key 索引名(属性名 [长度] [asc|desc]);
create table table_name(
列名 列的类型 [列的约束],
列名 列的类型 [列的约束],
fulltext index|key [索引名](属性名 [长度] [asc|desc])
)
create fulltext index 索引名 on 表名(属性名 [长度] [asc|desc]);
alter table table_name add fulltext index|key 索引名(属性名 [长度] [asc|desc]);
create table table_name(
列名 列的类型 [列的约束],
列名 列的类型 [列的约束],
.....
index|key [索引名](属性名 [长度] [asc|desc],
属性名 [长度] [asc|desc])
)
create table table_name on 表名(属性名 [长度] [asc|desc],
属性名 [长度] [asc|desc]);
alter table table_name add index|key 索引名(属性名 [长度] [asc|desc], 属性名 [长度] [asc|desc]);
drop index index_name on table_name;
未来提高复杂SQL语句的复用性和表操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟表,其内容与真实的表相似,包含一些列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值形式存在。行和列数据来自定义视图的查询所引用的基本表,并且再具体引用视图时动态生成。
create view view_name as 查询语句;
show table status语句查看视图详细信息
show table status [form db_name] [like 'pattern'];
或者
show table status form db_name \G
show create view view_name;
或者
show create view view_name \G
describe | desc view_name;
删除一个或者多个视图
drop view view_name1 [,view_name2]....
alter view view_name as 查询语句;
触发器(TRIGGER)是MySQL的数据库对象之一,该对象与编程语言中的很函数类似,都需要声明、执行等,触发器是由时间出发激活的从而实现执行的。
create trigger trigger_name
before | after trigger_event
on table_name for each row trigger_stmt;
create trigger trigger_name
before | after trigger_event
on table_name for each row
begin
trigger_stmt1;
trigger_stmt2;
end
$$
delimiter;
show triggers \G
执行SQL语句SELECT,查看系统表triggers中的所有记录
select * from triggers \G
插叙指定触发器的详细信息
select * from triggers where trigger_name='触发器的名称' \G
drop trigger trigger_name;
insert into table_name(field1,field2...) values(value1,value2...);
insert into table_name(field1,field2...) values(value1,value2...),
(value1,value2...),
(value1,value2...);
insert into table_name1(field1,field2...)
select (field1,field2...)
from table_name2
where ...;
update table_name
set field1=value2,
field1=value2
where condition;
update table_name
set field1=value2,
field1=value2;
delete from table_name where condition;
delete from table_name;
select * from table_name;
select field1 as 列别名,field2 as 列别名
from table table_name as 表别名;
或者
select field1 列别名,field2 列别名
from table table_name 表别名;
select distinct * from table_name;
+、-、*、/或者div、%或者mod
>、<、=、!=或者<>、>=、<=
and或者&&、or或者||,or、not或者!
between...and...
not between...and...
is null
is not null
in(value1,value2,value3...)
not in(value1,value2,value3...)
select * from table_name order by field desc;
select * from table_name order by field1 desc
field2 asc;
select * from table_name where condition
limit offset_start,row_count;
注意:如果所操作的表没有任何数据记录,则count()函数返回数据为0,其他则返回null。
实现多个字段分组查询
select * from group_concat(field),function(field)
from table_name
where condition
group by field1,field2...;
select function(field) from table_name
where condition
group by field1,field2...
having condition;
select ... from ... where ... group by ... having ... order by;
select * from table_name1 cross join table_name2;
或者
select * from table_name1,table_name2;
显示内连接
select * from table_name1 inner join table_name2 on table_name1.field=table_name2.field where condition;
隐式内连接
select * from table_name1,table_name2 where condition;
左外连接
select * from table_name1 left outer join table_name2 on table_name.field1=table.name2.field2 where 条件;
右外连接
select * from table_name1 right outer join table_name2 on table_name.field1=table.name2.field2 where 条件;