mysql 的数据的操作增删改查和用户管理

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 的数据的操作增删改查和用户管理相关的知识,希望对你有一定的参考价值。

一,基础操作

1、常用的数据类型:

int:整型,用于定义整数类型的数据
float:单精度浮点4字节32位,准确表示到小数点后六位
double:双精度浮点8字节64char:固定长度的字符类型,用于定义字符类型数据。13814542131 则为char (11)
varchar:可变长度的字符类型,varchar设置上限varchar ( 10)123456
text:文本
image:图片
decimal (5,2):5个有效长度数字,小数点后面有2位,指定整数和小数位数
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取(四舍五入),高版本会报错

名称解析:
Trype:数据类型
Null :是否允许为空
Key :主键,PRI
Default :默认值(即该项不填时会直接以默认值)
Extra :扩展属性,例如:标志符列(标识了种子,增量/步长,可以规定相邻id的间隔)
id 1 3 5 7

2、SQL语言分类:

DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限

二、操作部分

1、DDL 语句

show databases;       #列出当前mysql系统只中所有的库名

creare database school;    #创建名为banji的数据库

use school ;                          #进入数据库

create table banji;    #进入库中的创建一个名为banji的表,每行加()中可设置各字段的名称和属性

show tables;        #查看当前的库中所有的表名

desc 表名;        #查看该表的结构

drop database school;     #删除整个库

drop table school.banji;   #删除的库的中某个表,. 连接

create table banji (id int not null,name varchar(20) not null,score decimal(5,2) not null,address varchar(50) default ‘china’,primary key(id));

#创建一个banji的表,第一个字段是id,整数型,不能为空;
第二个字段为name,最长为20字节不为空;
第三为字段score ,整数部分5位和小数部分两位,不为空;
第四个字段为address,最长为50字节默认china ;
将名称为id的字段设为主键(主键的序号具有唯一性,primary key 不能为空)

2、DML表中数据的管理

insert #插入新数据

update #更新数据

delete #删除数据

insert into 表名 (字段1,字段二 …) values (字段1的值,字段2的值…)

1、insert into banji (id,name,score,address) values (1,‘lisi’,90.50,‘guangdong’);
#在班级表中插入,数据的顺序为(id,name,score,address,且分别为1,‘lisi’,90.50,‘guangdong’,字符串的用单引号’‘

2、insert into banji values(6,‘liuyifei’,99,‘xianggang’,18);
#当让输入的值的个数刚好对应上字段数,则可以直接写后面的values的内容在这里插入图片描述
update 表名 set 字段名1=字段值,字段名2=字段值 where 字段=字段值

update banji set name=‘gutianle’, age=25 where id=4;

#where的后面的字段最好为主键内容,主键具有唯一性,可以精确定位,修改多个字段的内容用 , 隔开

delete from 表名 where 字段=字段值

delete from banji where id=4;

3、数据查询

select * from 表名;
或者select 别名. * from 表名 表别名;

select * from banji;

select txt.* from banji txt;    #当库中表很多时,输入表的别名可以有效提高查询速度

在这里插入图片描述
查询结果相同

利用select 过滤

select name,age,score from banji;

select name,age,score from banji  where id=6;

select name,age,score from banji\\G;         #以列表方式竖向显示

select  * from banij  limit 3 ;                        #只显示头3行

select * from banji limit 2,3;                     #显示第3行后的前3

4、DCL 更改数据库用户或角色权限

4.1、alter 修改表名和表结构

alter table 旧表名 rename 新表名;
或者rename table 旧表名 新表名

alter table banji rename banji1;     #修改表名

4.2、修改字段名

unique key 和primary key 主键

unique key # 唯一键,可以为空,但只能出现一次

primary key #非空主键

alter table 表名 change 旧段名 新段名 属性

#change 可以改变段名或的字段的属性
alter table banji change name user_name varchar(10) unique key;     
#修改name 为user_name,长度最多10且为为唯一主键

alter table yiban change age age varchar(4) not null;   #字段名相同时修改后面的属性

4.3、增加字段名

alter table 表名 add 新段名 属性

alter table banji add hobby varchar(10not null # 增加一个名为hobby的字段

4.4、删除字段名

alter table 表名 drop 字段名;

alter table banji drop hobby l # 删除一个名为hobby的字段

5、高级操作

create table if not exists erban (id int(4) zerofill primary key auto_increment,name varchar(10) not null,cardid int(18)not null unique , hobby varchar(50),age int(4),score decimal(5,2),address varchar(50));


#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建
# int(4) zerofill:表示若数值不满4位数,则前面用"o"填充,例0001
# auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增自长,数据据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递一次
# unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
# not null:表示此字段不允许为NULL

在这里插入图片描述

数据表高级操作
create table yyy2 like yyy;#复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
insert into yyy2  select * from yyy;  #备份内容


克隆表,将数据表的数据记录生成到新的表中
CREATE TABLE test02 (SELECT * from test);   #复制test表数据到testo2中

show create table test02\\G;      #获取数据表的表结构、索引等信息

6、清空表中数据

清空表,删除表内的所有数据方法一:
delete from yyy3;
DELETE清空表后,返回的结果内有删除的记录条目;
DELETE工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM删除所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。


方法二:
truncate table testo1;
#TRUNCATE清空表后,没有返回被删除的条目:TRUNCATE工作时是将表结构按原样重新建立,因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE清空表内数据后,
ID会从1开始重新记录


小结:#删除类型
drop table table_name1)属于DDL
2)不可回滚(无法恢复)
3)不可带where
4)表内容和结构册除5
)册除速度快
truncate table table name
1)属于DDL
2)不可回滚
3)不可带where
4)表内容删除
5)删除速度快
delete from table_name
1)属于DML
2)可回滚(可恢复)
3)可带where
4)表结构在,表内容要看where执行的情况
5)删除速度慢,需要逐行删除

delete 和 truncate 仅仅删除表数据,drop 连表数据和表结构一起删除,打个比方,delete 是单杀,truncate 是团灭,drop 是把电脑摔了。
delete 是 DML 语句,操作完以后如果没有不想提交事务还可以回滚,truncate 和 drop 是 DDL 语句,操作完马上生效,不能回滚,打个比方,delete 是发微信说分手,后悔还可以撤回,truncate 和 drop 是直接扇耳光说滚,不能反悔。
执行的速度上,drop>truncate>delete,打个比方,drop 是神舟火箭,truncate 是和谐号动车,delete 是自行车。

实际生产中最好用delete

7、创建一个临时的表
create temporary table 表名(字段1 数据类型, 字段2 数据类型…)
#利用show tables看不搭配建设的临时表,退出mysql后临时表自动删除。

二、主键和外键

1、建立主表 test01和从表text02

create table test01 (hobid int(4),hobnanme varchar(50));

create table test02 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4));

表一和表二和相同的字段为hobid

2、设置主键和外键约束

MysQL中6种常见的约束

主键约束(primary key)
外键约束(foreign key)
非空约束(not null)
唯一性约束(unique [ key | index])
默认值约束(default)
自增约束(auto_increment)

alter table test01 add constraint PK_hobid primary key (hobid);
#在一表中设置主键hobid 约束,使其成为主表

alter table test02 add constraint FK_hobid foreign key (hobid) references test01(hobid);
#设置表一和表二的联系,在表二种hobid成为了外键。reference引用
在这里插入图片描述
show create table test02;
在这里插入图片描述

3、主从表的数据插入和清除

插入新的数据记录时,要先主表再从表(主表没有的主键内容,外边不能先拥有)
insert into test01 values ( 1, " runing ’ ) ;
insert into test02 values (1, ’ zhangsan’,18,1);

删数数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表
drop tables test02;
drop tables test01;

如果要删除外键约束字段先删除外键约束,再删除外键名
show create table test02; #查看外键约束

alter table test02 drop foreign key FK_hobid;
alter table testo2 drop key FK_hobid; #注意删两次

desc test02;

三、用户管理

1、新建用户

create user ‘用户名’@'来源地址’ identified by [PASSWORD] ‘密码’;


create user 'lv74134' @'localhost' identified by '123456';    

2、密文形式创建用户

select password('123456')
+----------------------------------------------------------------------------------+
| password('123456')                        |
+----------------------------------------------------------------------------------+
| *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+---------------------------------------------------------------------------------+
create user 'xiaowang' @'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
#创建用户的密码以密文设置
'用户名':指定将创建的用户名
'来源地址:指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录
可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密
若使用加密密码,需要先使用SELECT PASSWORD('密码')﹔获取密文,再在语句中添PASSWORD'密文';若省略"IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)

3、查看用户信息

USE mysql;
SELECT User,authentication_string,Host from user;
#用户信息保存在数据库mysql的user表里

4、重命名指定

rename user ‘zhangsan’@‘localhost’ to ‘lisi’ @‘localhost’;

5、删除用户

drop user ‘lisi’@‘localhost’;

6,修改当前用户密码

set password = password(‘abc123’)

7、修改其他用户密码

SET PASSWORD FOR ‘user1’@‘localhost’ = PASSWORD ( ’ abc123’);

8、忘记root密码的解决办法


修改/etc/my.cnf 配置文件,免密登陆mysqlvim /etc/my.cnf
[mysqld]
skip-grant-tables     #添加,使登录mysql不使用授权表
-----------------------------
systemctl restart mysqld  #重启
mysql   #直接登录
然后使用SQL语句修改密码
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD ('abc123') where user='root';
FLUSH PRIVILEGES;    #刷新权限
quit
mysql -u root -pabc123
Ps:最后再把/etc/my.cnf配置文件里的skip-grant-tables 删除,并重启mysql服务

在这里插入图片描述

四、数据库用户授权

1、grant提权


GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址’ [IDENTIFIED BY '密码'];

#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如"select,insert,update"。使用"all"表示所有权限,可授权执行任何操作。

#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"。例如,使用"sch.*"表示授权操作的对象为sch数据库中的所有表。

#用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用"%"通配符,表示某个区域或网段内的所有地址,如"%.xyw.com""192.168.226.%"等。

#IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。

#允许用户zhangsan在本地查询sch数据库中所有表的数据记录,但禁止查询其他数据库中的表的记录。
GRANT select ON sch.* To 'zhangsan' @ 'localhost' IDENTIFIED BY 'abc123 ';

#允许用户lisi在所有终端远程连接mysql,并拥有所有权限。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%’ IDENTIFIED BY '123456';

flush privileges;      #刷新权限(刷新的是权限表)

2、查看权限

show grants from 用户名@来源地址;

 show grants from  ’lisi‘@’%‘;

3、撤销权限

revoke 权限列表 on 数据库.表面 from 用户名@来源地址;

revoke all on *.* from 'lisi'@'%';
flush privileges;
#usage 权限只能用于数据库登录,不能执行任何操作,usage权限不能被删除,否则相当于删除用户。

以上是关于mysql 的数据的操作增删改查和用户管理的主要内容,如果未能解决你的问题,请参考以下文章

48. 访问MySql数据库增删改查和连接池及空字段处理 | 厚土Go学习笔记

用SpringBoot+MySql+JPA实现对数据库的增删改查和分页

java程序设计课期中考试——数据库的增删改查和简单的js界面

doraemon的python MongoDB的基础 增删改查和$用法

MySQL数据库系列二MySQL数据库增删改查(聚合查询多表查询)

MySQL数据库系列二MySQL数据库增删改查(聚合查询多表查询)