数据库简介:

什么是数据库?

数据库就是一个文件系统,但是访问的时候需要使用标准SQL语句来访问数据。

关系型数据库

存储的都是实体与实体之间的关系。

可以通过ER模型图来描述之间的关系

•画图描述

常见的数据库

Oracle  :甲骨文公司的数据库产品,大型的收费的数据库。

SQLServer  :微软公司的数据库产品,中型的收费的数据库。

MySQL  :是开源的,免费的数据库产品。在5.x版本是免费的,6.x是收费的。

DB2  :IBM公司的数据库产品,大型的收费的数据库。

SyBASE  :已退出了历史舞台,PowerDigener(数据库建模工具)

MySQL的卸载

1.先到MySQL的安装路径,找到my.ini的配置文件,找到两个路径basedir和datadir

basedir是MySQL安装路径,datadir是MySQL数据存放位置

2. 然后卸载数据库,再找到上两个路径删除文件夹。

3.直接通过控制面板下载程序

使用命令行窗口连接MYSQL数据库

•mysql –u用户名 –p密码

MySQL数据库Root密码重置(见资料)

MySQL数据库服务器、数据库和表关系:

所谓安装数据库服务器,只是在机器上装了一个数据库管理程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

为保存应用中实体的数据,一般会在数据库创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如图所示:

数据在数据库中的存储方式

SQL语言:

SQL:Structured Query Language, 结构化查询语言

特点:非过程性语言

•过程性语言:当前的这条语句执行需要依赖于上一条或几条语句

•非过程性语言:可一条语句,就会执行一个结果。

为加强SQL的语言能力,各厂商增强了过程性语言的特征

•如Oracle的PL/SQL 过程性处理能力

•SQL Server、Sybase的T-SQL

SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能

SQL分类:

DDL (数据定义语言)

•数据定义语言 - Data Definition Language

•用来定义数据库的对象,如数据表、视图、索引等

DML  (数据操纵语言)

•数据处理语言 - Data Manipulation Language

•在数据库表中更新,增加和删除记录

•如 update, insert, delete

DCL (数据控制语言)

•数据控制语言 – Data Control Language

•指用于设置用户权限和控制事务语句

•如grant,revoke,if…else,while,begin transaction

DQL (数据查询语言)

•数据查询语言 – Data Query Language

创建数据库:

CREATE  DATABASE  [IF NOT EXISTS] db_name

[create_specification [, create_specification] ...]

create_specification:

[DEFAULT] CHARACTER SET charset_name

|   [DEFAULT] COLLATE collation_name

CHARACTER SET:指定数据库采用的字符集

COLLATE:指定数据库字符集的比较方式

查看、删除数据库:

显示数据库语句:

SHOW DATABASES

显示数据库定义信息:

SHOW CREATE DATABASE db_name

数据库删除语句:

DROP DATABASE  [IF EXISTS]  db_name

修改数据库:

ALTER  DATABASE  [IF NOT EXISTS] db_name

[alter_specification [, alter_specification] ...]

alter_specification:

[DEFAULT] CHARACTER SET charset_name

|   [DEFAULT] COLLATE collation_name

切换数据库 use db_name;

查看当前使用的数据库 select database();

创建表(基本语句):

CREATE TABLE table_name

field1  datatype,

field2  datatype,

field3  datatype,

)character set 字符集 collate 校对规则

field:指定列名 datatype:指定列类型

注意:创建表时,要根据需保存的数据创建相应的列,并根据数据的类型定义相应的列类型。例:user对象

id        int

name string

password string

birthday date

MySQL常用数据类型:

字符串型

•VARCHAR、CHAR

大数据类型

•BLOB、TEXT

•TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE

•DATE、TIME、DATETIME、TIMESTAMP

定义单表字段的约束:

作用:约束用来保证数据有效性和完整性 。

定义主键约束

主键约束 primary key : 信息记录某个字段可以唯一区分其他信息记录,这个字段就可以是主键 (唯一 非空)

primary key:不允许为空,不允许重复

删除主键:alter table tablename drop primary key ;

主键自动增长 :auto_increment

定义唯一约束

例如:name varchar(20) unique

定义非空约束

例如:salary double not null

其他表操作:

数据表删除

•语法:drop table 表名;

查看数据表结构

•desc 表名; 查看表结构

•show tables ; 查看当前库内所有表名

•show create table 表名; 查看建表语句和字符集

修改表:

使用 ALTER TABLE 语句追加, 修改, 或删除列的语法.

ALTER TABLE table

ADD   (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE table

MODIFY   (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE table

DROP      (column);

修改表的名称:rename table 表名 to 新表名;

修改列的名称: change  旧列名 新列名 类型(长度) 约束;

修改表的字符集:alter table student character set utf8;

数据库CRUD语句:

lnsert语句    (增加数据)

Update语句  (更新数据)

Delete语句   (删除数据)

Select语句 (查找数据)

Insert语句:

使用 INSERT 语句向表中插入数据。

INSERT INTOtable [(column [, column...])]

VALUES(value [, value...]);

插入的数据应与字段的数据类型相同。

数据的大小应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。

在values中列出的数据位置必须与被加入的列的排列位置相对应。

字符和日期型数据应包含在单引号中。

插入空值:不指定或insert into table values (null)

mysql中文乱码:

mysql有六处使用了字符集,分别为:client 、connection、database、results、server 、system。

•client是客户端使用的字符集。

•connection是连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型就按照服务器端默认的字符集设置。

•database是数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。

•results是数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。

•server是服务器安装时指定的默认字符集设定。

•system是数据库系统使用的字符集设定。(utf-8不可修改)

show variables like 'character%';

通过修改my.ini 修改字符集编码,重启MySQL的服务

Update语句:

使用 update语句修改表中数据。

UPDATE tbl_name

SET col_name1=expr1 [, col_name2=expr2 ...]

[WHERE where_definition]

UPDATE语法可以用新值更新原有表行中的各列。

SET子句指示要修改哪些列和要给予哪些值。

WHERE子句指定应更新哪些行。如没有WHERE子句,则更新所有的行。

Delete语句:

使用 delete语句删除表中数据。

delete from tbl_name

[WHERE where_definition]

如果不使用where子句,将删除表中所有数据。

Delete语句不能删除某一列的值(可使用update)

使用delete语句仅删除记录,不删除表本身。如要删除表,使用drop table语句。

同insert和update一样,从一个表中删除记录将引起其它表的参照完整性问题,在修改数据库数据时,头脑中应该始终不要忘记这个潜在的问题。

外键约束

删除表中数据也可使用truncate table 语句,它和delete有所不同,参看mysql文档。

Select语句:

基本select语句

SELECT [DISTINCT] *|{column1, column2. column3..}

select 指定查询哪些列的数据。

column指定列名。

*号代表查询所有列。

from指定查询哪张表。

DISTINCT可选,指显示结果时,是否剔除重复数据

在select语句中可使用表达式对查询的列进行运算

SELECT *|{column1|expression, column2|expression,..}

在select语句中可使用as语句

SELECT column as 别名 from 表名;

在where子句中经常使用的运算符:

Like语句中,% 代表零个或多个任意字符,_ 代表一个字符,例first_name like ‘_a%’;

使用order by 子句排序查询结果:

SELECT column1, column2. column3..

order by column asc|desc

Order by 指定排序的列,排序的列即可是表中的列名,也可以是select 语句后指定的列名。

Asc 升序、Desc 降序

ORDER BY 子句应位于SELECT语句的结尾。

聚集函数-count:

Count(列名)返回某一列,行的总数

Select count(*)|count(列名) from tablename

[WHERE where_definition]

聚集函数-SUM:

Sum函数返回满足where条件的列的和(忽略NULL)

Select sum(列名){,sum(列名)…} from tablename

[WHERE where_definition]

注意:sum仅对数值起作用,否则会报错。

注意:对多列求和,“,”号不能少。

ifnull(xxx,0) 如果为null,则值是0

聚集函数-AVG:

AVG函数返回满足where条件的一列的平均值

Select sum(列名){,sum(列名)…} from tablename

[WHERE where_definition]

聚集函数-MAX/MIN:

Max/min函数返回满足where条件的一列的最大/最小值

Select max(列名)from tablename

[WHERE where_definition]

使用group by 子句对列进行分组:

SELECT column1, column2. column3.. FROMtable;

group by column having ...

Having和where均可实现过滤,但在having可以使用聚集函数,where不能使用聚集函数,having通常跟在group by后,它作用于分组

备份、恢复数据库:

备份数据库表中的数据

cmd> mysqldump -u 用户名 -p 数据库名 > 文件名.sql

恢复数据库(前提创建空的数据库,并且use)

source 文件名.sql   // 在mysql内部使用

mysql –u 用户名 p 数据库名 < 文件名.sql  // 在cmd下使用

其他技术分享链接: