数据库是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库(存储数据的仓库)
把数据库技术引入到计算机网络系统中,借助于网络技术将存储于数据库中的大量信息及时发布出去,而计算机网络借助于成熟的数据库技术对网络中的各种数据进行有效管理,并实现用户与网络中数据库进行实时动态数据交互
层次结构模型实质上是一种有根结点的定向有序树(数学中‘树’是无回的连通图)
关系数据库,建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
数据库的另一种区分方式:基于存储介质
存储介质分为两种:磁盘和内存
关系型数据库:存储在磁盘
非关系型数据库:存储在内存中
建立在关系模型基础上的数据库,关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成
关系数据结构:指的数据以什么方式来存储,是一种二维表的形式存储
本质:二维表
关系操作集合:如何来关联和管理对应的存储数据,SQL指令
获取张三的年纪,已知条件为姓名
select 年龄 from 二维表 where 姓名 = 张三
关系完整性约束:数据内部有对应的关联性关系,以及数据与数据之间也有对应的关联性关系
表内约束:对应的具体列只能放对应的数据(不能乱放)
表间约束:自然界各实体都是有着对应的关联关系(外键)
小型关系型数据库:microsoft access;sqlite
中型关系型数据库:sql server;MySQL
大型关系型数据库:oracle;DB2
SQL:结构化查询语言,一种特殊目的的编程语言,一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统,同时也是数据库脚本文件的扩展名(专门为关系型数据库设计出来的)
1.数据查询语言:
专门用于查询数据:指令为select / show
2.数据操作语言:
专门用于写数据:指令为insert / update和delet
3.事务处理语言:
专门用于事务安全处理:transaction
4.数据控制语言:
专门用于权限管理:grant / revoke
5.数据定义语言:
专门用于结构管理:creat / drop(alter)
数据库是数据存储的最外层(最大单元)
基本语法:creat database 数据库名字[库选项];
库选项:数据库的相关属性
字符集:charset字符集,代表着当前数据库下所有表存储的数据默认指定的字符集(如果当前不指定,那么采用DBMS默认的)
校对集:collat校对集
creat database 数据库名字 charset 字符集名称
每当用户通过SQL指令创建一个数据库,系统就会产生一个对应的存储数据的文件夹(data)
其实每个数据库文件夹下,都有一个opt文件,保存的是对应的数据库选项
显示全部:
基本语法:show databases;
显示部分:
基本语法: show databases like'匹配模式';
_:匹配当前位置单个字符
%:匹配指定位置多个字符
获取以my开头的全部数据库:‘my%’;
获取m开头,后面第一个字母不确定,最后为database的数据库:‘m_database’;
获取以database结尾的数据库:‘%database’;
显示数据库创建语句:
基本语法:show creat database 数据库名字;
选择数据库:
数据是存储到数据表的,表存在数据库下,要操作数据,必须进入相应的数据库
基本语法:use 数据库名字;
修改数据库:
修改数据库字符集(库选项),字符集和校对集
基本语法:alter database 数据库名字 charset = 字符集
一旦修改成功,对应的opt文件就会体现
5.5之前可以rename修改数据库名字,5.5之后不可以修改数据库名字
删除数据库:
基本语法:drop database 数据库名字;
删除虽简单,切记做好安全操作,确保里面的数据没问题(重要)
删除数据库之后对应存储数据的文件夹也被删除(opt文件也被删除)
(一).普通创建表:
基本语法:creat table 表名(字段名 字段类型 [字段属性],字段名 字段类型 [字段属性]...)[表选项]
以上错误说明,表必须放到对应的数据库下,有两种方式可以将表挂入到指定的数据库下:
1.在数据表名字前面加上数据库名字,用“.”连接即可:数据库.数据表
2.在创建数据表之前,先进入到某个具体的数据库即可,use 数据库名字;
表选项:与数据库选项类似
engine:存储引擎,MySQL提供的具体存储数据的方式,默认有一个innodb(5.5以前默认是mylsam)
charset:字符集,只对当前自己的表有效(级别高于数据库)
collate:校对集
(二).复制已有表结构:
从已经存在的表复制一份(只复制结构:如果表中有数据不复制)
基本语法:creat table 新表名 like 表名;
//只要使用数据库.数据表,就可以在任何数据库下访问其他数据库的表名
每当一张数据表创建,那么就会在对应的数据库下创建一些文件(与存储引擎有关)
注意:这个结构文件来自于innodb存储引擎,innodb存储引擎所有的文件都存储在外部的ibdata文件中
基本语法:show tabales;
基本语法:show tables like '匹配模式';
本质含义:显示表中所包含的字段信息(名字,类型,属性等)
describe 表名
desc 表名
show columns from 表名
查看数据表创建时的语句,此语句看到的结果已经不是用户之前自己输入的
基本语法:show creat table 表名;
MySQL中有多种语句结束符:
;和\g表示的效果一样,都是字段在上排横着,下面跟对应的数据
\G字段在左侧竖着,数据在右侧横着
表属性指的就是表选项,engine、charset和collate
基本语法:alter table 表名 表选项 [=] 值;
注:如果数据库已经确定了,里面有很多数据了,不要轻易修改表选项(字符集影响不大)
修改表名:rename table 旧表名 to 新表名;
修改表选项:alter table 表名 表选项 [=] 新值;
新增字段:alter table 表名 add [column] 新字段名 列类型 [列属性] [位置first / after字段名]
【字段位置:字段想要存放的位置】
first:在某某之前(最前面),第一个字段
after 字段名:放在某个具体字段之后(默认)
修改字段名:alter table 表名 change 旧字段名 新字段名 字段类型 [列属性] [新位置]
修改字段类型(属性):alter table 表名 modify 字段名 新类型 [新属性] [新位置]
删除字段:alter table 表名 drop 字段名
基本语法:drop table 表名 [,表名2...],可以同时删除多个数据表
本质含义:将数据以sql的形式存储到指定的数据表(字段)里面
基本语法:向表中指定字段插入数据 insert into 表名 [(字段列表)] values (对应字段列表)
注意:1.后面(values中)对应的值列表只需要与前面的字段列表相对应即可(不一定与表结构完全一致)
2.字段列表并不一定非要有所有的表中字段
基本语法:向表中全部字段插入数据 insert into 表名 values(对应表结构)
//值列表必须与字段列表一致
查询表中全部数据:select * from 表名; //*表示匹配所有字段
查询表中部分字段:select 字段列表 from 表名; //字段列表使用“,”隔开
简单条件查询数据:select 字段列表/* from 表名 where 字段名 = 值; //MySQL中没有--符号进行比较
基本语法:delete from 表名 [where 条件]; //如果没有where条件,系统会自动删除该表所有数据(慎用)
更新:将数据进行修改(通常是修改部分字段数据)
基本语法:update 表名 set 字段名 = 新值 [where 条件]; //如果没有where条件,那么所有的表中对应的那个字段都会被修改为统一值
注:名字为一个字符串,Han需要用‘’包含
在计算机中看到的任何内容都是字符构成的
字符编码:计算机针对各种符号的一种二进制存储代号
字符集是多个字符的集合,字符集种类很多
如果直接通过cmd下的mysql.exe进行中文数据插入,可能出错
出错原因:
1.用户是通过mysql.exe来操作mysqld.exe的
2.真正的SQL执行是mysqld.exe执行
3.mysql.exe将数据传入mysqld.exe的时候,没有告知其对应的符号规则(字符集),而mysqld.exe也没有能力自己判断,就会使用自己默认的(字符集)
解决方案:mysql.exe客户端在进行数据操作之前将自己所使用的字符集告诉mysqld.exe
快捷方式:set names 字符集
重新进行数据插入:中文(GBK)
在系统中有三个变量来记录着这三个关系对应的字符集:show variables like 'character_set_%'
修改服务器变量的值:
set 变量名 = 值;