什么是数据库
存储数据的仓库
为什么使用数据库
实现数据的持久化操作
1,操作文件 效率低 尤其是远程文件 2,使用数据库
常见的数据库
关系型数据库:
1,Oracle 甲骨文 Oracle 收费的 稳当,数据安全,支持的数据量大 2,Mysql 现在也属于甲骨文下的产品,目前mysql免费的,轻量级的数据库,也支持千万级的数据,集群 3,SqlServer 微软公司的产品 C# 4,Access ....
非关系型(nosql)数据库:
redis
mongdb
数据之间存在一定的关联关系:
1,一对一
2,一对多 多对一
3,多对多
MySQL介绍
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型和大型网站的开发都选择 MySQL 作为网站数据库。
MySQL有哪些优点
1,具备可移植性
2,跨平台,支持多种操作系统
4, 支持多线程
5, 优化的 SQL查询算法,有效地提高查询速度
6, MySQL 是开源的,所以你不需要支付额外的费用
7, 支持多种存储引擎 5.5之前默认使用MYISAM , 5.5开始默认使用InnoDB(支持事务)
-
支持集群
SQL语句
结构化查询语言
在mysql中不区分大小写
人和数据库沟通的语言,开发人员给数据库下达的命令
数据定义语言DDL
建库建表等表结构操作
-- 登录命令 mysql -u用户名 -p mysql -uroot -p123456
数据库操作
-- 创建数据库 -- create database 数据库名 create database mydb; 数据库名:不能使用关键字,不能使用全数字 非要使用关键字 `关键字` -- 查看数据库 show databases; -- 删除数据库(慎用) drop database 数据库名
用表进行数据管理
表是由行和列组成
行:数据
列: 标题名称,数据类型
在mysql中,数据类型分为三大类: 字符串,数字,时间
java:String
MySQL操作命令
数据库
创建数据库
create database 数据库名
数据库名不能使用关键字,不能使用全数字
非要使用关键字 数据库名
数据库语言不区分大小写
CHARACTER SET:指定数据库采用的字符集,如果不指定字符集,默认utf-8
COLLATE:指定数据库字符集的校对规则(常用的utf8_bin、utf8_general_ci 注意默认是utf8_general_ci)
创建一个使用utf8字符集,并带校对规则的数据库
CREATE DATABASE hsp_db03 CHARACTER SET utf8 COLLATE utf8
校对规则utf8_bin区分大小 默认utf8_general_ci 不区分大小写
查询sql,sselect 查询 * 表示所有字段
SELECT * FROM t1 WHERE NAME = ‘tom’
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name
数据库删除语句:
DROP DATABASE [IF EXISTS] db_name
备份数据库
mysqldump -u 用户名(root) -p-B数据库1 数据库2 数据库n > 文件名.sql
恢复数据库
source 文件名.sql
表创建删除修改
切换数据库:use 数据库名
CREATE TABLE table_name
(field1 datatype,field2 datatype,field3 datatype)
collate 校对规则 engine引擎
field:指定列名 datatype:指定列类型(字段类型)
character set:如不指定则为所在数据库字符集
collate:如不指定则为所在数据库校对规则、
engine:存储引擎
desc 表名字:查看表结构
drop table 表名:删除表名
MySQL列类型-数据类型
数值类型
整形:tinyint[1个字节]、smallin[2个字节]、mediumint[3个字节]、int[4个字节]、bigint[8个字节]
小数类型:float[单精度 4个字节]、double[双精度 8个字节]、decimalM,D
文本类型(字符串类型):char 0--255(固定长度文本)、varchar 0-65535(可变长度文本)、text 0~2^16-1、longtext 0~2^32-1
二进制数据类型:blob[0~2^16-1]、longblob[0~2^32-1]
日期类型:date【日期 年月日】、time【时间 时分秒】、datetime【年月日时分秒 YYYY-MM-DD HH:mm:ss】、timestamp【时间戳】、year【年】
如何定义一个无符号的整数?
create table t10(id tinyint);//默认是有符号的
create table t10(id tinyint unsigned);//无符号的
insert into t4 values(255)
bit类型(二进制显示)
1.bit(m)m范围在 1-64字节
2.添加数据 范围 比如m=8 表示一个字节 0~255
3.显示按照bit
create table t05 (num bit(8));
数值型(小数)的基本使用
decimalM,D
M默认10,D默认0
M是小数位数(精度)的总数,D是小数点(标度)后面的位数。
数据库:文本
char(长度):固定长度文本 varchar(长度):可变长度文本 TEXT:字符串较多的文本,如:微博新闻的内容等...
java:int long byte short double float
数据库:数字
整数:int(size) 小数:FLOAT(size,d) ,DECIMAL(size,d),double(size,d)
时间:
java:java.util.Date
数据库:时间
Date():年月日 DATETIME() 年月日,时分秒
表操作
-- 使用数据库 use mydb; -- 创建表 create table 表名( 字段名1 数据类型 约束, 字段名2 数据类型 ) create table userInfo( userName varchar(20), userAge int(3), phoneNum char(11), birthDay date ); -- 查看表数据结构 desc userinfo -- 删除表 drop table 表名 -- 修改表名 ALTER TABLE 原表名 RENAME 现表名
约束
使数据具备完整性,不产生垃圾数据,从而提高执行效率
主键约束:
不能为null,具有唯一性 扩展:主键自带主键索引,可提高查询效率
create table userInfo2( userId int primary key, userName varchar(20) ) create table userInfo2( userId int, userName varchar(20), primary key(userId) ) 设置列为主键Alter table 表名 add primary key(`字段`); --修改某列为主键 设置列为自增ALTER TABLE 表名 MODIFY 列名 INT() AUTO_INCREMENT
联合主键:
多列作为主键,多列数据组合在一起唯一
自动增长:
auto_increment 默认从1开始,以1递增
Oracle里面没有自动增长的关键字,是要单独创建序列来维护自动增长列的值
外键约束:
主外键关联
一对一
如:一个人对应一个身份证,一夫一妻
一对多
如:用户和银行卡
反过来是多对一
多对多
一个用户可以购买多个产品,一个产品可以被多个人购买
外键列就具备外键约束
外键列的值只能引用主键表中主键列已有的数据 添加或者修改和删除数据时会对外键列的值进行验证(完整性和有效性)
create table bank ( id int primary key auto_increment, no varchar(20), userId int, -- FOREIGN key(外键列) REFERENCES 其他表(主键列) FOREIGN key(userId) REFERENCES userinfo3(userId) )
唯一约束:
值不可重复,可以为null create table userInfo4( userId int, userName varchar(20) UNIQUE, primary key(userId) ) create table userInfo5( userId int, userName varchar(20), primary key(userId), UNIQUE(userName) )
非空约束:
-- 非空约束 create table userInfo6( userId int PRIMARY key auto_increment, userName varchar(20) not null )
默认约束:
create table userInfo8( userId int PRIMARY key auto_increment, userName varchar(20) not null, sex char(1) default 'M', registerTime datetime default now() )
检查约束 (mysql不生效,也不报错)
create table userInfo9( userId int PRIMARY key auto_increment, userName varchar(20) not null, age int check(age>0 and age < 100) )
修改表结构
添加列
-- 添加列 -- ALTER TABLE table_name ADD column_name datatype alter table userinfo9 add sex char(1) alter table userinfo9 add sex1 char(1) default 'M' alter table userinfo9 add sex3 char(1) not null alter table bank add userId int -- 外键约束添加 alter table bank add CONSTRAINT xxx FOREIGN key(userId) REFERENCES userInfo9(userId) 在student的name字段后面增加stuno字段,数据类型为int ALTER TABLE student ADD stuno INT(11) AFTER name
修改列
-- 修改列 -- ALTER TABLE table_name -- modify COLUMN column_name datatype -- 有数据的情况下,修改后要兼容原数据 alter table userinfo9 modify column userName int 修改列名 ALTER TABLE customers CHANGE c_contact(原名) c_phone(修改后名) VARCHAR(50)(修改后数据类型)
删除列
-- 删除列 ALTER TABLE table_name DROP COLUMN column_name alter table userinfo9 drop column sex3
中文编码处理
修改my.ini
default-character-set=utf8 character-set-server=utf8
重启mysql服务
数据管理语言DML
对数据进行增、删、改操作
数据查询语言DQL
对数据进行查询操作
数据控制语言DCL
对用户管理以及权限控制