前言
workbench是mysql的界面端,mysql也有很多终端,在开始菜单都能看见。
sql的server是服务器,workbench只是可视化界面。
数据库介绍
定义:按照数据结构来组织、存储和管理数据的仓库。
是一个长期存储在计算机内的、有组织的、可共享的、同一管理的大数据的结合。
简而言之就是:服务器上,可以按照固定格式,把你需要存的一些数据存起来。
规范化方便管理、查找、修改,可以加密、共享。
数据库由来:规范化的本地存储、加密、安全、共享。
主要是方便管理,有自己的格式。
数据库分类
两类:关系、非关系。
关系型数据库:二维表,典型代表:mysql、oracle、SQLServer
name-age,一对一或一对多对应关系。
非关系型数据库:也叫nosql,是以为映射key-value,典型代表redis、mongodb
id是一个,但是value可以有很多内容。
可以最好学一下redis。
非关系型也就是,每个value都可能不是一个类别,甚至数量都不是一样的。
workbench基础
root用户,管理员权限。
给其他用户权限。
自己起的连接名字、用户名、ip地址和端口号。
localhost是本地环网,localhost3306,127.0.0.1本地环网。
也就是127.0.0.1:3306
正常是先用root用户登录。就是直接进第一个。
schema数据库,sys系统自带的。
简单建表
右键schema的空白,直接建表。
语句:CREATE SCHEMA `数据库名字` ;
下方指示位置,如果是绿色,则表示操作成功。
右键数据库,点击set as default设置成粗体,也就是常用的数据库。
数据库是按照表来管理的。表有列名、类型、特殊标识、特殊说明。
右键table,create table。
其中,类型:BIT位、ENUM枚举、VARCHAR(45)、NVARCHAR(45)、BIGINT、FLOAT、DOUBLE、DATE、DATETIME、TIME、JSON特殊格式字符串、TEXT()能存多个聊天文件等。
char、varchar、nvarchar区别:
如果是char,如果不够45,后面就用0补齐到45。
VAR和NVAR不用补齐。N是编码方式,N有中文。
VAR一个字符一个字节,NVAR宽字节,一个字符占两个字节。
后面:PK、NN等,都是列的选项,规范列用的。
PK主键,一般只有一个,例如学号是唯一标识。
NN不能是空,必须有数。
UQ唯一索引,这一列不允许重复,但是其他的能重复,并不是主键。
B二进制
UN无符号数据类型
ZF如果当前为空,如果是18,就给你存成18.000
AI自动增长
G可以用表达式,来生成内容,略复杂,一般不用。
CREATE TABLE `a`.`b` (
`name` VARCHAR(45) NOT NULL,
`age` INT NULL,
PRIMARY KEY (`name`));
这就是创建了表的代码表达形式。
在a数据库里建立了一个b表,里面两项是name和age,PK是name。
此后会有三个图标:i、扳手、表格
i:查看表信息,创建日期大小等。
扳手:修改表的属性格式
表格:执行查看语句,直接查看这个表格。
如果直接界面修改,不能忘记apply,才能真正添加到表格当中。
用户权限
management——user and privilege,管理用户和全选的,add直接添加。
limit:如果是%表示任意网卡,如果是localhost,必须是服务器所在的主机才能登录。
如果想异地登录,必须是%。就可以通过ip地址访问了。
password:123456
administrative Roles,DBA数据库管理员,如果选上,就全部选上了。
如果不是DBA,例如仅有select的话,那么就没有修改的权限,因此会失败。
至此,创建了用户,我们要用用户来登录数据库。
store value填写密码,然后test connection来尝试连接,一般是successfully。
至此,完成了从root到自定义用户,登录同一数据库的操作。
如果修改被denied的话,就说明权限不够。
默认保存成为sql后缀文件。
闪电:执行页面里所有的sql语句,但是如果选中其中一行的话,就是当前行,闪电光标是当前行。闪电是以分号来判断一个语句的,如果此行没有,那么就会找到分号来执行。
修改权限
第一个create a new sql tab,打开一个新的页面,来输入语句。
我们的用户没有root权限去修改表格,因此要回到root界面去输入指令来获取权限。
#是注释。
临时授权:grant 权限名 on 表名 to 用户名;
例如:grant update on sql.table to xxx;
这其中,数据库.表名,是表名的正确显示形式。
一定要切换root用户来实现这一操作。
取消临时授权:revoke 权限名 on 表名 from 用户名;
例如:revoke update on sql.table from xxx;
如果删掉了用户,那么连接失效,会一直让你输入密码。
命名规则
数据库不区分大小写,一般都是用小写。
表名一般以:t_xxx来写,列名:f_xxx来写,最好不要使用特殊字符。
t就是table,f就是flow(不确定)。
设置默认的数据库,就是set default,命令:use 表名;use sql;
创建数据表
create table 表名 (列名 类型 约束,列名 类型 约束...);
建表约束:
- PK主键约束primary key:值唯一,不允许重复,不可以为空,而且只有一个主键,主键就是索引。table可以没有主键。用户id
- UQ唯一unique:值唯一,不允许重复,但是可以为空,不是同一列才能重复。例如用户名
- 默认值default,如果不填,那么就全是同一个值。
- NN非空not null
- AI自增auto increment
- 外键约束foreign key
create table studentInfo(
number int primary key,
name varchar(45) unique,
sex enum('男','女'),
age int default 18
);
创建完之后不会立刻出现,要refresh数据库才行。
表格按键,可以用select * from 表名,来使用。也就是用这个方式来查看表。
与c++不同,是小括号,而不是大括号,列名+类型+关键字(可有可无)
注:小括号、单引号。
删除数据表
drop table 表名;
drop丢弃,一般数据库用这个,表示delete
删的时候立刻消失,不用refresh
直接选中执行,即使是重复语句,因为这并不是像c++一样从上到下,我们需要什么就执行什么就好了。
use newtable;
create table sss();
select * from sss;
drop table sss;
修改表
alter table 表名 加具体修改的内容;
具体包括:增加一列、修改列属性、删除列
增加一列:alter table 表名 add column 列名 类型 约束;
alter table Tablename add column school int;
修改列属性:alter table 表名 modify 列名 类型 约束;
alter table Tablename modify school varchar(45);
删除列:alter table Tablename drop 列名;
也就是:add、drop、modify三种方式修改。
alter table studentinfo add column school int;
alter table studentinfo modify school varchar(45);
alter table studentinfo drop school;
查询语句
select 列名(*) from 表名;
*表示所有。
select name from Tablename;
select name name的别名, age age的别名 from Tablename;
即,你要查询的内容,变成了以别名为索引的特定列。
这只是临时的名字。
插入数据
insert into 表名 values(值);插入所有列。
insert into 表名(列名1,列名2...) values(值); 插入一些列。
修改数据
修改就是更新,update 表名 set 列名=值;(正常使用场景需要使用条件)
如果这么用:update Tablename set age=18;这是让所有人变成18。
但是没这么干的...安全模式,不允许你这么干。
edit——preference——sql editor,点safe,然后重启,就会有错误提示了。
条件修改:
update Tablename set age=18 where name='张三';
where是条件,什么=什么。注意单引号是字符串varchar。
删除数据
delete from 表名;
一般只是删除一行,不可能都删除。
查询条件
一般是复杂的查询条件:
- 相等:where 列名 = 值;
- 不相等:where 列名 != 值; 只有mysql支持!=不等号。其余的是:where 列名<>值;
- 或者:or连接两个条件
- 并且:and连接
- 介于之间:between and
- 范围内:in
- 不在范围内:not in
模糊查询
where 列名 like 模糊表达式;
模糊表达式:
- %:匹配任意0到到多个字符,姓张的所有人。甚至就叫一个单字张,也能搜出来。
- _:匹配任意1个字符,例如张_,就只能搜索出张三,而不能搜出张大仙。
- _张_就是这人是三个字的名字中间是张,%张%就是无所谓了,有张就行。
# 查询语句
select * from studentinfo;
select name from studentinfo;
select name 名字, age 年龄 from studentinfo;# 起别名,但是只是临时的
# 插入数据
insert into studentinfo value(4,'王五','男',20);# 按照顺序
insert into studentinfo(number,name,sex) value(5,'小花','女');# 指定列
# 修改数据
update studentinfo set age=88 where name='张三';
# 删除数据
delete from studentinfo where name ='小花';
# 等于
select * from studentinfo where age >= 18;
select * from studentinfo where age < 18;
# 不等于
select * from studentinfo where age != 18;
select * from studentinfo where age <> 18;
# 或者
select * from studentinfo where sex = '女' or age = 20;
# 并且
select * from studentinfo where sex = '男' and age = 19;
# 两者之间
select * from studentinfo where number between 1 and 3;
# 范围内
select * from studentinfo where number in (1,3,5);
# 不在范围内
select * from studentinfo where number not in (1,3,5);
select * from studentinfo where name like '张%';
select * from studentinfo where name like '张_';
select * from studentinfo where name like '%张%';
select * from studentinfo where name like '_张_';