数据库的增删改查
约束条件和用户管理
删
约束条件
主键约束 primary key
用于标识表中的主键列的值,而且这个值是全表当中唯一的,而且值不能为null。
一个表只能由一个主键。
#创建表stu01,设置主键的两种方式
#一、
create table stu01 (
id int(5) primary key,
name char(10),
score decimal(5,2),
address varchar(128)
);
#二、
create table stu01 (
id int(5),
name char(10),
score decimal(5,2),
address varchar(128),
primary key (id)
);
#查询表的结构
desc stu01;
外键:用来建立表与表之间的关系。确保外键中的值与另一个表的主键值匹配。保证数据引用的完整性。
多表联查,不要超过三张。超过三张表会降低查询效率
非空约束,保证列中的值不含null值
唯一性约束,确保列中的所有值都是唯一的,类似主键。但是一个表可以有多个唯一约束。
自增约束,在列生成的每一行都会自动生成一个唯一标识符。通常和主键一起使用,每次插入新行时,自增列的值会自动增加。
#唯一性约束,首先是非空才能设置唯一性约束。一个表中可以设置多个唯一性约束
create table stu03 (
id int(5) primary key,
name char(10) not null unique key,
score decimal(5,2) not null unique key
);
insert 插入数据时,时间类型
date
datetime
timestamp
create table stu04 (
id int(5) primary key,
name char(10),
date_time date not null,
date_times timestamp not null
);
insert into stu04 values(1,2,'2024-07-16','2024-07-16 14:40:46');
create table stu05 (
id int(5) primary key,
name char(10),
date_time date not null,
date_times timestamp not null
);
insert into stu05 values(1,2,'2024-07-16',now());
扩展语句:
#表示在创建表时自动检测表是否已经存在,如果不存在就创建
create table if not exists test01(
#zerofill,5位 不足5位会自动填充0。auto_increment自增长字段,每条记录自动递增1自增长必须是主键,也不可以重复。如果添加失败,下一条记录也会自动增加。
id int(5) zerofill primary key auto_increment,
name char(10),
score decimal(5,2),
address varchar(128)
);
#两种方式实现自增
insert into test01 values(null,'二额',78,'天牛');
insert into test01 (name,score,address) values ('三额',79,'天使');
主键和外键的
#创建主键
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
);
#创建外键
create table class (
stu_id int(11) zerofill primary key auto_increment,
address varchar(128) default '地址不详',
card_id int(5) not null,
foreign key (card_id) references student (card_id)
);
#先插入主键再插入从。删除的时候也是先主再从。
insert into student values(320681,'顾','7623@qq.com');
insert into class values(01,'南京',320681);
#删除表的外键,删除外键的索引
show create table class
alter table class drop foreign key class_ibfk_1;
#先删除自增属性
alter table class MODIFY stu_id int(11);
#然后删除主键
alter table class drop PRIMARY key;
主键和外键:
外键就是和主表进行关联的列,不需要设置为从表的主键,但是不能为空,必须和主表的数据类型保存一致
外键的值和主键的值要相同
先插入主表的数据,再插入从表的数据
删除表的外键不是直接删除外键的列名,而是删除外键的索引,show create table 表名;查看表的详细信息
删除主键不需要加上主键的列名。如果extre的额外属性,比如自增长,要先移除属性,然后才能删除掉
删除主键的方式,alter进行修改
复制表
create table stu_01 like student;
desc stu_01;
insert into stu_01 select * from student;
#既复制又导入
create table stu_02 (select * from student)
临时表:临时表创建完成之后,在库里面是看不到的,但是依然可以增删改查。但是重新连接数据之后,临时表就会消失。
create temporary table class01 (
)
清空表
#删除表
drop
#把表里面的数据全部清空,一行一行的清空表数据,速度比较慢,如果有自增长字段,delete清空之后会继续按照原来的序号,继续递增
delete from 表名;
#也是清空表,保留表结构,但是清空之后原有的记录全部抹去,自增长也将从头开始,速度比较快。
truncate table 表名;
数据库的用户管理:
创建用户
设置用户权限
取消权限
#root都是相同的,Host:可以登录的主机,localhost指的是本地登录 %:任意主机(IP地址)
#权限上:localhost > %的权限
create user 'cq'@'192.168.233.22';
#all 给与所有权限,包括远程登录,数据库的操作权限(增删改查)
#*.* 第一个*表示所有库 第二个*表示库里的表
#identified by '123456' 创建密码
grant all privileges on *.* to 'cq'@'192.168.233.22'; identified by '123456';
#root@localhost 安装完mysql之后就有了,不需要额外设置。其他的都需要人工创建。其他的用户也不设置成localhost,都是设置主机名。
#查看权限
show grants for 'cq'@'192.168.233.22';
#移除权限
revoke all privileges on *.* from 'cq'@'192.168.233.22';
#涉及权限更改一定要刷新,即时生效
flush privileges;
#给权限,只能查询
grant select on xy102.* to 'cq'@'192.168.233.22';
#给多个权限
grant insert,update,alter,delete on xy102.* to 'cq'@'192.168.233.22';
#移除多个权限
revoke insert,update,alter,delete on xy102.* from 'cq'@'192.168.233.22';
#删除用户
drop user 'cq'@'192.168.233.22';
#创建用户并给与密码
create user 'cq'@'192.168.233.22' identified by '123456';
实现mysql本地的免密登录
vim /etc/my.cnf
skip-grant-tables
systemctl restart mysqld