mysql 的数据的操作增删改查和用户管理
Posted 遙遙背影暖暖流星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 的数据的操作增删改查和用户管理相关的知识,希望对你有一定的参考价值。
数据库操作和用户管理
一,基础操作
1、常用的数据类型:
int:整型,用于定义整数类型的数据
float:单精度浮点4字节32位,准确表示到小数点后六位
double:双精度浮点8字节64位
char:固定长度的字符类型,用于定义字符类型数据。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(10) not 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的基础 增删改查和$用法