创建临时表
create temporary table test1 (
id int(4) primary key,
name char(10),
sex char(2)
);
# 创建临时表一般用于调试,而且临时表创建之后在表目录当中是不显示的,连接退出之后,临时表会被销毁,而且临时表无法创建外键unique key
#唯一性约束,跟主键不同,可以为空create table test like ky32;
#复制通过like这个语法直接复制ky32的表结构,只是复制表结构,不能复制表里的数据insert into test select * from ky32;
#把ky32表里面的数据复制到test,前提两个表数据结构要一致create table test1 (select * from ky32);
#创建一张表,test1,数据重ky32来,表结构也是ky32.delete truncate drop
#drop:直接删除表
#delete from 表名;
删除是一行一行删除,如果表里面有自增长的列,即使清空所有记录之后,再次添加内容,会从原来记录之后继续自增写入,如原来为2,再次写入会变成3
#truncate table 表名;
清空表的数据,而且会把表结构重新建立,速度上比delete快,推荐 create temporary table 表名 (
id int(4) primart key;
name char(4);
sex char(2)
);
#创建临时表,退出连接之后会直接消失alter table class drop foreign key calss_ibfk_1;
#删除主表,再删除从表
主键和外键
在数据库中,主键和外键是用于关联表与表之间的概念。它们在关系型数据库中发挥着重要的约束和识别作用
主键(Primary Key) | 主键是用于唯一标识一个表中的记录的字段(或属性组)。主键的值在表中必须是唯一的,这意味着不存在重复的记录。主键的作用是确保表中的记录具有唯一性,便于查询和识别 |
外键(Foreign Key) | 外键是表中的一个或多个字段,其值与另一个表中的主键字段相关联。外键用于建立表与表之间的关联关系,以便在多个表之间进行数据查询和操作。外键的作用是关联两个表,并确保数据的一致性和完整性。 |
主键与外键的关联关系
1 | 一对一关联:当一个表中的主键字段与另一个表中的外键字段相关联时,我们说这两个表之间存在一对一的关联关系。这种关系表示每个主体表的记录都只与一个从体表的记录相关联。 |
2 | 一对多关联:当一个表中的主键字段与另一个表中的外键字段相关联时,我们说这两个表之间存在一对多的关联关系。这种关系表示每个主体表的记录都与多个从体表的记录相关联。 |
3 | 多对多关联:当两个表之间的主键字段和外键字段相互关联时,我们说这两个表之间存在多对多的关联关系。这种关系表示一个主体表的记录可以与多个从体表的记录相关联,反之亦然。多对多关系通常需要使用中间表(关联表)来建立关联 |
4 | 在实际应用中,外键和主键的关联有助于确保数据的一致性、完整性和查询效率。通过正确设置主键和外键,我们可以更有效地管理数据库中的数据,并实现不同表之间的数据共享和交互 |
mysql的约束方式
6种常用的方式
1 | 主键约束 用于唯一标识表中的每一行,主键列的值必须要是唯一而且不能为空的,一个表只能有一个主键 |
2 | 外键约束 用于建立表与表之间的关系,一般是和另一张的表的主键关联,保证数据引用的完整性,一个表可以有多个外键 |
3 | 非空约束 no null 不能为空,该列必须要有一个值 |
4 | 唯一性约束 unique 确保列中的所有值都是唯一的,类似于主键,但是可以为空,而且一个表可以有多个唯一约束 |
5 | 默认值约束 default在插入表数据时,如果没有定义值,会提供一个默认值 |
6 | 自增约束 每行自动生成一个唯一标识,通常都和主键在一起使用 |
数据库约束及基础语句
not null | NOT NULL | not null 值某列不能存储null值,也就是某列不能为空 |
unique | UNIQUE | unique 保证某列的每行必须有唯一的值,去重,这一列只能有一个,这一列其他行不能与他重复 |
default | DEFAULT | default 规定没有给列赋值时的默认值,默认值 |
primary key | PRIMARY KEY | primary 主键 是 not null 和unique 的结合,确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速的找到表中的一个特定的记录 |
foreign key | FOREIGN KEY | foreign key 外键 保证一个表中的数据匹配另一个表中的值的参照完整性,一个表里只会有一个 |
check | CHECK | check 保证列中的值符合指定的条件,对于mysql 数据库,对check子句进行分析,但是忽略check 子句。 |
auto_increment | AUTO_INCREMENT | auto_increment 自然增长,如id第一行为1,第二行会自动排序为2 |
insert into | INSERT INTO | insert into 向什么表插入 insert into student表名 |
delete | DELETE | delete 清空数据表内容,不释放空间,且下次插入表数据,id依然接着被删除数据的id继续增加 格式:delete from c1(表名) where(范围)删除表内符合条件的范围 |
truncate | TRUNCATE | truncate 清空表数据,释放空间,且下次插入表数据,id从1重新开始 |
drop | DROP | drop 删除整张表,如要使用该表需要从新构建 |
update | UPDATE | update 将表名改掉 |
if not exists | IF NOT EXISTS (加上表名) | if not exists c1 如果这个表不存在,才会创建 |
zerofill | ZEROFILL | zerofill 自动补齐, 比如设置为4,输入1 后, 会自动补齐成0001 |
like | LIKE | like 复制表的结构,不复制表里的数据 |
peferences | PEFERENCES | 外键 |
null 约束
create table student (
id int not null,
sn int not null,
name varchar(20),
qq_mail varcahr(15)
);
#创建表时,可以指定某列不为空
unique 唯一约束
create table student (
id int not null,
sn int unique,
name varchar(20),
qq_mail varchar(15)
);
#指定sn列为唯一的,不重复的
增删改查
增 | insert into 1. insert into 加上表名 values(x , x , x , 'x'); 2. insert into 表名 (id,name,sroce,passwd) values(x,x,x,x); create 1.create table 表名; #创建一个表 2.create |
删 | delete truncate drop 1.delete from 表名 where id(最好指定唯一条件) = 6; 2.truncate from 表名; 3.drop table 表名; #删除表 drop database 库名; #删除库 |
改 | alter table 原来的表名 rename 要改的表名; #改表的名字 alter table 表名 add 列名 date; #创建一个新的列,date可以自定义如(char(10),varchar(20)) alter table 表名 modify column 列的名字 varchar(52); #改变表里的列的类型 varchar(52)可自定义 |
查 | select * from 表名; select * from cw1(表名) where passwd(列的名字) is null / not null ; #查询cw1表里的,passwd列 哪一行为空或不为空 select * from 表名 limit 2;或2,3; #查询表里的第二行,或从第二行开始往后三位 select 列名 from 表名; #指定查看某列 |
格式
create table if not exists 表名 (
列名 int(4)类型 zerofill(自动补齐) primary key(主键:唯一性) auto_increment,
列名 varchar(4)类型 not null(不能为空),
列名 int(18)类型 not null(不能为空) unique(去除重复) key,
#这一行表示类型为int最多只能有18位数字,且不能为空(也可以把not null去掉也就是可以为空),也不能重复。
列名 varchar(10)类型
);
练习 1
定义一个需求
两张表:主表company,从表depart
company
1.work_id ,非空,主键,int(4),不满四位要补齐
2.name ,非空,char(5)
3.sex,非空,char(2)
depart
1.de_id,非空,主键,int(6),不满6位要补齐
2.work_id 要和主表的work_id关联为外键
3.addrss,为空,有个默认值
4.phone,非空,不能相同。create table company (
work_id int(4) not null zerofill primary key,
name char(5) not null,
sex char(2) not null
);create table depart (
de_id int(6) not null zerofill primary key,
work_id int(4) zerofill, #与主表的保持一致
addrss varchar(255) default '地址不详',
phone int(11) unique
);alter table depart add poreign key (work_id) references company (work_id);alter table depart drop primary key;
#删除depart表的主键alter table depart add primary key de_id;
#为depart表de_id那一行添加一个主键,前提这个表没有主键才能添加成功,一个表只能有一个主键
2
需求两张表
school
1.de_id , int(4) , 不满四位要补齐 , 且要自增长 , 主键
2.name , varchar(15) , 非空
3.email , varchar(45) , 可以为空,但不能重复 , 且有默认值为 'bdqnkgc@126.com'cloud_ky32
1.id , 自增长 , 主键 , int
2.class_name , 非空
3.de_id 主表关联
4.adress , 可以为空 , 默认地址 '地址不详'
5.phone , int(11) , 不能为空,且不能重复要求删除外键关联,删除从表的主键,重新定义主键为phonecreate table school (
de_id int(4) zerofill auto_increment primary key,
name varchar(15) not null,
email varchar(45) unique default 'bdqnkgc@126.com',
);create table cloud_ky32 (
id int(2) auto_increment primary key,
class_name vchar(2) not null,
de_id zerofill,
adress default '地址不详',
phone int(11) not null unique,
foreign key(de_id) reperences school(de_id)
#跟school表的de_id关联外表
);
在外面用修改的方式添加主键
#主表company
create table company (
work_id int(4) zerofill primary key,
name varchar(5) not null,
sex char(2) nut null
);#从表depart
creater table depart (
de_id int(6) zerofill primary key,
work_id int(4),
address varchar(255) default '地址不详',
phone int(11) not null unique
);foreign key (ct_id) references province (ct_id)
#在表内最下面插入可以关联主表provine的主键alter table city add foreign key(ct_id) references province(ct_id);
#通过创建外键关联主表的主键,从表的主键与外键没有关系,只是关联主表province的ct_id,外键要与主键一致,主表输入为数字,从表输入也必须要为数字,否则无法输入。alter table depart add foreign key (work_id) references company (work_id);
#depart为表名,add foreign key指向(work_id),到company的(work_id),主从表的类型,格式要一致才能创建成功,否则会报错#在外面修改主键,如果要修改主键要先删除主键
alter table depart drop primary key;alter table depart add primary key de_id;
#在表外修改主键,前提是当前这个表没有主键才能修改,如果有主键要先删除