MySQL数据库权限、表的增删改查、数据类型的相关操作
⼀、概述
1、什么是数据库?
答:数据的仓库,如:在ATM的⽰例中我们创建了⼀个 db ⽬录,称其为数据库
2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等?
其他类似软件:
关系型数据库:sqllite,db2,oracle,access,sql server MySQL 数据存在强类型关系
⾮关系型数据库:MongoDB,redis
答:他们均是⼀个软件,都有两个主要的功能:
a. 将数据保存到⽂件或内存
b. 接收特定的命令,然后对⽂件进⾏相应的操作
PS:如果有了以上软件,⽆须⾃⼰再去创建⽂件和⽂件夹,⽽是直接传递命令给上述软件,让其来进⾏⽂件操作,他们统称为数据库管理系统(DBMS,Database Management System)
3、什么是SQL ?
答:上述提到MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除⽂件、获取⽂件内容等众多操作,对于编写的命令就是是SQL语句。SQL,是结构化语⾔(Structured Query Language)的缩写,SQL是⼀种专门⽤来与数据库通信的语⾔。
⼆、下载安装
MySQL是⼀个关系型数据库管理系统,由瑞典MySQL AB 公司开发,⽬前属于 Oracle 旗下公司。MySQL 最流⾏的关系型数据库管理系统,在 WEB 应⽤⽅⾯MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应⽤软件之⼀。
想要使⽤MySQL来存储并操作数据,则需要做⼏件事情:
a. 安装MySQL服务端
b. 安装MySQL客户端
b. 【客户端】连接【服务端】
c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执⾏相应操作(增删改查等)
下载
sql/downloads/mysql/
安装
windows:
点点点
Linux:
yum install mysql-server
Mac:
点点点
Window版本
1、下载
MySQL Community Server 5.7.16
sql/downloads/mysql/
2、解压
如果想要让MySQL安装在指定⽬录,那么就将解压后的⽂件夹移动到指定⽬录,如:C:\mysql-5.7.16-winx64
3、初始化
MySQL解压后的 bin ⽬录下有⼀⼤堆的可执⾏⽂件,执⾏如下命令初始化数据:初始化得到⼀个data⽂件,创建⼀个root⽤户,没有密码
cd c:\mysql-5.7.16-winx64\bin
mysqld --initialize-insecure
4、启动MySQL服务
执⾏命令从⽽启动MySQL服务
# 进⼊可执⾏⽂件⽬录
cd c:\mysql-5.7.16-winx64\bin
# 启动MySQL服务
mysqld
5、启动MySQL客户端并连接MySQL服务
由于初始化时使⽤的【mysqld --initialize-insecure】命令,其默认未给root账户设置密码
# 进⼊可执⾏⽂件⽬录
cd c:\mysql-5.7.16-winx64\bin
# 连接MySQL服务器
mysql -u root -p
# 提⽰请输⼊密码,直接回车
输⼊回车,见下图表⽰安装成功:
到此为⽌,MySQL服务端已经安装成功并且客户端已经可以连接上,以后再操作MySQL时,只需要重复上述4、5步骤即可。但是,在4、5步骤中重复的进⼊可执⾏⽂件⽬录⽐较繁琐,如想⽇后操作简便,可以做如下操作。
a. 添加环境变量
将MySQL可执⾏⽂件添加到环境变量中,从⽽执⾏执⾏命令即可
【右键计算机】--》【属性】--》【⾼级系统设置】--》【⾼级】--》【环境变量】--》【在第⼆个内容框中到变量名为Path 的⼀⾏,双击】 -->
【将MySQL的bin⽬录路径追加到变值值中,⽤;分割】
如此⼀来,以后再启动服务并连接时,仅需:
# 启动MySQL服务,在终端输⼊
mysqld
# 连接MySQL服务,在终端输⼊:
mysql -u root -p
b. 将MySQL服务制作成windows服务(将在后台运⾏)
上⼀步解决了⼀些问题,但不够彻底,因为在执⾏【mysqld】启动MySQL服务器时,当前终端会被hang住,那么做⼀下设置即可解决此问题:
# 制作MySQL的Windows服务,在终端执⾏此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --install 必须是绝对路径
# 移除MySQL的Windows服务,在终端执⾏此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --remove
注册成服务之后,以后再启动和关闭MySQL服务时,仅需执⾏如下命令:
# 启动MySQL服务
net start mysql
# 关闭MySQL服务
net stop mysql
Linux版本
安装:
yum install mysql-server
服务端启动:
mysql.server start
客户端连接:
连接:
mysql -h host -u user -p
常见错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2), it means that the MySQL
server daemon (Unix) or service (Windows) is not running.
退出:
mongodb和mysql结合QUIT 或者 Control+D
三、数据库操作
1、显⽰数据库
show databases;
默认数据库:
mysql - ⽤户权限相关数据
test - ⽤于⽤户测试数据
information_schema - MySQL本⾝架构相关数据
2、创建删除数据库
collate utf8_bin:区分⼤⼩写;
collate utf8_general_cs:数据库校对规则,⼤⼩写敏感;
collate utf8_general_ci:数据库校对规则⼤⼩写不敏感。
# utf-8
create database 数据库名称 default charset utf8 collate utf8_general_ci;
# gbk
create database 数据库名称 default charset gbk collate gbk_chinese_ci;
drop database db2; 删除数据库
3、使⽤数据库
USE db_name;
显⽰当前使⽤的数据库中所有表:show tables;
4、⽤户管理
select user from user; 查看有哪些⽤户
创建⽤户
create user '⽤户名'@'IP地址' identified by '密码';
create user '⽤户名'@'%' identified by '密码';
%表⽰任意IP
删除⽤户
drop user '⽤户名'@'IP地址';
修改⽤户
rename user '⽤户名'@'IP地址' to '新⽤户名'@'IP地址';
修改密码
set password for'⽤户名'@'IP地址' = Password('新密码')
PS:⽤户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进⾏操作(不建议)
5、授权管理
select查看 insert插⼊ update更新
show grants for'⽤户'@'IP地址' -- 查看权限
grant 权限 on 数据库.表 to '⽤户'@'IP地址' -- 授权
grant all privileges on 数据库.表 to '⽤户'@'IP地址' --授予所有的权限,除了授权这个权限grant all privileges on *.* to '⽤户'@'IP地址'
revoke 权限 on 数据库.表from'⽤户'@'IP地址' -- 取消权限
all privileges 除grant外的所有权限
select仅查权限
select,insert 查和插⼊权限
...
usage ⽆访问权限
alter 使⽤alter table
alter routine 使⽤alter procedure和drop procedure
create 使⽤create table
create routine 使⽤create procedure
create temporary tables 使⽤create temporary tables
create user 使⽤create user、drop user、rename user和revoke all privileges
create view 使⽤create view
delete 使⽤delete
drop 使⽤drop table
execute 使⽤call和存储过程
file 使⽤select into outfile 和 load data infile
grant option 使⽤grant 和 revoke
index 使⽤index
insert 使⽤insert
lock tables 使⽤lock table
process 使⽤show full processlist
select使⽤select
show databases 使⽤show databases
show view 使⽤show view
update 使⽤update
reload 使⽤flush
shutdown 使⽤mysqladmin shutdown(关闭MySQL)
super 使⽤change master、kill、logs、purge、master和set global。还允许mysqladmin 调试登陆 replication client 服务器位置的访问
replication slave 由复制从属使⽤
对于权限
对于权限
对于⽬标数据库以及内部其他:
数据库名.* 数据库中的所有
数据库名.表指定数据库中的某张表
数据库名.存储过程指定数据库中的存储过程
*.* 所有数据库
对于数据库
⽤户名@IP地址⽤户只能在改IP下才能访问
⽤户名@192.168.1.% ⽤户只能在改IP段下才能访问(通配符%表⽰任意)
⽤户名@% ⽤户可以再任意IP下访问(默认IP地址为%)
对于⽤户和IP
grant all privileges on db1.tb1 TO '⽤户名'@'IP'
grant select on db1.* TO '⽤户名'@'IP'
grant select,insert on *.* TO '⽤户名'@'IP'
revoke select on db1.tb1 from'⽤户名'@'IP'
⽰例
⽰例
特殊的:
flush privileges,将数据读取到内存中,从⽽⽴即⽣效。
# 启动免授权服务端
mysqld --skip-grant-tables
# 客户端
mysql -u root -p
# 修改⽤户名密码
update mysql.user set authentication_string=password('666') where user='root';
flush privileges;
忘记密码
忘记密码
四、数据表基本
1、创建表
查看表
show tables;
select * from表名; 查看表内所有内容
select name,age,id from表名; 查看表内name、age、id内容
insert into t1(id,name) values(1,'alex'); 插⼊数据
show create table 表名查看创建表的sql语句
主键、唯⼀索引区别
它们的⼀些⽐较:
(1)对于主健/unique constraint , oracle/sql server/mysql等都会⾃动建⽴唯⼀索引;
(2)主键不⼀定只包含⼀个字段,所以如果你在主键的其中⼀个字段建唯⼀索引还是必要的;
(3)主健可作外健,唯⼀索引不可;
(4)主健不可为空,唯⼀索引可;
(5)主健也可是多个字段的组合;
(6)主键与唯⼀索引不同的是:
a.有not null属性;
b.每个表只能有⼀个。
主键约束⽐唯⼀索引约束严格,当没有设定主键时,⾮空唯⼀索引⾃动称为主键。对于主键和唯⼀索引的⼀些区别主要如下:
1.主键不允许空值,唯⼀索引允许空值
2.主键只允许⼀个,唯⼀索引允许多个
3.主键产⽣唯⼀的聚集索引,唯⼀索引产⽣唯⼀的⾮聚集索引
注:聚集索引确定表中数据的物理顺序,所以是主键是唯⼀的(聚集就是整理数据的意思)
唯⼀索引:
唯⼀索引,⼀种,不允许具有索引值相同的⾏,从⽽禁⽌重复的索引或键值。系统在创建该索引时检查是否有重复的键值,并在每次使⽤ INSERT 或 UPDATE 语句添加数据
时进⾏检查。
create table 表名(
列名类型是否可以为空(null 、not null) default 1(默认数据) auto_increment primary key;
列名类型是否可以为空
)engine=innodb default charset=utf8;(默认字符编码utf8)
# innodb ⽀持事务,原⼦性操作(数据交互失败,数据回滚)
# myisam 存储事务快⼀些,相对于innodb
# auto_increment表⽰⾃增配合primary key使⽤(⼀个表⾥⾯只能有⼀个⾃增列和约束,这两个是绑定的)
# primary key:主键表⽰约束(不能重复且不能为空); 加速查(这⼀列会⽣成另外⼀个⽂件,以后查速度更快)
是否可空,null表⽰空,⾮字符串
not null - 不可空
null - 可空
是否可以为空
默认值,创建列时可以指定默认值,当插⼊数据时如果未主动设置,则⾃动添加默认值
create table tb1(
nid int not null defalut 2,
num int not null
)
默认值
CREATE TABLE `apk_download_info` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`downloadlink` varchar(255) DEFAULT NULL,
`downloadStatusCode` int(8) NOT NULL COMMENT 'HTTP response code when downloading from link',
`createTime` datetime DEFAULT NULL,
`modifyTime` datetime DEFAULT NULL,
`malwareInfo` varchar(2000) DEFAULT NULL,
`fileSize` int(32) DEFAULT NULL,
`fileHash` varchar(100) DEFAULT NULL,
`retrieveScanReport` int(1) DEFAULT NULL,
`permaLink` varchar(200) DEFAULT NULL,
`resource` varchar(100) DEFAULT NULL COMMENT 'this is the resource returned from Virus Total upon a successful upload of the downdloaded file',
`apkName` varchar(200) DEFAULT NULL,
`retryCount` int(8) DEFAULT '0' COMMENT 'number of retries for downloading/uploading/retrieving reports',
`maliciousLinkType` enum('恶意扣费','隐私窃取','远程控制','恶意传播','资费消耗','系统破坏','诱骗欺诈','流氓⾏为') CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL, `malCount` int(8) DEFAULT NULL COMMENT 'the number of indentified malware info',
`hasChineseProviders` int(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `link_index` (`downloadlink`)
) ENGINE=InnoDB AUTO_INCREMENT=13106337 DEFAULT CHARSET=utf8
建表举例1
CREATE TABLE `message_url_info` (
`id` int(32) NOT NULL AUTO_INCREMENT,
`url` varchar(255) NOT NULL,
`message_type` varchar(100) DEFAULT NULL,
`found_time` datetime DEFAULT NULL,
`is_phishing` int(8) DEFAULT '0' COMMENT '0 means that this url isnot phishing,1 means that this url is phishing',
`phishing_url` varchar(255) DEFAULT NULL,
`phishing_type` varchar(100) DEFAULT NULL,
`modify_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url_index` (`url`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
建表举例2
主键,⼀种特殊的唯⼀索引,不允许有空值,如果主键使⽤单个列,则它的值必须唯⼀,如果是多列,则其组合必须唯⼀。
create table tb1(
nid int not null auto_increment primary key,
num int null
)
或
create table tb1(
nid int not null,
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论