我是靠谱客的博主 迅速煎蛋,最近开发中收集的这篇文章主要介绍MYSQL概述,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、数据库的概念

①数据
使用一些介质进行存储,例如数字、文字存在文档和表格里
数据库可以完成数据持久化保存+快速提取
实现以上功能,需要编写一系列的规则,也就是SQL语句。
SQL语句 按功能分类: 增删改查

②数据库类型:
关系型数据库、非关系型数据库
1) 关系型数据库: 存储的往往是字符、字符串、数值、布尔值等
2) 非关系型数据库:存储的往往是图片、视频、语音等

关系型数据库有:
Mysql(Oracle公司) 、 SQL server(微软) 、access(微软公司office产品)等等。

非关系型数据库(NoSQL):
MongoDB 、 Redis(内存数据库/缓存数据库)K-V键值等

③表
记录:行
字段(属性): 列
以行+列的形式就组成了表(数据存储在表中)

④数据库
多张表存储在数据库中
“关系型数据库” 表与表字段/属性的关联

二、非关系型数据库

关系型数据库: 适用于对关系很明确的数据建立模型、定义、存储数据
非关系型数据库: 存储海量数据,给与”大数据“进行分析,筛选出有价值的部分

三、MYSQL数据库

Mysql 存储引擎
myisam 和innodb
myisam:快速读取,不支持事务
innodb:更注重写,支持事务
mysql 数据库管理
describe user;

常用的数据类型:
int:整型 例如:1,2,3,4,5,6…用于定义整数类型的数据
float:单精度浮点4字节32位 例如:0.999998 准确表示到小数点后六位
double:双精度浮点8字节64位
①double 型 数据, 每个数 占用 2进制 64位, 各位值的定义按 国际标准 IEEE 754 标准。有效数字精度 可达 十进制 14-15位。

char:固定长度的字符类型 用于定义字符类型数据的固定长度。
注:Char如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错

varchar:可变长度的字符类型 字符长度由实际情况而变的字符类型数据
text:文本
image:图片
decimal(5,2):5个有效长度数字,小数点后面有2位 指定长度数组
主键是唯一的,同时也可以由多个字段组成

**四、数据库管理(sql语句)

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

①DDL:数据定义语言:create 、drop
创建新的数据库格式:
create +database+数据库名
创建新的表格式:
create+table+表名( 字段1 数据类型,字段2 数据类型[,…][,PRIMARY KEY (主键名)] )
注:主键一般选择能代表唯一性的字段不允许取空值(NULL),一个表只能有一个主键。**

例如
create datadase hwy;
在这里插入图片描述

create table didi(id int(4) not null,name char(10) not null,scrore decimal(5,2),passwd char(50) default'', primary KEY(id));
Query OK, 0 rows affected (0.01 sec)
mysql> desc didi;
+--------+--------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+--------+--------------+------+-----+---------+-------+
| id
| int(4)
| NO
| PRI | NULL
|
|
| name
| char(10)
| NO
|
| NULL
|
|
| scrore | decimal(5,2) | YES
|
| NULL
|
|
| passwd | char(50)
| YES
|
|
|
|
+--------+--------------+------+-----+---------+-------+
4 rows in set (0.02 sec)

在这里插入图片描述
注:
not null 不允许为空值
default ‘’ 默认值为空
primary K EY:主键一般选择没有重复并且不为空值的字段

删除指定的数据表
use+ 数据库名
drop +table+ 表名
DROP +TABLE+ [数据库名.] +表名; 注如不用USE进入库中,则需加上数据库名

删除指定的数据库
DROP +DATABASE+ 数据库名;

②、DML管理表中的数据记录
1)insert
2)update
3)delete

1)、建表格式:
INSERT+ INTO+ 表名(字段1,字段2[,…]) VALUES (字段1的值,字段2的值,…);
例:

mysql> insert into didi(id,name,scrore,passwd) values(1,'wanger',80,password('12345678'));
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into didi values(2,'mazi',90,'87654321');
Query OK, 1 row affected (0.00 sec)
mysql> select * from didi;
+----+--------+--------+-------------------------------------------+
| id | name
| scrore | passwd
|
+----+--------+--------+-------------------------------------------+
|
1 | wanger |
80.00 | *84AAC12F54AB666ECFC2A83C676908C8BBC381B1 |
|
2 | mazi
|
90.00 | 87654321
|
+----+--------+--------+-------------------------------------------+
2 rows in set (0.00 sec)

在这里插入图片描述
注:PASSWORD(‘123456’):查询数据记录时,密码字串以加密形式显示:若不使用PASSWORD(),查询时以明文显示。

INSERT+ INTO+ didi+ VALUES(2,‘mazi’,90.5,87654321) ;
SELECT +
+FROM+ didi ; #查询表的数据记录
*

2)、修改、更新数据表中的数据记录
格式:
UPDATE 表名 SET 字段名1=字段值1[,字段名2=字段值2] [WHERE 条件表达式];

mysql> update didi set name='zhangsan',passwd=''where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1
Changed: 1
Warnings: 0
mysql> update didi set passwd=password('') where name='zhangsan';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1
Changed: 0
Warnings: 0
mysql> select * from didi;
+----+----------+--------+----------+
| id | name
| scrore | passwd
|
+----+----------+--------+----------+
|
1 | zhangsan |
80.00 |
|
|
2 | mazi
|
90.00 | 87654321 |
+----+----------+--------+----------+
2 rows in set (0.00 sec)

在这里插入图片描述
实验结果如上图:
UPDATE didi SET passwd=PASSWORD(‘’) WHERE name=‘zhangsan’;
UPDATE didi SET name=‘wanger’,passwd=‘’ WHERE id=1;

3)、在数据表中删除指定的数据记录
格式:
DELETE+ FROM+ 表名+[WHERE +条件表达式];

实验:
DELETE FROM didi WHERE id=1;

mysql> delete from didi where id=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from didi;
+----+------+--------+----------+
| id | name | scrore | passwd
|
+----+------+--------+----------+
|
2 | mazi |
90.00 | 87654321 |
+----+------+--------+----------+
1 row in set (0.00 sec)

在这里插入图片描述

③、DQL查询数据记录
select

1)、格式:
SELECT+ 字段名1,+字段名2[,…] FROM +表名+[WHERE +条件表达式];

实验:

SELECT * FROM didi;
SELECT id,name,score FROM didi WHERE id=2;
select name from didiG #以列表方式竖向显示
select * from didi limit 2; #只显示头2行
select * from didi limit 1,2; #显示第2行后的前3行

mysql> select id,name,scrore from didi where id=2;
+----+------+--------+
| id | name | scrore |
+----+------+--------+
|
2 | mazi |
90.00 |
+----+------+--------+
1 row in set (0.00 sec)
mysql> select name from didiG;
*************************** 1. row ***************************
name: mazi
1 row in set (0.00 sec)
sql> select * from didi limit 1;
+----+------+--------+----------+
| id | name | scrore | passwd
|
+----+------+--------+----------+
|
2 | mazi |
90.00 | 87654321 |
+----+------+--------+----------+
1 row in set (0.00 sec)
mysql> select * from didi limit 1,2;
Empty set (0.00 sec)
mysql> select * from didi limit 2;
+----+------+--------+----------+
| id | name | scrore | passwd
|
+----+------+--------+----------+
|
2 | mazi |
90.00 | 87654321 |
+----+------+--------+----------+
1 row in set (0.00 sec

在这里插入图片描述
在这里插入图片描述

2)、#修改、更新数据表中的数据记录
格式:
UPDATE+ 表名 +SET+ 字段名1=字段值1[,字段名2=字段值2]+ [WHERE 条件表达式];

实验:

UPDATE didi SET passwd=PASSWORD(‘’) WHERE name=‘zhangsan’;
UPDATE didi SET name=‘wangxiaoer’,passwd=‘’ WHERE id=2;

mysql> update didi set passwd=password('') where name='wanger';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0
Changed: 0
Warnings: 0
mysql> update didi set name='mazi',passwd='' where id= 2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1
Changed: 1
Warnings: 0
mysql> select * from didi;
+----+------+--------+--------+
| id | name | scrore | passwd |
+----+------+--------+--------+
|
2 | mazi |
90.00 |
|
+----+------+--------+--------+
1 row in set (0.00 sec)

在这里插入图片描述
在这里插入图片描述

3)、在数据表中删除指定的数据记录
格式:
DELETE +FROM+ 表名+ [WHERE +条件表达式];

示例:
DELETE+ FROM +didi+ WHERE id=4;

4)、修改表名和表结构
ALTER +TABLE +旧表名+ RENAME +新表名;

例:
ALTER TABLE didi RENAME gg;

ALTER TABLE yyy RENAME zzz;

mysql> alter table didi rename gg;
Query OK, 0 rows affected (0.01 sec)
mysql> show table
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> select * from gg;
+----+------+--------+--------+
| id | name | scrore | passwd |
+----+------+--------+--------+
|
2 | mazi |
90.00 |
|
+----+------+--------+--------+
1 row in set (0.00 sec)
mysql> alter table gg rename didi;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from didi;
+----+------+--------+--------+
| id | name | scrore | passwd |
+----+------+--------+--------+
|
2 | mazi |
90.00 |
|
+----+------+--------+--------+
1 row in set (0.00 sec)

在这里插入图片描述

扩展表结构(增加字段)
ALTER +TABLE+ 表名+ ADD +address+ varchar(50) +default ‘地址不详’;
#default ‘地址不详’:表示此字段设置默认值为地址不详,可与NOT NULL配合使用

mysql> alter table didi add address varchar(50) default'地址不详';
Query OK, 0 rows affected (0.05 sec)
Records: 0
Duplicates: 0
Warnings: 0
mysql> select * from didi;
+----+------+--------+--------+--------------+
| id | name | scrore | passwd | address
|
+----+------+--------+--------+--------------+
|
2 | mazi |
90.00 |
| 地址不详
|
+----+------+--------+--------+--------------+
1 row in set (0.00 sec)

在这里插入图片描述

ALTER +TABLE+ didi +ADD+ address +varchar(50)+ NOT +NULL+ default ‘地址不详’;

mysql> alter table didi add activity varchar(50)not null default'';
Query OK, 0 rows affected (0.05 sec)
Records: 0
Duplicates: 0
Warnings: 0
mysql> select * from didi;
+----+------+--------+--------+--------------+----------+
| id | name | scrore | passwd | address
| activity |
+----+------+--------+--------+--------------+----------+
|
2 | mazi |
90.00 |
| 地址不详
|
|
+----+------+--------+--------+--------------+----------+
1 row in set (0.00 sec)

在这里插入图片描述

4)、修改字段(列)名,添加唯一键
ALTER +TABLE+ 表名+ CHANGE +旧列名 +新列名 +数据类型+ [unique key];

ALTER TABLE didi CHANGE name user_name varchar(10) unique key;
#CHANGE可修改字段名、数据类型、约束等所有项。

删除字段
格式:
ALTER+ TABLE+ 表名 +DROP+ 字段名;

实验:
①alter table didi change activity number varchar(11) not null default’15112357890’ unique key;

mysql> alter table didi change activity number varchar(11) not null default'15112357890' unique key;
Query OK, 1 row affected (0.02 sec)
Records: 1
Duplicates: 0
Warnings: 0
mysql> select * from didi;
+----+------+--------+--------+--------------+--------+
| id | name | scrore | passwd | address
| number |
+----+------+--------+--------+--------------+--------+
|
2 | mazi |
90.00 |
| 地址不详
|
|
+----+------+--------+--------+--------------+--------+
1 row in set (0.00 sec)

在这里插入图片描述
②alter table didi drop passwd;

mysql> alter table didi drop passwd;
Query OK, 0 rows affected (0.05 sec)
Records: 0
Duplicates: 0
Warnings: 0
mysql> desc didi;
+---------+--------------+------+-----+--------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+---------+--------------+------+-----+--------------+-------+
| id
| int(4)
| NO
| PRI | NULL
|
|
| name
| char(10)
| NO
|
| NULL
|
|
| scrore
| decimal(5,2) | YES
|
| NULL
|
|
| address | varchar(50)
| YES
|
| 地址不详
|
|
| number
| varchar(11)
| NO
| UNI | 15112357890
|
|
+---------+--------------+------+-----+--------------+-------+
5 rows in set (0.00 sec)

在这里插入图片描述

###########################################扩展#########################################################
use pxs;
create table if not exists info (
id int(4) zerofill primary key auto_increment, #指定主键的第二种方式
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));

mysql> show databases;
+--------------------+
| Database
|
+--------------------+
| information_schema |
| mysql
|
| performance_schema |
| pxs
|
| sys
|
+--------------------+
5 rows in set (0.00 sec)
mysql> use pxs;
Database changed
```csharp
mysql> mysql> create table if not exists info(id int(4) zerofill primary key auto_incname varchar(10) not null,cardid int(18) not null unique key,hobby varchar(50));
Query OK, 0 rows affected, 1 warning (0.00 sec)

在这里插入图片描述
**#if not exists:表示检测要创建的表是否已存在,如果不存在就继续创建

#int(4) zerofill:表示若数值不满4位数,则前面用"0"填充,例0001

#auto_increment:表示此字段为自增长字段,即每条记录自动递增1,默认从1开始递增;

自增长字段数据不可以重复;自增长字段必须是主键;如添加的记录数据没有指定此字段的值且添加失败也会自动递增一次

#unique key:表示此字段唯一键约束,此字段数据不可以重复:一张表中只能有一个主键,但是一张表中可以有多个唯一键

#not null:表示此字段不允许为NULL**

##############################################################################################################
5)、数据表高级操作
create table dada like didi; #复制格式,通过LIKE方法,复制yyy表结构生成yyy2表

mysql> create table dada like didi;
Query OK, 0 rows affected (0.01 sec)
mysql> desc dada;
+---------+--------------+------+-----+--------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+---------+--------------+------+-----+--------------+-------+
| id
| int(4)
| NO
| PRI | NULL
|
|
| name
| char(10)
| NO
|
| NULL
|
|
| scrore
| decimal(5,2) | YES
|
| NULL
|
|
| address | varchar(50)
| YES
|
| 地址不详
|
|
| number
| varchar(11)
| YES
| UNI | 15112357890
|
|
+---------+--------------+------+-----+--------------+-------+
5 rows in set (0.00 sec)
mysql> desc didi;
+---------+--------------+------+-----+--------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+---------+--------------+------+-----+--------------+-------+
| id
| int(4)
| NO
| PRI | NULL
|
|
| name
| char(10)
| NO
|
| NULL
|
|
| scrore
| decimal(5,2) | YES
|
| NULL
|
|
| address | varchar(50)
| YES
|
| 地址不详
|
|
| number
| varchar(11)
| YES
| UNI | 15112357890
|
|
+---------+--------------+------+-----+--------------+-------+
5 rows in set (0.00 sec)

在这里插入图片描述

insert into dada select * from didi; #备份内容

mysql> insert into dada select * from didi;
Query OK, 3 rows affected (0.01 sec)
Records: 3
Duplicates: 0
Warnings: 0
mysql> desc dada;
+---------+--------------+------+-----+--------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+---------+--------------+------+-----+--------------+-------+
| id
| int(4)
| NO
| PRI | NULL
|
|
| name
| char(10)
| NO
|
| NULL
|
|
| scrore
| decimal(5,2) | YES
|
| NULL
|
|
| address | varchar(50)
| YES
|
| 地址不详
|
|
| number
| varchar(11)
| YES
| UNI | 15112357890
|
|
+---------+--------------+------+-----+--------------+-------+
5 rows in set (0.00 sec)

在这里插入图片描述
6)、克隆表,将数据表的数据记录生成到新的表中
CREATE TABLE test (SELECT * from didi); #复制test 表数据到test02中

mysql> create table test (select * from didi);
Query OK, 3 rows affected (0.01 sec)
Records: 3
Duplicates: 0
Warnings: 0
mysql> desc test;
+---------+--------------+------+-----+--------------+-------+
| Field
| Type
| Null | Key | Default
| Extra |
+---------+--------------+------+-----+--------------+-------+
| id
| int(4)
| NO
|
| NULL
|
|
| name
| char(10)
| NO
|
| NULL
|
|
| scrore
| decimal(5,2) | YES
|
| NULL
|
|
| address | varchar(50)
| YES
|
| 地址不详
|
|
| number
| varchar(11)
| YES
|
| 15112357890
|
|
+---------+--------------+------+-----+--------------+-------+
5 rows in set (0.01 sec)

在这里插入图片描述

show create table test02G #获取数据表的表结构、索引等信息

mysql> show create table didiG;
*************************** 1. row ***************************
Table: didi
Create Table: CREATE TABLE "didi" (
"id" int(4) NOT NULL,
"name" char(10) NOT NULL,
"scrore" decimal(5,2) DEFAULT NULL,
"address" varchar(50) DEFAULT '地址不详',
"number" varchar(11) DEFAULT '15112357890',
PRIMARY KEY ("id"),
UNIQUE KEY "number" ("number"),
UNIQUE KEY "activity" ("number"),
UNIQUE KEY "number_2" ("number")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
ERROR:
No query specified

在这里插入图片描述
SELECT * from test02;
在这里插入图片描述

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

mysql> delete from test;
Query OK, 3 rows affected (0.01 sec)
mysql> select * from test;
Empty set (0.00 sec)

在这里插入图片描述

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

mysql> insert into test select * from didi;
Query OK, 3 rows affected (0.01 sec)
Records: 3
Duplicates: 0
Warnings: 0
mysql> select * from test;
+----+----------+--------+--------------+-------------+
| id | name
| scrore | address
| number
|
+----+----------+--------+--------------+-------------+
|
2 | mazi
|
90.00 | 地址不详
|
|
|
3 | zhangsan |
NULL | 地址不详
| 12345678
|
|
4 | lisi
|
NULL | 地址不详
| 15112357890 |
+----+----------+--------+--------------+-------------+
3 rows in set (0.00 sec)
mysql> truncate table test;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
Empty set (0.00 sec)

#删除
速度
drop> truncate > delete
安全性
delete 最好

创建临时表
临时表创建成功之后,使用SHOWTABLES命令是看不到创建的临时表的,临时表会在连接退出
后被销毁。
如果在退出连接之前,也可以可执行增删改查等操作,比如使用DROP TABLE语句手动直接删除
临时表。

实例:无法创建外键
CREATE TEMPORARY TABLE 表名 (字段1 数据类型,字段2 数据类型[, …] [, PRIMARY KEY (主键名)]);

四、MySQL中6种常见的约束/规则

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

外键的定义:如果同一个属性字段x在表一中是主键,而在表二中不是主键,则字段x称为表二的外键。

创建外键约束作用(误删,修改),保证数据的完整性和一致性。
主键表和外键表的理解
(1)以公共关键字作主键的表为主键表(父表、主表)
(2)以公共关键字作外键的表为外键表(从表、外表)
注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,
主表外键字段和从表的字段具备相同的数据类型、字符长度和约束。

#创建主表test03
create table test03 (hobid int(4),hobname varchar(50));

mysql> create table test03 (hobid int(4),hobname varchar(50));
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

#创建从表test04
create table test04(id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4)) ;

mysql> create table test04 (id int(4) primary key auto_increment,name varchar(10),age int(3),hobid int(4)) ;
Query OK, 0 rows affected (0.01 sec

在这里插入图片描述

#为主表test03添加一个主键约束。主键名建议以"PK_”开头。
alter table test03 add constraint PK_hobid primary key(hobid);

mysql> alter table test03 add constraint PK_hobid primary key((hobid);
Query OK, 0 rows affected (0.01 sec)
Records: 0
Duplicates: 0
Warnings: 0

在这里插入图片描述

#为从表test04表添加外键,并将test04表的hobid字段和test03表的hobid字段建立外键关联。
外键名建议以"FK_”开头。
alter table test04 add constraint FK_hobid foreign key(hobid) references test03(hobid);
references :引用

#可以使用查询表语句结构命令查看外键关联
show create table test04;

mysql> alter table test04 add constraint FK_hobid foreign key(hobid) references test03(hobid);
Query OK, 0 rows affected (0.01 sec)
Records: 0
Duplicates: 0
Warnings: 0
mysql> show create table test04;
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table
| Create Table
|
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test04 | CREATE TABLE "test04" (
"id" int(4) NOT NULL AUTO_INCREMENT,
"name" varchar(10) DEFAULT NULL,
"age" int(3) DEFAULT NULL,
"hobid" int(4) DEFAULT NULL,
PRIMARY KEY ("id"),
KEY "FK_hobid" ("hobid"),
CONSTRAINT "FK_hobid" FOREIGN KEY ("hobid") REFERENCES "test03" ("hobid")
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

在这里插入图片描述

desc test04;
desc test05;

mysql> desc test03;
+---------+-------------+------+-----+---------+-------+
| Field
| Type
| Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| hobid
| int(4)
| NO
| PRI | NULL
|
|
| hobname | varchar(50) | YES
|
| NULL
|
|
+---------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> desc test04;
+-------+-------------+------+-----+---------+----------------+
| Field | Type
| Null | Key | Default | Extra
|
+-------+-------------+------+-----+---------+----------------+
| id
| int(4)
| NO
| PRI | NULL
| auto_increment |
| name
| varchar(10) | YES
|
| NULL
|
|
| age
| int(3)
| YES
|
| NULL
|
|
| hobid | int(4)
| YES
| MUL | NULL
|
|
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

在这里插入图片描述

#插入新的数据记录时,要先主表再从表
insert into test04 values(1,‘runing’);
insert into test04 values(1,‘zhangsan’,18,1);

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

mysql> drop tables test04;
Query OK, 0 rows affected (0.01 sec)
mysql> drop tables test03;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

#查看和删除外键约束
#如果要删除外键约束字段先删除外键约束,再删除外键名
show create table test04;
alter table test04 drop foreign key FK_hob;
alter table test04 drop key FK_hob;
desc test04;

五、数据库用户管理

1、新建用户
CREATE USER ‘用户名’@‘来源地址’ [IDENTIFIED BY [PASSWORD] ‘密码’];

‘用户名’:指定将创建的用户名.
‘来源地址’:指定新创建的用户可在哪些主机上登录,可使用IP地址(192.168.226.129)、网段(192.168.226.0/24)、主机名的形式(localhost),本地用户可用localhost,允许任意主机登录
可用通配符%
‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密;
若使用加密密码,需要先使用SELECT PASSWORD(‘密码’);获取密文,再在语句中添PASSWORD ‘密文’;
若省略“IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)

CREATE USER ‘user1’@‘localhost’ IDENTIFIED BY ‘12345678’;
SELECT PASSWORD(‘abc12345678’);
CREATE USER ‘user2’@‘localhost’ IDENTIFIED BY PASSWORD ‘*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9’;

mysql> create user 'pxs'@'192.168.10.21' identified by'12345678';
Query OK, 0 rows affected (0.01 sec)
mysql> select password('abc12345678');
+-------------------------------------------+
| password('abc12345678')
|
+-------------------------------------------+
| *8D401331524E36C282262E581E722CDDAB61E4FC |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> create user 'pxs'@'192.168.10.21' identified by password'*8D401331524E36C282262E581E722CDDAB61E4FC';
ERROR 1396 (HY000): Operation CREATE USER failed for 'pxs'@'192.168.10.21'
mysql>
create user 'pxs'@'192.168.10.21' identified by password'*8D401331524E36C282262E581E722CDDAB61E4FC';
ERROR 1396 (HY000): Operation CREATE USER failed for 'pxs'@'192.168.10.21'
mysql> create user 'pxs'@'localhost' identified by password'*8D4013331
Query OK, 0 rows affected, 1 warning (0.00 sec)

在这里插入图片描述

2、查看用户信息
创建后的用户保存在mysql 数据库的user表里
USE mysql;
SELECT User,authentication_string,Host from mysql.user;

在这里插入图片描述

重命名指定
RENAME USER ‘zhangsan’@‘localhost’ TO ‘lisi’@‘localhost’;

删除用户
DROP USER ‘pxs’@‘localhost’ ;
在这里插入图片描述

修改当前登陆的用户的密码
SET PASSWORD = PASSWORD(‘abc123’);

修改其他用户密码
SET PASSWORD FOR ‘user1’@‘localhost’ = PASSWORD(‘abc123’);
在这里插入图片描述

忘记root密码的解决办法
修改/etc/my.cnf 配置文件,免密登陆mysql
vim /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服务
数据库用户授权
授予权限
grant 提权
GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘来源地址’ [IDENTIFIED BY ‘密码’];
grant all on .
#权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select, insert,
update”。使用"all"表示所有权限,可授权执行任何操作。

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

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

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

#允许用户zhangsan在本地查询school数据库中所有表的数据记录,
但禁止查询其他数据库中的表的记录。
GRANT select ON school.* TO ‘hwy’@‘localhost’ IDENTIFIED BY '123’45678;

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

flush privileges; #刷新权限
quit

在这里插入图片描述

mysql -u hyw -p12345678
use hwy;
show tables; .
select * from hwy;

查看权限

mysql -u root -p12345678
SHOW GRANTS FOR 用户名@来源地址;

SHOW GRANTS FOR ‘lisi’@‘%’;

撤销权限
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址;

REVOKE ALL ON . FROM ‘lisi’@‘%’;

SHOW GRANTS FOR ‘lisi’@‘%’;
#USAGE权限只能用于数据库登陆,不能执行任何操作; USAGE权限不能被回收,即REVOKE不能删除用户。
flush privileges;

最后

以上就是迅速煎蛋为你收集整理的MYSQL概述的全部内容,希望文章能够帮你解决MYSQL概述所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(26)

评论列表共有 0 条评论

立即
投稿
返回
顶部