基础概念:
数据库的三层模型:
物理层:数据存在物理设备上存储的组件
逻辑层:DBA工程师站在自己角度看见的样子
视图层:用户角度看到的样子
ACID:
A:原子性
C:一致性
I:隔离性
D:持久性
约束:想数据表中提供的数据要遵守的限制
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:必须提供数据(not null)
唯一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:允许为mull
外键:一个表中的某字段可填入数据取决于另一个表的主键已有的数据
索引:讲表中的一个或者多个字段中的数据复制一份另存,并且此些需要按特定次序排序储存
关系运算:
选择:挑选出符合条件的行
投影:挑选出部分列
连接:可以同时选择
数据的抽象方式
物理层:决定了数据的存储格式,也就是在磁盘上如何组织文件
逻辑层:描述DB储存什么数据,以及数据之间存在什么样的关系
视图层:描述DB 中的部分数据(用视图型表示的数据相当于linux中的别名)
关系模型的分类:
关系模型
实体-关系模型
基于对象的关系模型
半结构化的关系模型
mysql命令:
有两类
1)客户端命令:本地执行
help \h:查看可使用的命令
2)服务端命令:通过mysql协议发往服务器执行并取回结果至本地
每个命令都必须有命令结束符号,默认为分号。
关系型基础概念:
数据库的三层模型:
物理层:数据存在物理设备上存储的组件
逻辑层:DBA工程师站在自己角度看见的样子
视图层:用户角度看到的样子
ACID:
A:原子性
C:一致性
I:隔离性
D:持久性
约束:想数据表中提供的数据要遵守的限制
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:必须提供数据(not null)
唯一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:允许为mull
外键:一个表中的某字段可填入数据取决于另一个表的主键已有的数据
索引:讲表中的一个或者多个字段中的数据复制一份另存,并且此些需要按特定次序排序储存
关系运算:
选择:挑选出符合条件的行
投影:挑选出部分列
连接:可以同时选择
数据的抽象方式
物理层:决定了数据的存储格式,也就是在磁盘上如何组织文件
逻辑层:描述DB储存什么数据,以及数据之间存在什么样的关系
视图层:描述DB 中的部分数据(用视图型表示的数据相当于linux中的别名)
关系模型的分类:
关系模型
实体-关系模型
基于对象的关系模型
半结构化的关系模型
mysql命令:
有两类
1)客户端命令:本地执行
help \h:查看可使用的命令
2)服务端命令:通过mysql协议发往服务器执行并取回结果至本地
每个命令都必须有命令结束符号,默认为分号。
关系型数据库的常见组件
数据库:database
表:table
行:row
列:column
索引:index
试图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
SQL语句:
DDL:数据定义语言
create
drop
alter
DML:数据操纵语言
insert
delete
update
select
权限管理相关
grant
revoke
用户登录
mysql -uName -pPassword
数据库:
cteate database [if not exists] 'DB_name';
创建数据库
drop database [is exists] 'DB_name';
删除数据库
获取命令帮助
HELP KEYWORD;
查看字符集
show character set;
设定字符集就是
character = CHAR_Name
(使用的语言)
查看所有排序规则
show collation
修改排序规则
collation = COLL_name
use DB_name :使用某数据库
show tables 查看库中的表
drop DB_name :传说中的删库
表:
数据类型(datatype)
字符型
定长字符型char(#)
变长字符型varchar(#)
数值型
精确数值型
整型:int
tinyint(1byte)
smallint(2byte)
medinmint(3byte)
int(4byte)
bigint(8byte)
备注:每个byte代表的最大数值为2的byte次方
十进制:decimal
近似数值型
单精度浮点型
float
双精度浮点型
double
日期时间型
日期:date
时间: time
时间和日期:datetime
年:year
(year(2) year(4) 两位年份和四位年份 )
时间戳:timestamp
修饰符:
NOT NULL:非空约束
DEFAULT VALUE:设定默认值
创建数据表中我们需要指定:字段名 数据类型 数据类型修饰符 约束
查看创建表语法
1)help create table;
数据类型,定义等
2)create table TB1_name like old_tab_name
复制已知表结构来创建新表
创建表
cteate table tb_name(col1 datatype 修饰符 ,col2 datatype 修饰符 )
datatype:分为字符型,数值型 not null上文中有提 比如说 字符型中的int 字符型中的char等
定义字段:
primary key(col#,...)
定义主键
index(col#,...)
定义索引
unique key(col#,...)
定义唯一键
这些可以直接在创建时写在col#的后面(备注不加括号里的内容),表示把某字段定义
如果多个字段定义 最好单独提出来 先创建表然后在括号在最后边用,逗号隔开 增加定义
查看所有的引擎:
show engines
推荐使用innodb
查看表:
show tables [from TB_name]
查看表结构:
desc [DB_name.]TB_name
查看表的创建方式:
show create table TB_Name
查看表的状态:
show table status like ‘TB_name’
删除表
drop table [is exists] TB_name
修改表结构
查看帮助
help alter table
用法
alter table TB_name Option
字段(Option)
添加字段:add
add col_name datatype [first|after col_name]
示例:alter table students add sex enmu('f''m')
在表格students中增加sex字段,定义只能填写m 或者f
删除字段:drop
修改字段:alter ,change ,modify
enum():枚举类型:限定只能使用()中的内容 用引号引起来并且用逗号隔开
示例:alter table students change id sid int(5) not null; 在表格studenys中修改id字段为sid
索引:(备注:键都是索引,但是索引不一定是键(其中有主键唯一键等))
添加索引:add
示例:alter table students add unique key(name)给name那行加unique key(不能同名)
示例:alter table students add index(age);
给age添加索引
删除索引:drop
alter table student drop index age
删除age行的索引
查看索引
show index from TB_name :查看name表中的索引
索引是特殊的数据结构:他应该定义在你需要查找时作为查找条件的字段上。
索引可以有索引名称:如果是单建索引默认名字为字段名字。
创建索引:
create index index_name on TB_name (index_col_name)
删除索引:
drop index index_name on table_name
增删改查:
增:
insert TB_name [(col_name)] {vars|var} (var1,...)(...),...
示例:insert students values (1,'zhang','a','m')
向表中插入一行(1,zhanga m)
示例:insert students (sid,name,sex) values (2,'hehe','m'),(3,'haha','f');
在表中加入两行(指定第几行加入什么)
查:
seletc col1,col2,...(投影) from tb_name [where 条件] [order by 'col_name'] [limit [m,]n];
字段表示法
* :所有字段
示例:select * from students
查找students 的所有数字
as:显示时给这个字段起个别名
select name as n,class as c from students ;
备注:字符串比较时,需要加引号
where:判断条件
用在查找表中的条件
示例:select * from students where id >3 ;
从students表中查找id大于3的
select * from students where sex='m'
从students中查找性别为男的
select * from students where name is [not] null
查找名字为[非]空的;
排序:
select * from students order by name
按照名字排序
select * from students order by name desc
按名字反向排序
限制:
select * from students order by name limit 1
按名字排序显示,只显示一个
select * from students order by name limit 1,2
按名字排序显示掠过一个显示两个
where详解:
<
>
=
>=
<=
!=
between # and #(相当于 <= and >=)
like:模糊匹配
%:任意长度任意字符
_:任意id单个字符
条件组合:
and
or
not
删:
delete
delete from students where id=3
删除id等于3的用户
update:
修改某个字段的值
updata TB_name set col1=var1 ,col2=var2 where id=3
重点备注:删和改尽量不要用 如果必须用那么 必须写好条件 也就是where
用户账号及权限管理:
用户账号:‘user’@‘host’
user:用户名
host:此用户访问mysqld服务器时允许通过哪些主机远程创建链接
host可以用IP hostname等
通常使用时我们一般在配置文件中定义
skip_name_resolve = yes
跳过验证主机名
创建用户账号
create user 'user_name'@'host'
[ientified by 'password']
实例
create user 'hehe'@'%' identfied by 'abcde'
创建用户hehe可以连接所有主机,创建密码为abcde
授权:
权限:权限管理、数据库、表、字段、存储例程
grant priv_type,... on [object_type] db_name.tb_name[identified by 'password'] to user_name
把某表中的某权限授予给某用户
priv_type:all [privileges]
db_name.tbname:
*.* :所有库的所有表
db_name:* :指定库的指定表
*:tb_name: 所有库的指定表
查看授权:
show grants 【for 'User_name'@'host'】默认是查看所有用户和权限
for表示查看单独用户、对某【些】主机的权限
回收权限:
revoke priv_type,...on db_name.tb_name from 'username'@'host'
对账户重命名:
rename user ‘user’@‘host’
修改用户passwd命令
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456')