MySQL 数据库常见指令三

总结

学习到的知识如下

create table stu(stu_id int primary key auto_increment,
                 name varchar(20),
                 age tinyint,
                 ins_id int not null);

表结构操作

1、修改表名

alter table tb_name rename to new_tb_name;
把原表名为tb_name的修改为new_tb_name;

2、修改字段

alter table new_tb_name change name sut_name datetime;
将表名为new_tb_name中字段为name的名字修改为stu_name,并且字段值的类型修改为datetime类型,
注:修改字段,必须带上修改后的字段类型

3、修改字段类型

alter table new_tb_name modify stu_name varchar(20);
将表名为new_tb_name中字段为sut_name的字段类型修改为varchar(20)
注:如果将字符类型的字段修改为类型为数值型,那么修改前需确认字符中是否是全部是数字,如果不是,会出现不匹配报错```

4、添加字段

alter table new_tb_name add sex varchar(10);
在表new_tb_name中添加一个新字段sex,且字段类型为varchar,长度为10的字段。

5、删除字段

alter table new_tb_name drop sex;
将表new_tb_name中字段为sex的字段删除

约束条件

是一种限制,通过对表中的数据做出限制,来确保数据的完整性,唯一性


1、默认约束

default

创建时约束

create table tb_name (id int default 0);

创建tb_name时制定字段id类型为int,默认值为0

加字段时制定

alter table tb_name add name varchar(20) default "name";

增加字段name时制定默认值为name

2、非空约束

not null

创建时制定

create table tb_name (id int not null,name varchar(20));

创建表tb_name时字段类型为int,插入数据时不能为空值,所以一般非空和默认约束配合使用。

同样可以在修改或者增加字段时指定。

3、唯一约束

unique key

创建时制定

create table tb_name(id int unique key);

创建表tb_name 时字段id唯一,插入值时id不能重复,否则会报错。

同样可以在修改或者增加字段时指定。

4、主键约束

primary key

一个表只能有一个主键

创建时指定

create table tb_name(id int primary key);

创建表tb_name时字段id为主键,主键是非空加唯一

删除主键约束

alter table tb_name drop  primary key;

删除表tb_name的主键约束

5、自增长约束

auto_increment

一般和主键配合使用一个表只能有一个

创建时指定

create table tb_name(id int primary key auto_increment,name varchar(20));

创建表tb_name时,字段id类型int,且为主键,没插入一个数据,id会自动加1.

所以插入数据时,如果数据为空,必须制定主键值,或者加上default

insert into tb_name values(default,"jiuchen");
insert into tb_name values(null,"jiuchen");

6、外键约束

foreign key … references

外键约束是连接两个表,所以外键约束必须有两个表以上才行

创建时指定

表1:

create table tb_name1(tb1_id int primary key auto_increment,name varchar(20));

表2:加上外键约束

create table tb_name2(tb2_id int primary key,phone int,foreign key(tb2_id) references tb_name1(tb1_id));

上述表tb_name1和tb_name2其中都是以id为主键。且表2中的tb2_id为外键,与表tb_name1中tb1_id相关联。

注:

  • 表tb_name2的tb2_id值表tb_name1中绝对有,单表tb_name1中有的tb1_id的值,表tb_name2不一定有。
  • 删除表tb_name1中的数据时,如果表tb_name2中有id与表1对应,只有先删除tb_name2中对应id的数据,才能删除表tb_name1中的数据。
  • 修改同样如此,即表tb_name2中有与表tb_name1中有相对应的id数据,那么直接修改表1的tb1_id,会报错。

修改外键约束

先查表的外键名
SHOW CREATE TABLE course;
然后删除
alter table course drop foreign key course_ibfk_1;

添加外键约束

alter table course add foreign key(col_id) reference college(col_id);

表关系

1、一对一

用主键加主键来实现一对一

表1:

create table stu_out(stu_id int primary key ,
                 name varchar(20),
                 age tinyint,
                 sex varchar(20));

表2:

create table stu_in(stu_id int primary key ,
                 	 grade varchar(20),
                	phone int,
                 	address varchar(50)
                	foreign key(stu_id) references stu_out(stu_id));

以上的两个表stu_out和stu_in通过主键id形成了一对一的关系。

2、一对多关系

主键加主键,外键关联

表3:

create table deparment(dep_id int primary key auto_increment,
                       dep_name varchar(20));

表1:一对一关系中的表1加一个dep_id为非主键

create table stu_out(stu_id int primary key ,
                 	name varchar(20),
                 	age tinyint,
                 	sex varchar(20)
                    dep_id int not null
                    foreign key(dep_id) references deparment(dep_id));

表1的主键stu_id已经与表2的主键关联起来了,但是表1中的dep_id又与表3中的主键

dep_id关联起来,这种情况就是一对多。

即一个主键可以用来对应多个主键

3、多对多

需要通过中间表来实现

通过中间表来联合主键,分别关联两个表(通过外键关联)

表4:

create table cours(cou_id int primary key auto_increment,
                   cou_name varchar(20) not null);

中间表:

create table select(stu_id int ,
                   cou_id int,
                   primary key(stu_id,cou_id),
                   foreign key(stu_id) references stu_out(stu_id),
                   foreign key(cou_id) references cours(cou_id));

其中 primary key(stu_id,cou_id),为联合主键,下面的两个foreign key分别关联两个表:表1 stu_out和表4 cours的主键。

即中间表的联合主键分别对应两个表的多个主键,即中间表的

stu_id 可以对应多个表1的stu_id;

cou_id可以对应多个表4的cou_id;

这样就形成了多对多的关系

原创文章 38 获赞 9 访问量 4510

猜你喜欢

转载自blog.csdn.net/Limit_Fly/article/details/105803908