自学内容网 自学内容网

数据库的约束条件和用户管理

1、主键约束(primary key)

用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null

注意:一个表只能有一个主键

1.1创建主键

方法一:create table stu02 (
       id int(5) primary key,
       name char(10),
       score decimal(5,2),
       address varchar(128)
       );

方法二:create table stu02 (
       id int(5),
       name char(10),
       score decimal(5,2),
       address varchar(128),
       primary key (id)
       );

1.2外键

用来建立表与表之间的关系,确保外键中的值与另一个表的主键值匹配,保证数据引用的完整性

多表联查,不要超过三张。超过三张表会降低查询效率

1.3主键和外键的联动

主表1,card_id为主键

create table if not exists student (
card_id int(5) primary key auto_increment,
stu_name char(10) not null,
stu_email varchar(128)not null unique key
);

 副表2,stu_id为主键

create table class(
stu_id int(11) zerofill primary key auto_increment,
address varchar(128) default '地址不详',
card_id int(5) not null,
#外键要和表1主键的数据类型保持一致
foreign key card_id references student (card_id)
#表2的card_id为外键和表1的主键进行关联
);

1.4主键和外键之间的关系

外键就是和主表进行关联的列,不需要设置为从表的主键,但是不能为空,必须和主表的数据类型保持一致

外键的值和主键的值要相同

先插入主表的数据,再插入从表的数据

删除表的外键不是直接删除外键的列名,而是删除外键的索引(show create table 表名:查看表的详细信息)

删除主键不需要加上主键的列名,如果有extra额外属性,比如说自增长,要先移除属性然后才能删除主键

删除主键的方式:alter进行修改

2、非空约束(not null)

保证列中的值不含null值

3、唯一性约束(unique key)

确保列中的所有值都是唯一的,类似主键,但是一个表中可以有多个唯一约束

4、自增约束

在列生成的每一行都会自动生成一个唯一标识符,通常和主键一起使用,每次插入新行时,自增列的值会自动增加

4.1扩展语句

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)
);

5、对表的一些操作

5.1复制表

create table 新表名 like 旧表名;

5.2插入表里的数据

insert into 新表名 select * from 旧表名;

5.3创建表+复制表的数据

create table 新表名 (select * from 旧表名);

5.4临时表

临时表创建完成之后,在库里面是看不到的,但是依然可以增删改查,但是重新连接数据之后,临时表就会消失

create temporary table 表名

5.5清空表

drop:直接删除表

如何删除表内的数据,但是保留表的结构?
1、delete from 表名;
#一行一行的清空表数据,速度比较慢,如果有自增长字段,delete清空之后,会按照原来的序号继续递增
2、truncate table 表名;
#清空表,保留表的结构,但是清空之后原有的记录全部抹去,自增长也将从头开始,速度比较快

6、数据库的用户管理

6.1创建用户

mysql库下的user表

root都是相同的

Host:可以登录的主机

localhost指的是本地登录

%:任意主机(ip地址)

权限上:localhost>%的权限

创建用户:

create user 'cq'@'192.168.230.22';
#用户cq可以登录的主机
root@localhost  安装完mysql之后就有了,不需要额外设置,其他的都需要人工创建。
其他的用户也不设置成localhost,都是设置主机名

6.2设置用户权限

6.2.1赋权

grant all privileges on *.* to 'cq'@'192.168.230.22' identified by '123456';

#all表示给予所有权限,包括远程登录、数据库的操作权限(增删改查)
*.*:第一个*表示库,第二个*表示库里的表
identified by '123456'表示登录密码

information_schema:这个库的作用包含了mysql服务器中所有其他数据库、表、列、索引权限等详细的元数据信息。可以查询数据库的结构和元信息

performance_schema:包含mysql的服务性能和资源利用情况,查询语句的执行时间和锁定等信息

6.2.2查看权限

show grants for 'cq'@'192.168.230.22';

6.2.3取消权限

revoke all privileges on *.* from 'cq'@'192.168.230.22';

刷新

 flush privileges;

6.2.4只给查的权限

grant select on xy102.* to 'cq'@'192.168.230.22';

grant usage on *.* to 'cq'@'192.168.230.22';
#

6.2.5删除用户

drop user 'cq'@'192.168.230.22';

6.2.6mysql本地的免密登录

vim /etc/my.cnf

添加skip-grant-tables


原文地址:https://blog.csdn.net/QChestnut/article/details/140471745

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!