目录
一、mysql中常见的的约束/规则
二、主键和外键的关系
查看和删除外键约束
三、数据表操作
1、克隆表
1.1 先克隆表,再克隆数据
1.2 克隆表的数据并创建表
2、清空表
2.1 delete清空表
2.2 truncate清空表
2.3 drop、truncate、delete区别
3、临时表
三、用户管理
1、新建用户
1.2 使用密文创建数据库
2、查看用户信息
3、重命名用户
4、删除用户
四、密码管理
1、修改当前用户密码
2、修改其他用户密码
3、root密码遗忘
五、数据库授权
1、授权
1.1 数据库授权
六、总结
① 主键约束(primary key)
② 外键约束(foreign key): 如果同一个属性字段在表一中为主键,而在表二中不是主键,则字段称为表二的外键。
③ 非空约束(not null)
④ 唯一性约束(unique key): 唯一,可为空,但空值 值允许出现一次。
⑤ 默认值约束(defaulst): 当为空时,默认值
⑥ 自增长约束(auto_increment): 随着记录增加,基于最新的记录的id,进行自加1的增长。
创建外键约束作用(误删、修改),保证数据的完整性和一致性。
主键表和外键表的理解:
以公共关键字作为主键的表为主键表(父表、主表)
以公共关键字作为外键的表为外键表(从表、外表)
注意: 以外键关联的主表的字段必须设置主键,要求从表不能是临时表,主表外键字段和从表的字段具备相同的数据类型,字符长度和约束(不包括主键约束)。
创建主表test01
创建从表test02
为主表test01添加一个主键约束,主键名建议以"PK_"开头。foreign key外键约束 primary key主键约束
为从表test02表添加外键,并将test02表的hobid字段和test01表的hobid字段建立外键关联。
alter table test02 add constraint FK_hobid foreign key(hobid) references test01(hobid);
references:引用
可以使用查询表语句结构命令查看外键关联
show create table test02;
插入新的数据记录时,要先主表再从表,否则会报错
insert into test01 values(1,‘runing’);
insert into test02 values(1,‘zhangsan’,20,1);
删除数据记录时,要先从表再主表,也就是说删除主键表时必须先删除其他与之关联的表。
delete from test02;
show create table test02;
alter table (表名) drop foreign key (约束值)
alter table test02 drop foreign key FK_hobid;
desc test02;
show create table test02;
在创建数据表的时候,我们有的时候需要使用另外一个表的结构或数据,如果一个个添加,过于繁琐,这时我们可以使用克隆。
create table lcdb2 like lcdb;
#通过like方法,复制lcdb的表结构,生成lcdb2表
insert into lcdb2 select * from lcdb;
#将lcdb表的数据,备份到lcdb2表中
create table zyy3 (select * from zyyy);
#复制lcdb表的数据,到lcdb3中
show create table zyy3\G
#获取数据表的结构、索引等信息
select * from zyy3;
delete from lcdb;
#清空表后,返回的结果内有删除的记录条目
#delete是一行一行进行删除记录数据的
#delete清空表后,自增长字段会按之前最大的记录自增
truncate table lcdb;
#truncate 清空表后,没有返回被删除的条目
#其工作时是将表结构按原样重新建立
#因此其清空速度比delete快
#truncate清空后,自增长字段会重新开始
drop table表名 |
属于DDL类型,不可进行回滚,无法恢复,不可带where,删除表内容和结构,删除速度最快 |
truncate table表名 |
属于DDL类型,不可进行回滚,不可带where,表内将删除,删除速度快 |
delete from表名 |
属于DML类型,可回滚,可带where,表结构在,表内容要看where执行情况 |
临时表创建成功之后,使用SHOW TABLES命令是看不到创建的临时表的,临时表会在连接退出后被销毁。 如果在退出连接之前,也可以可执行增删改查等操作,比如使用 DROP TABLE 语句手动直接删除临时表。
##添加临时表test
create temporary table test (
id int(4) zerofill primary key auto_increment,
name varchar(10) not null,
cardid int(18) not null unique key,
hobby varchar(50));
## 查看当前库中所有表
show tables;
##在临时表中添加数据
insert into test03 values(1,'zhangsan',123456789,'watch a film');
##查看当前表中所有数据
select * from test;
##退出数据库
quit
##重新登录后进行查看
mysql -u root -p
##查看之前创建的临时表中所有数据,发现已经被自动销毁
select * from test;
CREATE USER '用户名'@'来源地址' [IDENTIFIED BY [PASSWORD] '密码'];
#‘用户名’:指定将创建的用户名
#‘来源地址’:指定新创建的用户可在哪些主机上登录,可使用IP地址、网段、主机名的形式,本地用户可用localhost,允许任意主机登录可用通配符%
#‘密码’:若使用明文密码,直接输入’密码’,插入到数据库时由Mysql自动加密;
#######若使用加密密码,需要先使用SELECT PASSWORD(‘密码’); 获取密文,再在语句中添加 PASSWORD ‘密文’;
#若省略“IDENTIFIED BY”部分,则用户的密码将为空(不建议使用)
select password('123456');
create user 'zyy'@'localhost' identified by password '*6BB4837EB74329105EE4568DDA7DC67
ED2CA2AD9';
创建后的用户保存在 mysql 数据库的 user 表里
use mysql; #使用mysql库
select User from user;
rename user 'zyy'@'localhost' to 'zhou'@'localhost';
#将用户zyy改名为zhou
drop user 'zhou'@'localhost';
#删除用户zhou
set password = password('654321');
set password for 'zzz'@'localhost' = password('123123');
修改配置文件,添加配置,免密登录MySQL
vim /etc/my.cnf
#添加此行
skip-grant-tables
再次修改my.conf配置文件,注释掉之前添加的配置命令,并再次重启服务
使用新密码登录
GRANT语句:专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT语句将会创建新的用户;当指定的用户名存在时,GRANT 语句用于修改用户信息。
GRANT 权限列表 ON 数据库名/表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
数据库名.表名:用于指定授权操作的数据库和表的名称,其中可以使用通配符。
用户名@来源地址’:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.accp.com”、“192.168.48.%”等。
IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDENTIFIED BY”部分,则用户的密码将为空。
show grants for zzz@localhost;
#查看用户权限
指定用户可以查看哪个数据库/表,别的数据库无权访问
grant select on school.* to zzz@localhost;
#用户zzz只有school库下所有表的查询权限
本文主要讲了数据表和用户管理的基本操作:
当不在需要一张表时,用drop;想删除部分数据行时,用delete,并带上where;删除数据保留表时用truncate
因克隆表时无法克隆索引等信息,所以克隆表只能用于临时备份数据,在实际生产中也仅用于备份数据,防止误删除数据,造成不必要的损失
在遗忘MySQL的root密码时,更改配置文件并更改密码后,记得要将配置文件还原,否则其它用户可以直接免密登录