数据库账号管理,建库,四大引擎
1.账号创建及密码修改
GRANT ALL PRIVILEGES ON *.* TO 'zhangsan'@'%' IDENTIFIED BY 'zhangsan123' WITH GRANT OPTION;
use mysql;
update user set authentication_string=password('123456') where user='zhangsan';
flush privileges;
1.1查看账号
点击Manage Users(管理用户),查看账号
目前:我的有已有三个账号,都可以用。
我们在安装mysql是只有一个账号root账号,管理员的账号。
1.2权限
在一些大型企业里,它们的权限划分的非常细。我们可能用的少,但是还是要了解一些。
数据库账管理作用图:
DDL语言的使用
GRANT ALL PRIVILEGES ON *.* TO 'zhangsan'@'%' IDENTIFIED BY 'zhangsan123' WITH GRANT OPTION;
GRANT赋权 ALL PRIVILEGES权限 IDENTIFIED BY定义密码 WITH GRANT OPTION;权限的一个选项
运行这个语句得到一个张三的账号:
测试一下能成功就算成功
随意找一个库试一下修改删除等权限。
创建类一个Zara账号,这个账号只能看到girls数据库,
并且这个数据库中的表操作权限只有查询和修改。
GRANT SELECT,UPDATE
ON girls.*
TO 'zara'@'localhost'
IDENTIFIED BY 'zara123';
连一下看看没问题
只能看到两个,一个默认的,一个你自己定义的
赋了多少权限就只能用多少。
用的能看到多个数据库有的只能看到两个,有的能操作增删改查,有的只能查
安装mysql就自带了一个mysql库有几张表很重要
一、首先我们需要来看一下mysql默认数据库里面的四张表(user,db,tables_priv,columns_priv)。
1、user表(用户层权限)
因为字段太多,只截取了一部分。首先登陆的时候验证Host,User,Password也就是ip,用户名,密码
是否匹配,匹配登陆成功将会为登陆者分配权限,分配权限的顺序也是按照上面四张表的排列顺序
进行的,举个例子,如果user表的Select_priv为Y说明他拥有所有表的查找权限,如果为N就需要到
下一级db表中进行权限分配了。其中的%是通配符,代表任意的意思。
2、db表(数据库层权限)
来到db表之后会匹配Host,User然后会根据Db字段对应的表进行权限分配,像Select_priv这些字段
对应的权限大家应该都能看出来是对应着什么权限了吧,这里不细说了(不偷懒,举个例子Select
_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv分别代表着查询,增加,
更新,删除,创建,销毁)。其中Y代表这拥有此项权限,N则代表没有此项权限。
3、tables_priv表(表层权限)
与上面一样,这是通过Host,Db,User,Table来进行定位到表层的一个权限分配。不过它只有
Table_priv和Column_priv两个字段来记录权限。
4、columns_priv表(字段层权限)
顾名思义,字段层权限,通过Host,Db,User,Table,Column来进行定位到字段层的一个权限
分配,只有Column_priv来记录权限。
```
2.数据库创建
CREATE DATABASE 数据库名;
#在其他数据库下执行查询是没有结果的
select * from t_easyui_user;
CREATE DATABASE test;
use test;
#此时能查出结果了
select * from t_easyui_user;
3、四大引擎
小知识点
(我们大概只要关注两个引擎,我们大概用到的就两个,面试官问到也就两个 第一个InnoDB,第二个MyISAM存储引擎)
存储引擎的选择
不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:
功 能 | MYISAM | Memory | InnoDB | Archive |
---|---|---|---|---|
存储限制 | 256TB | RAM | 64TB | None |
支持事物 | No | No | Yes | No |
支持全文索引 | Yes | No | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | Yes | No | No |
支持数据缓存 | No | N/A | Yes | No |
支持外键 | No | No | Yes | No |
如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择
如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率
如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果
如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive
使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能
存储引擎查看
MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5.1,可以使用:
SHOW ENGINES
InnoDB存储引擎
InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了
,InnoDB是默认的MySQL引擎。InnoDB主要特性有:
1、InnoDB给MySQL提供了具有提交、回滚和崩溃恢复能力的事物安全(ACID兼容)存储引擎。In
noDB锁定在行级并且也在SELECT语句中提供一个类似Oracle的非锁定读。这些功能增加了多用户
部署和性能。在SQL查询中,可以自由地将InnoDB类型的表和其他MySQL的表类型混合起来,甚至
在同一个查询中也可以混合
2、InnoDB是为处理巨大数据量的最大性能设计。它的CPU效率可能是任何其他基于磁盘的关系型数
据库引擎锁不能匹敌的
3、InnoDB存储引擎完全与MySQL服务器整合,InnoDB存储引擎为在主内存中缓存数据和索引而维
持它自己的缓冲池。InnoDB将它的表和索引在一个逻辑表空间中,表空间可以包含数个文件(或原
始磁盘文件)。这与MyISAM表不同,比如在MyISAM表中每个表被存放在分离的文件中。InnoDB表
可以是任何尺寸,即使在文件尺寸被限制为2GB的操作系统上
4、InnoDB支持外键完整性约束,存储表中的数据时,每张表的存储都按主键顺序存放,如果没有显
示在表定义时指定主键,InnoDB会为每一行生成一个6字节的ROWID,并以此作为主键
5、InnoDB被用在众多需要高性能的大型数据库站点上
InnoDB不创建目录,使用InnoDB时,MySQL将在MySQL数据目录下创建一个名为ibdata1的10MB
大小的自动扩展数据文件,以及两个名为ib_logfile0和ib_logfile1的5MB大小的日志文件
MyISAM存储引擎
MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用
的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事物。MyISAM主要特性有:
1、大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持
2、当把删除和更新及插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合
并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成
3、每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16
4、最大的键长度是1000字节,这也可以通过编译来改变,对于键长度超过250字节的情况,
一个超过1024字节的键将被用上
5、BLOB和TEXT列可以被索引
6、NULL被允许在索引的列中,这个值占每个键的0~1个字节
7、所有数字键值以高字节优先被存储以允许一个更高的索引压缩
8、每个MyISAM类型的表都有一个AUTO_INCREMENT的内部列,当INSERT和UPDATE操
作的时候该列被更新,同时AUTO_INCREMENT列将被刷新。所以说,MyISAM类型表的AU
TO_INCREMENT列更新比InnoDB类型的AUTO_INCREMENT更快
9、可以把数据文件和索引文件放在不同目录
10、每个字符列可以有不同的字符集
11、有VARCHAR的表可以固定或动态记录长度
12、VARCHAR和CHAR列可以多达64KB
使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,扩展名之处文
件类型:frm文件存储表定义、数据文件的扩展名为.MYD(MYData)、索引文件的扩展名
时.MYI(MYIndex)
MEMORY存储引擎
MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问。
MEMORY主要特性有:
1、MEMORY表的每个表可以有多达32个索引,每个索引16列,以及500字节的最大键长度
2、MEMORY存储引擎执行HASH和BTREE缩影
3、可以在一个MEMORY表中有非唯一键值
4、MEMORY表使用一个固定的记录长度格式
5、MEMORY不支持BLOB或TEXT列
6、MEMORY支持AUTO_INCREMENT列和对可包含NULL值的列的索引
7、MEMORY表在所由客户端之间共享(就像其他任何非TEMPORARY表)
8、MEMORY表内存被存储在内存中,内存是MEMORY表和服务器在查询处理时的空闲
中,创建的内部表共享
9、当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELE
TE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE)
MySQL语句操作
建库跟oracle和sql数据库差不多,就是类型不太一样
IF NOT EXISTS:如果没有则创建,那就创建一个。
CREATE DATABASE IF NOT EXISTS book;
删除库
DROP DATABASE IF EXISTS book; 如果book存在就删除它,否则就创建一个再删。
查看表结构
DESC t_lucene_crawler_blog;
创建一个表
CREATE TABLE book(
id INT,
bname VARCHAR(20),
price DOUBLE,
authorID INT,
publishDate DATETIME
);
复制表
1、复制整张表
2、复制部分数据
3.复制字段
create table bookk select * from book;
create table bookk select * from book where price=10;
create table bookk select id,bname from book;
修改表列名
1.修改表类型与约束
2. 添加新列
3. 修改表名
ALTER TABLE book CHANGE COLUMN publishdate pubDate DATETIME;
ALTER TABLE book MODIFY COLUMN pubDate TIMESTAMP;
ALTER TABLE book ADD COLUMN bz VARCHAR(200);
删除表
1、删除表数据,可以跟where条件
2、删除表数据,不可以跟where条件,只能全部删除
3、删除表结构
delete from book;
truncate table book;
drop table book;
总结:
完了完了完了完了,反省自己。总结自己还有哪里不够好。