1、常见数据库
关系型数据库:MySQL、sqllite、db2、oracle、access、sql server....
一条记录之间的字段是强关联,不能只删字段,只能删整条记录,支持事务
非关系型数据库:MongoDB、redis....
一条记录之间的字段之间弱关联,一般以键值对存储,虽然支持事务但是不完善,可以单独删除字段的值
2、MySQL安装
3、MySQL目录结构
MySQL8.0
bin:可执行文件目录
我这是8.0版本,如果有Data文件夹,那配置文件my.ini就在Data 文件夹里
不然默认在C:\ProgramData\MySQL\MySQL Server 8.0里
my.ini的常用配置如下:
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:\Program Files\MySQL
# 设置mysql数据库的数据的存放目录
datadir=C:\Program Files\MySQL\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8mb4
4、在网络环境下MySQL的工作流程
在服务器端运行mysqld.exe(在bin下),在客户端运行mysql.exe
客户端连接到服务器端
在客户端使用SQL语句操纵服务端数据库
5、创建用户以及授权
cmd进mysql之后常见操作如下:
# 查看当前数据库
SHOW DATABASE;
# 创建用户
# '%'表示可以从哪个ip地址访问 identified by'1234'表示设置密码
create user 'user1'@'%' identified by'1234';
# 修改用户
rename user 'user1'@'%' to'user2'@'%';
# 修改密码
set password for 'user2'@'%' ='12345';
# 删除用户
drop user 'user2'@'%';
# 授权
# test.*表示test数据库下所有表 all privileges表示所有权限
grant all privileges on test.* TO 'user1'@'%';
# 取消授权
# 撤回select权限
revoke select on test.* from 'user1'@'%';
常见权限
All/All Privileges权限代表全局或者全数据库对象级别的所有权限
Alter权限代表允许修改表结构的权限,但必须要求有create和insert权限配合。如果是rename表名,则要求有alter和drop原表, create和insert新表的权限
Alter routine权限代表允许修改或者删除存储过程、函数的权限
Create权限代表允许创建新的数据库和表的权限
Create routine权限代表允许创建存储过程、函数的权限
Create tablespace权限代表允许创建、修改、删除表空间和日志组的权限
Create temporary tables权限代表允许创建临时表的权限
Create user权限代表允许创建、修改、删除、重命名user的权限
Create view权限代表允许创建视图的权限
Delete权限代表允许删除行数据的权限
Drop权限代表允许删除数据库、表、视图的权限,包括truncate table命令
Event权限代表允许查询,创建,修改,删除MySQL事件
Execute权限代表允许执行存储过程和函数的权限
File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数
Grant option权限代表是否允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限
Index权限代表是否允许创建和删除索引
Insert权限代表是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限
Lock权限代表允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写
Process权限代表允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令
Reference权限是在5.7.6版本之后引入,代表是否允许创建外键
Reload权限代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表
Replication client权限代表允许执行show master status,show slave status,show binary logs命令
Replication slave权限代表允许slave主机通过此用户连接master以便建立主从复制关系
Select权限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的
Show databases权限代表通过执行show databases命令查看所有的数据库名
Show view权限代表通过执行show create view命令查看视图创建的语句
Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdown
Super权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令
Trigger权限代表允许创建,删除,执行,显示触发器的权限
Update权限代表允许修改表中的数据的权限
Usage权限是创建一个用户之后的默认权限,其本身代表连接登录权限
6、常见的SQL操作
# 创建表
# use test选择test数据库,在test创建表
use test;
# 创建表t1
create table t1(
# 创建字段id,类型为int,长度(5)位十进制,
# auto_increament自增/一定要是key(只能有一个)
# primary key不能重复,不为空。会创建索引,加速查找。
id int(5) auto_increament primary key,
# NULL表示可以为空 NOT NULL不能为空
#char(255)表示字段长度固定为255,如果插入值不够255则用空格填充,这样查找速度快
#varchar(255)是可变长字符,最大长度255,插入值不够255它不会进行填充,查找速度慢。
#由于MySQL中字段存储为id | name |.....所以将固定长度的字段放前面会提高查询效率
name char(255) NULL,
# 枚举
size ENUM('s','m','l','xl'),
# 集合
color SET('red','blue','yellow'),
# 时间TIMESTAMP 默认插入当前时间CURRENT_TIMESTAMP/now()
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
# 非空默认值为1
department_id int(2) NOT NULL DEFAULT 1,
#外键约束 约束名fk_t1_department ,把department_id关联到表department的id字段
constraint fk_t1_department foreign key ('department_id') references department('id')
)engine=innodb default charset utf8;
# engine表示数据库用什么引擎innodb支持事务,myisam不支持事务,支持全局索引
# default charset utf8;表示设置字符集为utf8
# 清空表 并不直接删除可以回滚,自增id延续使用
DELETE FROM t1;
TRUNCATE TABLE t1;
# 删除表 直接删除,自增id从头开始
DROP TABLE t1;
# 操作记录
# 查询 选择来自表t1的字段id,name,select *表示所有字段
select id,name from t1;
# 插入 插入到t1 插入字段为(id,name) 值为(1,'alex')
insert into t1(id,name) values(1,'alex')
#删除 删除t1中名字为"小明"的记录
delete from t1 where name='小明';
#修改 修改t1表中id为6的记录,将名字改为“小明”
update t1 set name='小明' where id=6;
# 插入集合
insert into t1(color) values('red','blue')