约束条件和用户管理
约束条件:
主键
主键约束 primary key
用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null
*一个表只能有一个主键
外键:用来建立表与表之间关系,确保外键中的值与另一个表的主键值匹配。保证数据引用的完整性。
多表联查,不要超过三张。超过三张,会降低查询效率。
非空约束:保证列中的值不含null值
唯一性约束:确保列中的所有值都是唯一的,类似主键,但是一个表可以有多个唯一约束。
自增约束,在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行时,自增列的 值会自动增加。
扩展语句:
CREATE TABLE IF NOT EXISTS test01 (
#表示在创建表时自动检测表是否已经存在,如果不存在就创建。
id int(5) ZEROFILL PRIMARY KEY auto_increment,
#zerofill,5位,不足五位自动填充0。auto_increment自增长字段,
#每条记录自动递增1,自增长必须是主键,也不可以重复。如果添加失败下一条记录也会自动增加。
name CHAR (10),
score DECIMAL(5,2),
address VARCHAR(128)
);
INSERT INTO test01 VALUES (1,"骆雨昊",100,"南京");
INSERT INTO test01 VALUES (null,"德",200,"秦淮");
SELECT * FROM test01;
主键和外键的总结:
外键就是和主表进行关联的列,不需要设置为从表的主键,但是不能为空,必须和主表的数据类型保持一致。
外键的值和主键的值要相同
先插入主表的数据,再插入从表的数据
删除表的外键不是直接删除外键的列名,而是删除外键的索引,show create table 表名:查看表的详细信息。
删除主键不需要加上主键的列名。如果有extra的额外属性,比如说自增长,要先移除属性,然后才能除主键。 删除主键的方式:alter进行修改
复制表:
create table +旧表名 like 新表名 ;
insert into +表名 select * from +表名
create table +表名(select * from +表名)
临时表:
创建完成之后,在库里面是看不到的,但是依然可以增删改查,但是重新连接数据库之后,临时表就会消失。
清空表:
drop 删除表
面试题:如何删除表的内容,还能保留表的结构?
delete from +表名; 清空表 一行一行的清空表数据,速度比较慢,如果有自增长字段,delete清空之后,会继续按照原来的序号,继续递增。
truncate table +表名; 清空表 保留表的结构,但是清空之后原有的记录全部抹去,自增长也将从头开始,速度表较快。
数据库的用户管理:
创建用户
设置用户权限
select * from user;
root都是相同的,Host:可以登录的主机,1ocalhost指的是本地登录 :任意主机(ip地址)。
权限上:localhost > %的权限。
create user '用户名' @'ip地址'
grant all privileges on * . * to '用户名' @'ip地址' ;
all 给所有权限 远程登录,数据库的操作权限(增删改查)
* . * 左边的是库,右边的是库里面的表
root@localhost其他的用户也不设置成localhost,都是设置主机名。安装完mysql之后就有了,不需要额外设置。其他的都需要人工创建。
information schema: 这个库的作用包含了mysq1服务器中所有其他数据库,表,列。索引权限等详细的元数据的信息,可以用来查询数据库的结构和元信息。
performance_schema:
包含mysql的服务性能和资源利用情况。查询语句的执行时间和锁定等信息。
usage:允许该用户连接到数据库
移除权限的命令: revoke all privileges on * . * from '用户名' @'ip地址';
flush privileges 刷新一下权限
grant select on 库名 .* to '用户名' @'ip地址'; 只能查
drop user '用户名' @'ip地址'; 删除用户
create user '用户名' @'ip地址' identified by '密码 '; 创建用户及密码
查看权限的语句:show grant for 用户名@%;