什么是数据库?
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
RDBMS 术语
在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余可以使系统速度更快。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
常用数据库软件
Oracle 甲骨文
SqlServer 微软
DB2 IBM
MySQL 甲骨文 中小型
SQLite、FireBird 小型
非关系型数据库:
Radis
MongoDB....
Mysql数据库
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
Mysql是开源的,所以你不需要支付额外的费用。
Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
MySQL使用标准的SQL数据语言形式。
Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
SQL(Structured Query Language)结构化查询语言。是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
在cmd中输入此命令进行数据库操作
mysql -u root -p
常用数据库命令:
1.查询所有数据库
SHOW DATABASES;
show databases;
2.创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
eg: CREATE DATABASE db604;
create database if not exists db106
创建数据库时指定字符集
CHARACTER SET charset_name?
COLLATE collation_name
CHARACTER SET:指定数据库采用的字符集
COLLATE:指定数据库字符集的比较方式(校对规则)
eg:
->CREATE DATABASE IF NOT EXISTS db604
-> character set utf8
-> collate utf8_general_ci;
3.显示数据库创建语句【查看数据库字符集】
SHOW CREATE DATABASE db_name;
eg: show create database db604;
4.删除数据库
DROP DATABASE [IF EXISTS] db_name
eg: drop database db604;
表命令:
切换使用的数据库
USE db_name;
eg:use db604;
1.查看所有表table
SHOW TABLES;
2.创建表
CREATE TABLE 【if not exists】 table_name
(
field1 datatype,
field2 datatype,
field3 datatype
);
char() 固定长度
varchar() 可变长度
field:字段名 datatype:字段类型
eg: create table user(id int,name varchar(10),age int);
3.查看表结构
SHOW create table 表名 --->查看创建表语句
DESC table_name; ---->查看表结构
eg: desc user; description
4.删除表
DROP TABLE table_name;
eg:drop table user;
5.修改表
Alter table 表名 add|drop|modify|change column 列名、类型等信息
添加字段(添加列)
mysql> alter table user add column sex varchar(5);
删除列
mysql> alter table user drop column age;
修改字段类型
mysql> alter table user modify column sex char(8);
修改字段名称
change column 原来的列名 新的名称 类型
mysql> alter table user change column sex gender varchar(10);
修改表名
mysql> alter table user rename to student;
mysql> rename table user to student;
数据库操作语句(增删改数据)
1.插入数据
INSERT INTO table_name (列名) VALUES (值);
insert into
[如果不写列名,values后面必须给表中的所有列赋值,并且和列一一对应]
eg: insert into user(id,name,age) values(1,'zhangsan',20);
insert into user values(1,'zhangsan','男',20);
2.修改数据
UPDATE table_name SET col_name1 = 值 ,col_name2 = 值2
[WHERE where_definition]
eg:update user set name ='zhaoliu' ;
3.删除数据
delete from table_name
[WHERE where_definition]
eg: delete from user where id = 1;
查询数据
1.查询所有数据库
SELECT * from table_name;
eg:select * from user;
2.查询指定列数据
SELECT 列名,列名,列名 from table_name;
eg:select id, name from user;
3.查询时指定常量列(别名)
SELECT 列名 as 别名 from table_name;
as 可以不写
eg: mysql> select id, name as 姓名 from user;
mysql> select id, name 姓名 from user;
4.查询时去除重复数据 DISTINCT
eg: select distinct id,name from user;
5.查询时合并
eg: select id,name,age,java+math from user;
select id,name,age,java+math as total from user;
6.按条件查询 WHERE
eg: select * from user where id =2;
a 逻辑条件查询,涉及多个条件 and &&(与) or(或)
eg: select * from user where id =2 and name = 'lisi';
select * from user where name ='lisi' or age = 22;
b 比较条件查询 > 、 >= 、< 、<= 、= 、<> , between and(谁和谁之间)
eg: select * from user where id<>2;
eg: select * from user where id>2;
eg: select * from user where id>=2;
eg: select * from user where id between 2 and 5;
c 判断是否为null(null表示没有数据)
mysql> select * from user where age is null;
mysql> select * from user where age is not null;
d 模糊查询 like
%通配符,可以匹配多个字符
_通配符,匹配一个字符
mysql> select * from user where name like 'zhao%';
mysql> select * from user where name like '%s%';
mysql> select * from user where name like 'zhaos_';
7 通过聚合函数查询
a计算表中有多少条数据(行)count
eg: select count(*) from user;
如果某些行对应的列没有数据,不计算到总数里
eg: select count(age) from user;
b求平均值 avg
eg:select avg(age) from user;
c求最大值和最小值
eg: select min(age) from user;
eg: select max(age) from user;
d求和 sum
mysql> select sum(age) from user;
--sum() 该列所有数据总和
--+ 该行数据相加的和
8.排序 order by
eg: select * from user order by age;
eg: select * from user where age is not null order by age;
desc表示降序,asc表示升序,默认升序
eg: select * from user where age is not null order by age desc;
可以指定多个排序的字段,例如先按照age排序,相同的age值再使用id排序
eg:select * from user where age is not null order by age,id;
eg:select * from user where age is not null order by age desc,id desc;
9 分组查询 group by
eg: select gender, count(*) from user group by gender;
eg:select gender,count(*) from stu group by gender order by gender desc;
having 对分组后的数据进行筛查
where 放在分组前使用
mysql> select gender,count(*) from user where age is not null group by gender having count(*)>1 order by gender desc;
10 分页查询 limit
Limit 从哪个位置开始查(索引从0开始计数), 查询多少条数据
mysql> select * from user limit 3,3;
表示从0位置开始查询3条数据
mysql> select * from user limit 3;
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,
每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理的大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS即关系数据库管理系统(Relational Database Management System)的特点:
1.数据以表格的形式出现
2.每行为各种记录名称
3.每列为记录名称所对应的数据域
4.许多的行和列组成一张表单
5.若干的表单组成database
RDBMS 术语
在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余可以使系统速度更快。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
常用数据库软件
Oracle 甲骨文
SqlServer 微软
DB2 IBM
MySQL 甲骨文 中小型
SQLite、FireBird 小型
非关系型数据库:
Radis
MongoDB....
Mysql数据库
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
Mysql是开源的,所以你不需要支付额外的费用。
Mysql支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
MySQL使用标准的SQL数据语言形式。
Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
Mysql对PHP有很好的支持,PHP是目前最流行的Web开发语言。
MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。
Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
SQL(Structured Query Language)结构化查询语言。是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
在cmd中输入此命令进行数据库操作
mysql -u root -p
常用数据库命令:
1.查询所有数据库
SHOW DATABASES;
show databases;
2.创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
eg: CREATE DATABASE db604;
create database if not exists db106
创建数据库时指定字符集
CHARACTER SET charset_name?
COLLATE collation_name
CHARACTER SET:指定数据库采用的字符集
COLLATE:指定数据库字符集的比较方式(校对规则)
eg:
->CREATE DATABASE IF NOT EXISTS db604
-> character set utf8
-> collate utf8_general_ci;
3.显示数据库创建语句【查看数据库字符集】
SHOW CREATE DATABASE db_name;
eg: show create database db604;
4.删除数据库
DROP DATABASE [IF EXISTS] db_name
eg: drop database db604;
表命令:
切换使用的数据库
USE db_name;
eg:use db604;
1.查看所有表table
SHOW TABLES;
2.创建表
CREATE TABLE 【if not exists】 table_name
(
field1 datatype,
field2 datatype,
field3 datatype
);
char() 固定长度
varchar() 可变长度
field:字段名 datatype:字段类型
eg: create table user(id int,name varchar(10),age int);
3.查看表结构
SHOW create table 表名 --->查看创建表语句
DESC table_name; ---->查看表结构
eg: desc user; description
4.删除表
DROP TABLE table_name;
eg:drop table user;
5.修改表
Alter table 表名 add|drop|modify|change column 列名、类型等信息
添加字段(添加列)
mysql> alter table user add column sex varchar(5);
删除列
mysql> alter table user drop column age;
修改字段类型
mysql> alter table user modify column sex char(8);
修改字段名称
change column 原来的列名 新的名称 类型
mysql> alter table user change column sex gender varchar(10);
修改表名
mysql> alter table user rename to student;
mysql> rename table user to student;
数据库操作语句(增删改数据)
1.插入数据
INSERT INTO table_name (列名) VALUES (值);
insert into
[如果不写列名,values后面必须给表中的所有列赋值,并且和列一一对应]
eg: insert into user(id,name,age) values(1,'zhangsan',20);
insert into user values(1,'zhangsan','男',20);
2.修改数据
UPDATE table_name SET col_name1 = 值 ,col_name2 = 值2
[WHERE where_definition]
eg:update user set name ='zhaoliu' ;
3.删除数据
delete from table_name
[WHERE where_definition]
eg: delete from user where id = 1;
查询数据
1.查询所有数据库
SELECT * from table_name;
eg:select * from user;
2.查询指定列数据
SELECT 列名,列名,列名 from table_name;
eg:select id, name from user;
3.查询时指定常量列(别名)
SELECT 列名 as 别名 from table_name;
as 可以不写
eg: mysql> select id, name as 姓名 from user;
mysql> select id, name 姓名 from user;
4.查询时去除重复数据 DISTINCT
eg: select distinct id,name from user;
5.查询时合并
eg: select id,name,age,java+math from user;
select id,name,age,java+math as total from user;
6.按条件查询 WHERE
eg: select * from user where id =2;
a 逻辑条件查询,涉及多个条件 and &&(与) or(或)
eg: select * from user where id =2 and name = 'lisi';
select * from user where name ='lisi' or age = 22;
b 比较条件查询 > 、 >= 、< 、<= 、= 、<> , between and(谁和谁之间)
eg: select * from user where id<>2;
eg: select * from user where id>2;
eg: select * from user where id>=2;
eg: select * from user where id between 2 and 5;
c 判断是否为null(null表示没有数据)
mysql> select * from user where age is null;
mysql> select * from user where age is not null;
d 模糊查询 like
%通配符,可以匹配多个字符
_通配符,匹配一个字符
mysql> select * from user where name like 'zhao%';
mysql> select * from user where name like '%s%';
mysql> select * from user where name like 'zhaos_';
7 通过聚合函数查询
a计算表中有多少条数据(行)count
eg: select count(*) from user;
如果某些行对应的列没有数据,不计算到总数里
eg: select count(age) from user;
b求平均值 avg
eg:select avg(age) from user;
c求最大值和最小值
eg: select min(age) from user;
eg: select max(age) from user;
d求和 sum
mysql> select sum(age) from user;
--sum() 该列所有数据总和
--+ 该行数据相加的和
8.排序 order by
eg: select * from user order by age;
eg: select * from user where age is not null order by age;
desc表示降序,asc表示升序,默认升序
eg: select * from user where age is not null order by age desc;
可以指定多个排序的字段,例如先按照age排序,相同的age值再使用id排序
eg:select * from user where age is not null order by age,id;
eg:select * from user where age is not null order by age desc,id desc;
9 分组查询 group by
eg: select gender, count(*) from user group by gender;
eg:select gender,count(*) from stu group by gender order by gender desc;
having 对分组后的数据进行筛查
where 放在分组前使用
mysql> select gender,count(*) from user where age is not null group by gender having count(*)>1 order by gender desc;
10 分页查询 limit
Limit 从哪个位置开始查(索引从0开始计数), 查询多少条数据
mysql> select * from user limit 3,3;
表示从0位置开始查询3条数据
mysql> select * from user limit 3;