mysql数据库

概念

数据库:组织,存储,管理数据的仓库

数据库的关系系统(DBMS):实现对数据有效组织,管理和存取的系统软件

数据库分类

关系型数据库和非关系型数据库:

mysql , oraclle ,postgreSQL

关系型数据库

关系型数据库存储的结构:是一张二维的表格,表里面有行和列

列:是对象,字段

行:对象的信息,字段的属性

行+列组成一张表

优点:表的结构清晰,逻辑容易整理,记录的数据比较完整

缺点:读写速度比较慢,并发量差,数据迁移比较麻烦

非关系型数据库

缓存型数据库:redis

索引型数据库:ES

文档型数据库:MongoDB

非关系型数据库是键值对形式存储的结构

优点:可以进行高并发读写,对海量数据依旧可以保持高效率的存储和访问。架构可扩展

缺点:键值对形式存储,数据逻辑比较复杂,数据是保存在缓存当中,如果意外重启所有数据都会丢失

数据库的数据类型:

char:固定长度的字符类型,用于存储固定长度的字符串

varchar:可变长度的字符类型,存储的是可变长度的字符串

int:存储的数据类型为整数

float:单精度浮点数,小数点。float(m,d) :m表示总位数,d表示小数位数

double:双精度浮点数,doublet(m,d) :m表示总位数,d表示小数位数

date:用于存储日期,YYYY-MM-DD(年-月-日)

datetime:用于存储日志和时间,格式YYYY-MM-DD HH:MM:SS(年-月-日 时:分:秒)

timestamp:和datetime类似,但是他可以自动记录当前时间

smallinit:存储小整数

bigint:存储大整数

decimal(5,2):存储精度的浮点数,5表示总位数,2表示小数位

char和varchar区别:

char定义好了长度之后,不论写的值是多少,都会占用固定长度的字节大小。保存在磁盘上都是4字节

varchar在保存字符串时,是多少就保存多少,在保存的字符串结尾默认有一个隐藏的结束符,会多占一个字节

varchar比char要节约磁盘空间

读写速度:char的读写性能要高于varchar,char是连续的磁盘空间,保存的内容是连续的

varchar在增伤改查之后,会产生一个磁盘空间的碎片文件,影响读写性能

数据库的管理:

增删改查------sql语句

sql中的名词

数据库:database

表:table

行:row

列:column

索引:index

视图:view

用户:user

权限:privilege

存储过程:procedure

存储函数:funcrion

调度器:exent

sql的语言规范

在数据库系统中,sql语句不区分大小写,但是建议用大写

sql语句可以分单行和多行,但是必须以" ; " 结尾

命令规范:库名,表明,列的名字,都必须以字母开头,后面可以数字,也可以跟上特殊符号

不要使用mysql的保留字,

数据库名,表名,用户名严格区分大小写

sql语言的分类

1、DDL:数据库定义语言:创建数据库的对象语言,库 ,表和索引

create drop

2、DML:数据库操作语言,可以对表里面的数据进行管理

select update insert插入 delete

3、DQL:数据库查询语言,数据库的查询语句

select

4、DCL:数据控制语言,控制和管理数据库用户的角色和权限

grant revoke

5、tcl:事务控制语句,用来管理数据库的事务,脚本开发,存储过程等

commit rollback savepoint

DDL:创建库和表的语句

一条数据库的语句是连贯的,以分号为结尾表示一条完整的sql

但是太长了不方便阅读和理解,可以对一条语句进行分行的写法

关键词不能跨行

语法:

create database +库名 :创建库

drop database +库名:删除库

创建表:

create table 表名 (

id 数据类型 not null,

name 数据类型 not null,

score 数据类型

);

drop database +表名 :删除表

not null 表示不能为空

示例:

1、创建库xy102:create database xy102;

2、删除库xy102:drop database xy102;

3、创建表student:

create table student (

id int(4) not null,

name char(10) not null,

score decimal(5,2)

);

含义:

create table student (

创建的表名为 student

id int(4) not null

名字是id,字符类型是int ,(4)字符长度是4,not null不能为空

name char(10) not null

名字是name,字符类型varchar, (12)字符长度是12,not null不能为空

sroce decimal(5,2)

名字是sroce,字符类型是decimal , (5,2)总长度是5,小数点后面最多2位,可以为空

4、删除表student:

drop dataase student;

desc 表名;查看表的结构, desc 表名\G;纵向查看表的结构

key:表示是否是主键或者外键

default:如果没有数据的默认展示结果

extra:提供列的附加信息。自增长等等

DML:插入数据
语法

语法1:

insert into 表名(字段1,字段2,字段3) values(1,2,3);

语法2:

insert into 表名 values(1,2,3)

修改和更新数据:update

语法:

修改

update 表名 set 列名=值 where 条件;

删除

delete from 表名 where 条件;

修改表名和修改表结构:alter

修改表名:

alter table 表名 rename 修改后的表名

给表添加一列:

alter table 表名 add 添加的列名 数据类型 default '地址不详'

修改字段的数据类型:

alter table 表名 modify column 列名 数据类型;

删除列:

alter table 表名 drop 删除的列名;

修改列名:

alter table 表名 change 列名 修改后的列名 数据类型; 数据类型可以一起修改

null和空值之间的区别:

null就是啥也没有

空值也是值,只是值为空

示例:

1、在表student中列名(id,name,score) 分别添加1,'swz',60,即id=1,name=swz,score=60

insert into student(id,name,score) values(1,'swz',60);

2、在表student中 依次添加2,'qwe',65,即id=2,name=qwe,score=65

insert into student values(2,'qwe',65);

3、将表student中name=qwe行的id改为2

update student set id=2 where name = 'qwe';

4、将表student中name=qwe行删除

delete from student where name = 'qwe';

5、修改表student为stut

alter table student rename stut;

6、给表student添加一列address,可变长度的字符类型,长度为50

alter table student add address varchar(50) default '地址不详'

7、将表student中的address列数据类型修改为固定长度的字符类型,长度为10

alter table stydent modify column address char(10);

8、删除表student中的address列:

alter table student drop address;

9、修改表student中的name列名为username

alter table student change name username char(10);

最后的数据类型一定要加,可以和列名一起修改

DQL,查询语句:
语法:

select * from 表名;(*表示所有,可以指定列名)

查看指定行:

select * from 表名 limit 2,3;

2,3表示:从第2+1行开始往下3行

去重查询:

select distinct 列名 from 表名

where语句:条件的筛选:

select * from 表名 where 条件(*表示所有,可以指定列名)

and 且

or 或

模糊查找: LIKE

select * from student where 列名 like '内容%'

以内容为开头

select * from student where 列名 like '%内容'

以内容为结尾

示例:

1、查询表student中所有列

select * from student;(*表示所有,可以指定列名)

2、查看表student中前三行:

select * from stydent limit 0,3;

3、去掉表student中name列中重复的

select distinct name from student

4、查找表student中id=1并且score=60的行

select name from student where id = 1 and score = 60;

查找表student中id=1或score=60的行

select name from student where id = 1 or score = 60;

5、查找表student中name列中以q为开头的行

select * from student where name like 'q%';

查找表student中name列中以q为结尾的行

select * from student where name like '%q'

数据库的约束方式:

主键约束:用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null

一个表只能有一个主键

外键约束:用来建立表与表之间关系,确保外键中的值与另一个表的主键匹配,保证数据引用的完整性。 外表联查,不要超过三张,超过三张表会降低查询效率

非空约束:not null,保证列中的值不含null值

唯一性约束:unique key,确保列中的所有值都是唯一的,类似主键,但一个表可以有多个唯一约束

自增约束:auto_increment,在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行时,自增列的值会自动增加

默认值约束:default,在插入表数据时,如果没有定义值,会提供一个默认值。

外键是和主表进行关联的列,不需要设置为从表的主键,但是不能为空,必须和主表的数据类型保存一致。

外键的值和主键的值要相同

先插入主表的数据,再插入从表的数据

删除表的外键不是直接删除外键的列名,要先删除外键的索引,用show create table 表名,查看表是详细信息

删除主键不需要加上主键的列名,如果有extra的额外属性,比如说自增长,要先移除属性,然后才能删除主键

删除主键的方式:alter进行修改

复制表:

create table stu_1 like student;

将表的内容复制:

insert into stu_1 select * from student;

表和表的内容一起复制:

create table stu_2 (select * from student);

创建临时表:

临时表创建完成后,在库里看不到,但是依然可以进行增删改查。重新连接数据后,临时表就会消失

create temporary table 表名

清空表:

drop删除表 (不推荐)

*如何删除表内的数据,但是保留表和表结构

1、delete from 表名 :保留表结构,一行一行的清除表数据,速度比较慢,如果有自增长字段,delete清空之后,会继续按照原来增长的序号继续递增

2、truncate table 表名 :保留表结构,清空之后,原有的记录全部抹去,自增长也从头开始,速度比较快

数据库的用户管理:

root都是相同的,

Host:可以登录的主机,

localhost指的是本地登录

%:任意主机(ip地址)

权限上:localhost > %的权限

创建用户

create user 'gfw'@'192.168.233.10' identified by '123456';

root%localhost 安装完mysql后就有了,不需要额外设置。其他的都需要人工创建 其他的用户也不设置成localhost,都是设置主机名

删除用户

drop user 'gfw'@'192.168.233.10';

设置用户权限

grant all privileges on * . * to 'swz'@'192.168.203.12' identified by '123456'

all:

*. * : 前面*表示库,后面 *表示 库里的表

information_schema:这个库的作用包含了mysql服务器中所有其他数据库,表、列、索引权限等详细的元数据的信息,可以查询数据库的结构和元信息

performance_schema:包含mysql的服务性能和资源利用情况,查询语句的执行时间和锁定信息

查看用户权限

show grants for 'gfw'@'192.168.233.10';

只给用户查的权限

grant select on xy102.* to 'gfw'@'192.168.233.10' ;

给用户多个权限

grant insert,update,alter,delete on xy102.* to 'gfw'@'192.168.233.10' ;

取消权限

revoke all privileges on *.* from 'gfw'@'192.168.233.10' ;

revoke insert,update,alter,delete on xy102.* from 'gfw'@'192.168.233.10' ;

mysql本地免密登录

vim /ect/my.cnf

添加 skip-grant-tables

相关推荐
gma99911 分钟前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️14 分钟前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98761 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
武子康1 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王1 小时前
《MySQL 数据库备份与恢复》
mysql
苏-言1 小时前
Spring IOC实战指南:从零到一的构建过程
java·数据库·spring
Ljw...1 小时前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i1 小时前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
长风清留扬1 小时前
一篇文章了解何为 “大数据治理“ 理论与实践
大数据·数据库·面试·数据治理
OpsEye2 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级