文章目录
- 一、数据库操作
- 1、创建数据库
- 2、删除数据库
- 二、表操作
- 1、创建表
- (1)主键(primary key)属性
- (2)unique属性
- (3)主键和unique约束的区别
- (4)外键
- (5)auto_increment属性
- (6)列的注释
- (7)其他
- 2、删除表
- 3、查看表结构
- 4、查看表创建语句
- 5、修改表名称
- 6、修改多个表名称
- 7、增加列
- 8、删除列
- 9、修改列
- 10、修改列排列位置
一、数据库操作
1、创建数据库
create database IF NOT EXISTS db_javaagent_demo;
2、删除数据库
drop database IF EXISTS db_javaagent_demo;
二、表操作
1、创建表
create table if not exists tb_student(id int(4) primary key not null auto_increment,number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date
) COMMENT '学生基本信息表';insert into tb_student values(10001, 'tom', '10001');
注:
-
char
:定长的字符串; -
varchar
:变长的字符串; -
comment
:表的注释信息;
(1)主键(primary key)属性
如果主键是单列的话,可以直接在该列后面声明primary key,如下将number设置为主键:
create table if not exists tb_student(number int primary key,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date
) COMMENT '学生基本信息表';
我们也可以把主键的声明单独提取出来,用下面形式声明:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,primary key (number)
) COMMENT '学生基本信息表';
对于多个列的组合作为主键的话,就必须使用这种单独声明的形式:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,primary key (number, id_number)
) COMMENT '学生基本信息表';
注:主键列默认是有not null属性的。
(2)unique属性
unique
属性表明列的值不允许重复。
如果我们想为单个列声明 unique
属性,可以直接在该列后填写 unique
或者 unique key
,例如将 tb_student
表中的 id_number
列声明为 unique
属性:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18) unique,department varchar(30),major varchar(30),enrollment_time date,primary key (number)
) COMMENT '学生基本信息表';
我们也可以把unique属性声明单独提取出来,用下面形式声明:
unique [约束名称] (列名1, 列名2, ...)
unique key [约束名称] (列名1, 列名2, ...)
当我们为某个列添加了一个unique属性后,我们插入的记录的该列的值就不能重复,所以为列添加了一个unique属性也可以认为是为这个表添加了一个约束,我们就称之为unique约束。
每个约束都可以有一个名字,像主键也算是一个约束,他的名字就是默认的primary,不过一个表中可以为不同的列添加多个unique属性,也就是添加多个unique约束,每添加一个unique约束,我们就可以给他起个名,这就是上边的 「约束名称」 的含义。
不过「约束名称」是被中括号[]扩起来的,意味着我们写不写都可以,如果不写的话,MySQL会自己帮我们起名。
例如:
create table if not exists tb_student(number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,unique key uk_id_number (id_number, number)
) COMMENT '学生基本信息表';
注:多个列组合具有unique属性的情况,必须使用这种单独声明的形式。
如果表中为某个列或列组合定义了unique属性的话,MySQL会对我们插入的记录做校验,如果新插入的记录在该列或者列组合的值已经在表中存在了,那就会报错。
注:组合列定义unique属性的话,只有组合列的值都相同才会报错。
(3)主键和unique约束的区别
主键和unique约束都能保证某个列或者列组合的唯一性,但是:
-
一张表中只能定义一个主键,却可以定义多个unique约束;
-
主键列不允许存放null,而声明了unique属性的列可以存放null,而且null可以重复的出现在多条记录中;
注:一个表的某个列声明了unique属性,那这个列的值不就不可用重复,那为啥null这么特殊呢?null其实并不是一个值,他代表不确定,我们平常说某个列的值为null,意味着这一列的值还未被设置。
(4)外键
插入到学生成绩表 tb_student_score中的number
(学号)列中的值必须能在学生基本信息表tb_student
表中 number
列中找到,否则如果一个学号只在成绩表里出现,而在基本信息表中找不到相应记录的话,就相当于插入了不知道哪个学生的成绩,这显然是荒谬的。为了防止这样的情况出现,MySQL给我们提供了外键约束机制。
外键定义语法:
constraint [外键名称] foreign key(列1, 列2, ...) references 父表名(父列1, 父列2, ...);
其中「外键名称」也是可选的,一个名字而已,我们自己不命名的话,MySQL自己会帮我们命名。
如果A表中的某个列或者某些列依赖与B表中的某个列或某些列,那么就称A表为子表,B表为父表。
子表和父表可以使用外键来关联起来,上边的例子tb_student_score表的number列依赖于tb_student的number列,所以tb_student就是一个父表,tb_student_score就是子表。
我们在tb_student_score建表语句中定义一个外键:
create table tb_student_score (number int,subject varchar(30),score tinyint,primary key (number, subject),constraint foreign key(number) references tb_student(number)
);
这样,在对tb_student_score表插入数据时,MySQL都会为我们检查一下插入的学号是否能在tb_student表中找到,如果找不到就会报错。
注:父表中被子表依赖的列或者列组合必须建立索引,如果该列或者列组合已经是主键或者有unique属性,那么他们也就被默认建立了索引。
(5)auto_increment属性
auto_increment翻译成中文可以理解为 自动增长
,简称自增。
如果一个表中的某个列的数据类型是整数类型或者浮点数类型,那么这个列可以设置auto_increment属性,当我们把某个列设置了auto_increment属性之后,如果我们在插入新记录的时候不指定该列的值,或者将该列的值显式的指定为NULL或者0,那么新插入的记录在该列上的值就是当前该列的最大值+1后的值。
# 列名 列的类型 auto_increment
create table if not exists tb_student(id int auto_increment primary key,number int,name varchar(20),sex char(2),id_number char(18),department varchar(30),major varchar(30),enrollment_time date,unique key uk_id_number (id_number, number)
) COMMENT '学生基本信息表';
注:
一个表中最多有一个具有auto_increment属性的列;
具有auto_increment属性的列必须建立索引。主键或具有unique属性的列会自动建立索引,具体什么是索引,后面会具体讲解;
一般拥有auto_increment属性的列都是作为主键的属性,来自动生成唯一标识一条记录的主键值;
(6)列的注释
前面讲过,在建表语句的末尾可以添加comment语句来给表添加注释,其实我们可以在每一个列末尾添加comment语句来为列来添加注释,例如:
create table if not exists tb_student(id int auto_increment primary key,number int comment '学号',name varchar(20) comment '姓名',sex char(2) comment '性别',id_number char(18) comment '身份证号',unique key uk_id_number (id_number, number)
) COMMENT '学生基本信息表';
(7)其他
每个列可以同时具有多个属性,属性声明的顺序无所谓,各个属性之间用空白隔开就好。
注:有的属性是冲突的,一个列不能具有两个冲突的属性,例如:
一个列不能既声明为primary key,又声明为unique;
一个列不能既声明为default null,又声明为not null;
2、删除表
drop table if exists tb_student;
3、查看表结构
describe tb_student;
desc tb_student;
explain tb_student;
show columns from tb_student;
show fields from tb_student;
4、查看表创建语句
# show create table 表名;
show create table tb_student;
5、修改表名称
# alter table 旧表名 rename to 新表名;
alter table tb_student rename to tb_student_1;
6、修改多个表名称
# rename table 旧表名1 to 新表名, 旧表名2 to 新表名2, ...;
rename table tb_student to tb_student_1, tb_user to tb_user_1;
7、增加列
# alter table 表名 add column 列名 列的类型 [列的属性];
alter table tb_student add column nickname varchar(20) not null;
默认情况下列都是加到现有列的最后一行后面,增加列到特定位置:
# 添加到第一列
# alter table 表名 add column 列名 列的类型 [列的属性] first;
alter table tb_student add column nickname varchar(20) not null first;
8、删除列
# alter table 表名 drop column 列名;
alter table tb_student drop column nick_name;
9、修改列
# alter table 表名 modify 列名 新数据类型 [新属性];
alter table tb_student modify nick_name varchar(20) not null;#alter table 表名 change 旧列名 新列名 新数据类型 [新属性];
alter table tb_student change nick_name nick_name_1 varchar(20) not null;
10、修改列排列位置
# alter table 表名 modify 列名 列的类型 列的属性 first;
alter table tb_student modify nick_name varchar(20) not null first;# alter table 表名 modify 列名 列的类型 列的属性 after 指定列名;
alter table tb_student modify nick_name varchar(20) not null after name;