对于数据存储
,我们可以接使用文件
,但是为什么要存在数据库
,因为文件存储数据有很大的缺点
:
不利于数据查询和管理
数据
不安全控制不安全
不利于存放海量数据
存储和管理数据
,存储介质主要有磁盘和内存
。sql server
: 微软的数据库,适用于中大型项目Oracle
:全球最大的数据库使用量,java
程序员必学,适合处理复杂业务,收费的MySql
:sun
公司产品,现在也属于甲骨文,并发性好,不适合复杂的业务,免费的,主要 用在电商,SNS,论坛。对简单的SQL
处理效果好。DB2
:IBM
公司,处理海量数据,功能强悍informix
:IBM
公司,安全非常强centos 7.0下直接执行yum -y install mysql-server进行安装
service mysqld start
service mysqld stop
mysql [-h 主机] -u 用户 -p
说明:
-h
: 如果没有写-h 127.0.0.1
默认是连接本地
。如果需要登录到另外一个mysql
,则需要修改配置
,一般情况不让远程登录
-u
:表示登录的用户
,一般是root
-p
:表示登录密码
,刚开始如果自己没有设置,默认是空
,直接跳过
即可出现下面的界面,说明已经连接到数据库
数据库服务器
,只是在机器上安装了一个数据库管理程序
,这个管理程序可以管理多个数据库
,一般开发人员会针对每一个应用创建一个数据库
。实体的数据
,一般会在数据库中创建多个表
,以保存程序中实体的数据
。数据库服务器
可以存在多个数据库
,而一个数据库
也可以存在多个表
。create database 库名
use 库名
表是在库里创建的,所以要先选择库才能创建表
-- 创建表
create table 表名(
字段1 列类型1,
字段2 列类型2,
...
字段n 列类型n
);
insert into 表名(字段名1, 字段2, ...) values(values1, value2);
select * from 表名
例如:创建一个person
表,并插入一条记录
-- 创建表
create table person( name varchar(30), id int);
-- 插入记录
insert into person values('zhangsan',123);
-- 查看表中的数据
-- select * from person
DDL:create drop alter
DML:insert delete update
DQL:select
DCL:grant revoke commit
create database [if not exists] db_name
[createspecification][createspecification]
-- createspecification:
-- CHARSET(字符集,一般指定为utf8)
-- COLLATE(校验规则,数据库字符集的比较方式,默认utf8_ general_ ci,一般不指定)
字符集
:是一套表示字符的符号和这些的符号的底层编码校验规则
: 是在字符集内用于比较字符的一套规则如在某个字符集“X”
的A与a
,他们的底层编码分别是A=0,a=100
。这里符号“A”“a”
和底层编码“0”“100”
就是字符集的概念范围。假设我们要比较A与a
的大小,我们得到a>A
,因为我们是根据其底层编码进行比较的,这就是这个字符集“X”
的一种校验规则“Z”
(根据底层编码来比较)。假设,现在有另外一种校验规则,是先取其相反数,然后再比较大小,那么就很显然的得到a,这就是字符集
“X”
的另外一种校验规则“Z1”
。由此可见,一种字符集可能存在多个与之对应的校验规则(一对多关系)
-- 创建一个数据库,校验规则使用utf8_ general_ ci[不区分大小写]
-- a A b B (排序)
mysql> create database x1 collate utf8_general_ci;
-- 创建一个数据库,校验规则使用utf8_ general_ bin[区分大小写]
-- A B a b(排序)
create database x2 collate utf8_bin;
show variables like 'character_set_database'; -- 字符集
show variables like 'collation_database'; -- 校验规则
create database company1; -- 系统默认的字符集和校验规则
create database company2 charset=utf8; -- 指定为utf8字符集建库
create database company3 charset=utf8 collate utf8_general_ci; -- 指定字符集为utf8和校验规则为utf8_general_ci
show databases;
mysql> show create database mytest;
+----------+------------------------------------------------------------+ | Database | Create Database |
+----------+----------------------------------------------------------+ |
mytest | CREATE DATABASE `mytest` /*!40100 DEFAULT CHARACTER SET utf8 */| +----------+----------------------------------------------------------+
说明:
1) MySQL 建议我们关键字使用大写,但是不是必须的。
2) 数据库名字的反引号``,是为了防止使用的数据库名刚好是关键字
3) /*!40100 default.... */ 这个不是注释,表示当前mysql 版本大于4.01版本,就执行这句话
DROP DATABASE [IF EXISTS] db_ name;
-- []代表可存在也可不存在
-- 删库操作一定要慎重使用
-- 数据库内部看不到对应的数据库
-- 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删
show processlist
-- 可以查出当前有哪些用户连接到我们的MySQL,如果查出某个用户不是你正常登陆的,很有可能你的数据库被人入侵了。如果发现自己数据库比较慢时,可以用这个指令来看看数据库连接情况。
备份语法:mysqldump -u(以哪个用户去备份) -p(密码) 数据库名 > 数据库存放路径
-- 退出mysql,在shell下执行对数据库进行备份
mysqldump -u root -p msg > ./msg.bk
-- 然后进入mysql中删除原来的库
drop database msg
-- 要恢复数据库,必须先创建一个空的数据库。好和以前的数据库名字一致
create database msg
use msg
source ./msg.bk
-- 这样即可恢复原来的数据库
数据库中的一张表
,而是数据库
-- 备份到当前目录下
mysqldump -u root -p密码 数据库名 表名1 表名2 > ./msg.bk
-- 恢复
source 备份的文件路径及文件名
多个数据库
mysqldump -u root -p密码 -B 数据库名1 数据库名2 ... > 数据库存放路径
-- 同时恢复多个数据库
source 备份的文件
注意点:
source
恢复数据时,保证use
对应的数据库-B
参数,在恢复数据库
时,不需要再创建空数据库
修改库的语法:
ALTER DATABASE [IF EXISTS] db_name [alter_spacification ],[alter_spacification]
-- 对数据库的修改主要指的是修改数据库的字符集,校验规则
alter_spacification:
[DEFAULT] CHARACTER SET charset_name
[DEFAULT] COLLATE collation_name
例如:
-- 修改msg库的字符集为utf8
alter database msg charset=utf8
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明:
-- field 表示列名
-- datatype 表示列的类型
-- character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准
--collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准
create table stu1 (
id int comment '学号',
name varchar(20) comment '姓名'
) character set utf8 engine MyISAM;
desc 表名
修改表一般指的是修改某个表的结构
,比如字段名字
,字段大小
,字段类型
,表的字符集类型
,表的存储引擎
,添加字段
,删除字段
等等
# 修改表结构
-- 添加列
alter table 表名 add (filed datatype)
-- 默认插入到最后一列
alter table user add addr varchar(60);
-- after name 表示插入到name后边,但是不能用before
alter table user add gender varchar(2) after name;
-- in first 表示插入到第一列
alter table user add class int first;
-- 改变列的类型
alter table 表名 modify 列名 新类型名
alter table user modify name varchar(60)
-- 删除某列,这一列的数据全部没有,尽量不要这么做
alter table user drop 列名;
-- 改表名
alter table user rename to 新表名;
-- 修改表的字符集
alter table user charset=gbk;
-- 修改列的字符集
alter table user modify name varchar(60) charset utf8;
-- 将name列修改为xingming
alter table user change name xingming varchar(30);
注:在MYSQL
中的各类语句一般使用大写
,在本篇博文中,由于大写写起来比较难看懂
,所以就采用小写
。