数据库的约束条件和用户管理
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)!