查看数据库信息
show databases;
查看数据库中的表信息
use 数据库名 #切换到书库中
show tables=show tables in mysql
显示数据表的结构(字段)
describe user;可以简写 desc user
第二种方式:
Field:字段名称
type:数据类型
Null :是否允许为空
Key :主键
Type:数据类型
Null :是否允许为空
Default :默认值
Extra :扩展属性,例如:标志符列(标识了种子,增量/步长)1 2
id:1 3 5 7
常用的数据类型:
int:整型 用于定义整数类型的数据
float:单精度浮点4字节32位 准确表示到小数点后六位
double:双精度浮点8字节64位
char:固定长度的字符类型 用于定义字符类型数据。 20字节 4
varchar:可变长度的字符类型 20 4
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位 指定长度数组
#Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错主键是唯一的,但主键可以由多个字段构成
数据库的管理
SQL语句用于维护管理数据库,包括数据查询、数据更新、访问控制、对象管理等功能。
SQL语言分类:
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等
DML:数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限(数据控制语句,用于控制不通数据段直接的许可和访问级别的语句,这些语句定义了数据库、表、字段、用户的访问权限和安全级别,如COMMIT、ROLLBACK、GRANT、REVOKE)
DDL创建数据库和表
使用DDL语句新建库、表 要先建立数据库再去建立表
创建新的数据库
CREATE DATABASE 数据库名;创建新的表
CREATE TABLE 表名 (字段1 数据类型,字段2 数据类型[,...][,PRIMARY KEY (主键名)]);
#主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。
创建数据库:
随后,创建表,在创建表之前,要先切换到数据库里面(ues)
表后面是描述信息
随后,查看表的结构
删除指定的数据表
1.use 数据库名
DROP TABLE 表名
2.DROP TABLE [数据库名.] 表名; 不切换到数据库里面,直接进行删除表
删除指定的数据库
DROP DATABASE 数据库名;
DML管理表中的数据记录
---- 数据操纵语言,用于对表中的数据进行管理,用来插入、删除和修改数据库中的数据
insert 插入
update 更新/修改
delete 删除
给表插入数据 insert into 表名
在字符串中要加入‘’ 数字不需要加
随后,查看一下ky03里面的内容
随后,再添加更多的内容
修改
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];
where 是条件表达式,这边是制定谁,可以用where name 或者where id
在数据表中删除指定的数据记录
格式:
DELETE FROM 表名 [WHERE 条件表达式];
DQL查询数据记录
用于从数据表中查询到符合条件的数据记录
1.selete * from 表名 表示查询所有
2.
需求:只想查看名字跟分数
需求2:只想看见ddz的名字 和分数 后面加上where
显示前几行用limit表示
查看第三行后的前两行 limit 3,2;
以竖向显示\G
数据表高级操作
清空表,删除表内的所有数据
方法一:
delete from ky03;
DELETE清空表后,返回的结果内有删除的记录条目;
DELETE 工作时是一行一行的删除记录数据的;如果表中有自增长字段,使用DELETE FROM 删除
所有记录后,再次新添加的记录会从原来最大的记录ID后面继续自增写入记录。例如,删除前面的4行数据,如果再开始写数据,则从5行开始写起。
方法二:
truncate table test01;
#RUNCATE清空表后,没有返回被删除的条目: TRUNCATE 工作时是将表结构按原样重新建立,
因此在速度上TRUNCATE会比DELETE清空表快;使用TRUNCATE TABLE 清空表内数据后,
ID会从1开始重新记录。例如,删除前面的4行数据,如果再开始写数据,则从1开始写起。
删除类型总结:
drop table table_name
1)属于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)册删除速度慢,需要逐行删除不再需要一张表的时候,用drop
想删除部分数据行时候,用delete,并且带上where子句
保留表而删除所有数据的时候用truncate#删除速度
drop> truncate > delete
安全性delete 最好
临时表(是放在缓存当中)
临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。
如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除临时表。
int() zerofill:表示若数值不满位数,则前面用"0"填充,例000001
#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;
自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且
添加失败也会自动递增一次
#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键
#not null:表示此字段不允许为NULL
用select * from ky04 是可以看见的,这边没有是因为没有插入表内容
此时,添加一个数据,然后再查看,就可以看出
再次插入一条数据
临时表,只要一退出,就消失了
再次查看ky04,已经没有了
克隆表
create table yyy2 like yyy; #复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
insert into yyy2 select * from yyy; #备份内容
克隆表,将数据表的数据记录生成到新的表中
CREATE TABLE test02 (SELECT * from test); #复制test 表数据到test02中
show create table test02\G #获取数据表的表结构、索引等信息
SELECT * from test02;
第一种方式:
ky04是新表,ky03是旧表
有主键
随后,将ky03的内容复制到ky04上
第二种方式
查看表的结构,没有主键和唯一键
二者唯一的区别:第一种方式,主键都克隆在里面,内容是一样的
第二种方式,主键没有克隆在里面,内容也是一样的
DCL修改表名和表结构
1.修改表名 alter table 旧表名 rename 新表名
修改过的新名字,表中内容不变
2.增加字段 add
默认值都是laozishan
3.对字段名进行修改
初始ky88的表结构
随后对name字段进行修改 change
删除 alter table 表名 drop 字段名
总结:
数据库用户管理
1.新建用户 要先切换到mysql数据库里面 然后再建立用户
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
'用户名':指定将创建的用户名.
'来源地址':指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录
可用通配符%
'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD('密码');获取密文,再在语句中添PASSWORD '密文';
若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)
mysql> use mysql;
Database changed
mysql> select * from user\G #查看用户信息 所有创建后的user用户信息均在user表里
*************************** 1. row ***************************
Host: localhost
User: root
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1
password_expired: N
password_last_changed: 2024-03-19 19:27:52
password_lifetime: NULL
account_locked: N
*************************** 2. row ***************************
Host: localhost
User: mysql.sys
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
Create_tablespace_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE
password_expired: N
password_last_changed: 2024-03-19 19:25:59
password_lifetime: NULL
account_locked: Y
2 rows in set (0.00 sec)
mysql>
随后,新建用户 huyu
随后再去查看user
查看user数据表中加密密码
select authentication_string from user where user='huyu';
查看用户信息
创建后的用户保存在mysql 数据库的user表里
USE mysql;
SELECT User,authentication_string,Host from user;
重命名指定
例子:RENAME USER 'zhangsan'@'localhost' TO 'lisi'@'localhost';
如何查看密码
删除用户
DROP USER 'lisi'@'localhost' ;
修改当前密码
SET PASSWORD = PASSWORD('abc123');
修改其他用户密码
修改其他用户密码
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123T');
随后,登录dxtz用户
忘记root密码
修改/etc/my.cnf 配置文件,免密登陆mysql
vim /etc/my.cnf
[mysqld]
skip-grant-tables #添加,使登录mysql不使用授权表systemctl restart mysqld
mysql #直接登录
第一步,先修改配置文件
修改配置文件,在mysqld块下添加skip-grant-tables
保存后,退出
然后直接修改数据库的用户表中的对应密码数据;然后再返回配置文件,删除skip-grant-tables,然后重启服务
Update修改密码
然后使用SQL语句修改密码
UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('abc123') where user='root';修改当前密码
SET PASSWORD = PASSWORD('abc123');修改其他用户密码
SET PASSWORD FOR 'user1'@'localhost' = PASSWORD('abc123T');
随后,用密码123123登录
修改密码
直接修改
set password for root@localhost=password('123');
第一步在配置文件添加skip-grant-tables
随后,重启
进来之后刷新
随后,再去修改配置文件将那行注释掉
数据库用户授权
grant 提权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
①权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select, insert, update”。使用"all"表示所有权限,可授权执行任何操作。
②数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符"*"。例如,使用“class.*"表示授权操作的对象为class数据库中的所有表。③用户名@来源地址’:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP 地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.accp.com”、“192.168.48.%”等。 %表示所有
④IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分, 则用户的密码将为空。
给指定用户select权限
示例:
#允许用户zhangsan在本地查询school数据库中所有表的数据记录,
但禁止查询其他数据库中的表的记录。
GRANT select ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';
用dxtz的用户去登录
随后查看数据库
使用Navicat图形化工具远程连接
#允许用户lisi在所有终端远程连接mysql,并拥有所有权限。
GRANT ALL [PRIVILEGES] ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';GRANT ALL PRIVILEGES ON 数据库名.* TO 'lisi'@'192.168.10.2' IDENTIFIED BY 'abc123';
当输入xshell的ip地址时 是连接不上的
现在授权
检测一下
可以看到zhangsan里面的表
查看权限
mysql -u root -pabc123
SHOW GRANTS FOR 用户名@来源地址;
SHOW GRANTS FOR 'lisi'@'%';
还是在root用户里面去查看
撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;
REVOKE ALL ON *.* FROM 'lisi'@'%';
SHOW GRANTS FOR 'lisi'@'%';
#USAGE权限只能用于数据库登陆,不能执行任何操作; USAGE权限不能被回收,即REVOKE不能删除用户。
flush privileges;
检测一下 没有表了