主健约束(primary key) :具有唯一且非空

外键约束(foreign key) :

非空约束(not null):不可为空

唯一性约束(unique [key l index]) :唯一,可为空,但空值只允许出现一次

默认值约束(default): create (address varchar(50) default '魔都');

自增约束(auto_increment):随着记录增加,基于最新的记录的id进行+1的自增长

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

键。

创建外键约束作用(误删,修改),保证数据的完整性和一致性。

主键表和外键表的理解

(1)以公共关键字作主键的表为主键表(父表、主表)

(2)以公共关键字作外键的表为外键表(从表、外表)

注意:与外键关联的主表的字段必须设置为主键。要求从表不能是临时表,主表外键字段和从表的字

段具备相同的数据类型、字符长度和约束。

#创建主表test04

create table test04 (hobid int ( 4 ) , hobname varchar (50) ) ;

#创建从表test05

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

hobid int (4) ) ;

MySQL中6种常见的约束/规则_主键

#为主表test04添加一个主键约束。主键名建议以"PK开头。

alter table test04 add constraint PK_hobid primary key(hobid) ;

MySQL中6种常见的约束/规则_数据库_02

#为从表test05表添加外键,并将test05表的hobid字段和test04表的hobid字段建立外键关联。

外键名建议以"FK_"开头。

alter table test05 add constraint FK_hobid foreign key(hobid) references test04(hobid);

references :引用

MySQL中6种常见的约束/规则_主键_03

#可以使用查询表语句结构命令查看外键关联

show create table test05;

desc test04 ;

desc test05;

MySQL中6种常见的约束/规则_主键_04

#插入新的数据记录时,要先主表再从表

insert into test04 values(1, ' runing') ;

insert into test05 values (1, ' zhangsan',18,1) ;

MySQL中6种常见的约束/规则_主键_05

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

drop tables test05;

drop tables test04;

MySQL中6种常见的约束/规则_数据库_06

#查看和删除外键约束

#如果要删除外键约束字段先删除外键约束,再删除外键名

show create table test05;

alter table test05 drop foreign key FK_ hob;

alter table test05 drop key FK_ hob;

desc test05;

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

数据库用户管理

1、新建用户

CREATE USER '用户名'@'来源地址’ [IDENTIFIED BY [PASSWORD] '密码' ];

'用户名':指定将创建的用户名.

'来源地址':指定新创建的用户可在哪些主机上登录,可使用TP地址(192.168.226.129)、网段

(192.168.226.0/24)、主机名的形式( localhost),本地用户可用localhost,允许任意主机登录。

可用通配符%

'密码':若使用明文密码,直接输入'密码',插入到数据库时由Mysql自动加密;

若使用加密密码,需要先使用SELECT PASSWORD('密码'):获取密文,再在语句中添PASSWORD '密

文';

若省略"IDENTIFIED BY"部分,则用户的密码将为空(不建议使用)

CREATE USER 'user1'@'localhost' IDENTIFIED BY '123456';

SELECT PASSWORD ( ' abc123');

MySQL中6种常见的约束/规则_主键_08

CREATE USER 'user2'@'localhost’ IDENTIFIED BY PASSWORD

'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';

查看用户信息

创建后的用户保存在mysql 数据库的user表里

USE mysql;

SELECT User,authentication_string,Host from mysql.user;

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

重命名指定

RENAME USER 'zhangsan '@ ' localhost' TO 'lisi'@'localhost ' ;

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

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

删除用户

DROP USER 'lisi'@'localhost' ;

修改当前登陆的用户的密码

SET PASSWORD =PASSWORD ( 'abc123');

修改其他用户密码

SET PASSWORD FOR 'user1'@'localhost' = PASSWORD ( ' abc123' ) ;

flflush privilege(刷新的是mysql里的user用户权限表)

MySQL中6种常见的约束/规则_主键_12

MySQL中6种常见的约束/规则_主键_13

忘记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 0N sky.* TO 'skyuser '@' %' IDENTIFIED BY 'admin123' ;

grant all on * . *

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

用"all"表示所有权限,可授权执行任何操作。#数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符" * "。

例如,使用"kgc.*"表示授权操作的对象为kgc数据库中的所有表。

#'用户名@来源地址':用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来

源地址可以是域名、IP地址,还可以使用"%"通配符,表示某个区域或网段内的所有地址, 如"

%.kgc.com"、"192.168.226.%"等。

#允许用户lisi在所有终端远程连接mysql,并拥有所有权限。

GRANT ALL [PRIVILEGES] ON * . * To 'lisi'@'%’ IDENTIFIED BY '123456';

flflush privileges; #刷新权限

MySQL中6种常见的约束/规则_主键_14

MySQL中6种常见的约束/规则_数据库_15

quit

mysql -ulisi -pabc123

use xyw;

show tables;

select *from yyy;

查看权限

mysql -uroot -pabc123

SHOW GRANTS FOR 用户名@来源地址;

SHOW GRANTS FOR 'lisi‘ @’%‘;

MySQL中6种常见的约束/规则_数据库_16

撤销权限

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

REVOKE ALL ON * . * FROM 'lisi'@'%';

SHOW GRANTS FOR 'lisi'@'%';

#USAGE权限只能用于数据库登陆,不能执行任何操作;USAGE权限不能被回收,即REVOKE不能删

除用户。

flflush privileges;

MySQL中6种常见的约束/规则_主键_17