MySQL--数据库与表的操作

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

数据库的基本操作

 # 1、查看数据库
 show databases;
 ​
 # 2、创建数据库
 create database 数据库名称;
 ​
 # 3、删除数据库
 drop databse 数据库名称;

数据表的基本操作

一、创建数据表

1、创建表的语法形式

创建数据表之前,应使用语句"use 数据库名"指定操作是在哪个数据库中进行;

创建数据表语法格式如下:

 create table 表名(
 字段名1,数据类型 [列级别约束条件] [默认值],
 字段名2,数据类型 [列级别约束条件] [默认值],
 ...
 [表级别约束条件]
 );
     
 # 示例:创建员工表tb_emp1;
 create database test_db;
 use test_db;
 create table tb_emp1(
 id      int(11),
 name    varchar(25),
 deptId  int(11),
 salary  float
 );
 show databases;

使用create table创建表时,必须指定以下信息:

  • 要创建的表名称,不区分大小写,不能使用SQL语言中的关键字,如drop、alter、insert等
  • 数据表中的每一列(字段)的名称和数据类型,如果要创建多列,就要用逗号隔开;

2、使用主键约束

2.1、单字段主键

主键由一个字段组成,SQL语句格式分为以下两种情况

(1)在定义列的同时指定主键,语法格式:

 字段名 数据类型 primary key [默认值]
 ​
 # 示例:定义数据表tb_emp2,主键为id
 create table tb_emp2(
 id       int(11) primary key,
 name     varchar(25),
 deptId   INT(11),
 salary   float
 );

(2)在定义完所有列后指定主键

 [constraint <约束名>] primary key [字段名]
 ​
 # 示例: 定义数据表tb_emp3,主键为id
 create table tb_emp3(
 id      int(11),
 name    varchar(25),
 deptId  int(11),
 salary  float,
 primary key(id)
 );

2.2、多字段联合主键

主键由多个字段联合组成,其语法:

 primary key [字段1,字段2,...,字段n]
 ​
 # 示例:定义数据表tb_emp4,表无主键id,为了唯一确定一个员工,把name、deptId联合作为主键:
 create table tb_emp4(
 name     varchar(25),
 deptId   int(11),
 salary   float,
 primary key(name,deptId)
 );

3、使用外键约束

外键用来在两个表的数据之间建立连接,可以是一列或多列;一个表可以有一个或多个外键;外键对应的是参照完整性,一个表的外键可以为空值,若不为空,则每个外键值必须等于另一个表中主键的某个值;

外键:首先它是表中的一个字段,可不是本表主键,但要对应另外一个表的主键。

主表(父表):对于两个具有关联关系的表,相关联字段中主键所在的表为主表

从表(子表):对于两个具有关联关系的表,相关联字段中外键所在的表为从表

创建外键的语法如下:

 [constraint <外键名>] foreign key 字段名1 [,字段名2,...]
 references <主表名> 主键列1 [,主键列2,...]
 ​
 # 外键名:定义的外键约束的名称,一个表中不能有相同名称的外键
 # 字段名:字段需要添加外键约束的字段列
 # 主表名:被字表外键所依赖的表的名称
 # 主键列:主键中定义的主键列
 ​
 # 示例:定义tb_emp5,在tb_emp5表上创建外键约束,首先创建部门表tb_dept1
 create table tb_dept1(
 id        int(11) primary key,
 name      varchar(22) not null,
 location  varchar(50)
 );
 create table tb_emp5(
 id      int(11) primary key,
 name    varchar(25),
 deptId  int(11),
 salary  float,
 constraint fk_emp_dept1 foreign key(deptId) references tb_dept1(id)
 );
 # 在tb_emp5上添加了名称为fk_emp_dept1的外键约束,外键名称为deptId,依赖tb_emp1的主键id

4、使用非空约束

非空约束指字段的值不能为空;语法规则如下:

 字段名 数据类型 not null
 ​
 # 示例:定义数据表tb_emp6,指定员工的名称不能为空
 create table tb_emp6(
 id      int(11) primary key,
 name    varchar(25) not null,
 deptId  int(11),
 salary  float
 );

5、使用唯一性约束

唯一性约束要求该列唯一,允许为空,但只能出现一个空值。唯一约束可确保一列或几列不出现重复值;语法规则如下:

(1)在定义完列之后指定唯一约束

 字段名 数据类型 unique
 ​
 # 示例:定义数据表tb_dept2,指定部门的名称唯一
 create table tb_dept2(
 id       int(11) primary key,
 name     varchar(22) unique,
 location varchar(50)
 );

(2)在定义完所有列之后指定唯一约束

[constraint <约束名>] unique(<字段名>)

# 示例:定义数据表tb_dept3,指定部门的名称唯一
create table tb_dept3(
id        int(11) primary key,
name      varchar(22),
location  varchar(50),
constraint sth unique(name)
);

6、使用默认约束

默认约束指定某列的默认值;其语法规则如下:

字段名 数据类型 default 默认值

# 示例:定义数据表tb_emp7,指定员工的部门编号默认为1111
create table tb_emp7(
id      int(11) primary key,
name    varchar(25) not null,
deptId  int(11) default 1111,
salary  float
);

7、设置表的属性值自动增加

可通过为表主键添加auto_increment关键字来实现自动生成字段的主键值;默认初始值是1,每增加一条记录,字段值自动加1;一个表只能有一个字段使用auto_increment约束,且该字段必须为主键的一部分。auto_increment约束的字段可以是任何整数类型;其语法:

字段名 数据类型 auto_increment

# 定义数据表tb_emp8,指定员工的编号自动递增
create table tb_emp8 (
id      int(11) primary key auto_increment,
name    varchar(25) not null,
deptId  int(11),
salary  float
);

# 在添加记录的时候,id字段自动加1
insert into tb_emp8 (name,salary) values('lucy',1000),('lura',1200);
select * from tb_emp8;
mysql> select * from tb_emp8;
+----+------+--------+--------+
| id | name | deptId | salary |
+----+------+--------+--------+
|  1 | lucy |   NULL |   1000 |
|  2 | lura |   NULL |   1200 |
+----+------+--------+--------+

二、查看数据表结构

1、查看表基本结构语句

describe/desc语句可以查看表的字段信息,包括字段名、字段数据类型、是否为主键、是否有默认值等,其语法:

describe  表名;
或简写:
desc 表名;

# 示例:查看tb_emp1表结构:
mysql> desc tb_emp1;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | YES  |     | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

其中,各个字段的含义分别解释如下:

  • NULL:表示该列是否可以存储NULL值
  • Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示该列中某个给定值允许出现多次
  • Default:表示该列是否有默认值,有的话指定值是多少
  • Extra:表示可以获取的与给定列有关的附加信息,例如auto_increment等

2、查看表详细结构语句

show create table <表名\G>;

此语句不仅可以查看表创建时候的详细语句,还可查看存储引擎和字符编码;若不加\G参数,显示的结果会非常混乱;示例:查看tb_emp1的详细信息:

show create table tb_emp1;
+---------+----------------------------+
| Table   | Create Table               |
+---------+----------------------------+
| tb_emp1 | CREATE TABLE `tb_emp1` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(25) DEFAULT NULL,
  `deptId` int(11) DEFAULT NULL,
  `salary` float DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+---------+----------------------------+

三、修改数据表

1、修改表名

MySQL是通过ALTER TABLE语句来实现表名的修改的,其具体的语法规则如下:

alter table <旧表名> rename [to] <新表名>;
to 为可选参数

# 示例:将数据表tb_dept3改名为tb_department3
show tables;
alter table tb_dept3 rename tb_department3;
show tables;	# 检查

2、修改字段的数据类型

在MySQL中修改字段数据类型的语法规则如下:

alter table <表名> modify <字段名> <数据类型>

# 示例:将数据表tb_dept1中name字段的数据类型有varchar(22)修改成varchar(30)
alter table tb_dept1 modify name varchar(30);

3、修改字段名

alter table <表名> change <旧字段名> <新字段名> <新数据类型>;

# 示例1:将数据表tb_dept1中的location字段名称改为loc,数据类型不变
alter table tb_dept1 change location loc varchar(50);
# 示例2:将数据表tb_dept1中的loc字段改为location,同时将数据类型变为varchar(60)
alter table tb_dept1 change loc location varchar(60);

4、添加字段

一个完整的字段包括字段名、数据类型、完整性约束。添加字段的语法格式如下:

alter table <表名> add <新字段名><数据类型> [约束条件] [first | after 已存在字段名];

新字段名为需要添加的字段的名称;first为可选参数,表示将新添加的字段设置为表的第一个字段after为可选参数,表示将新添加的字段添加到"已存在字段名"的后面默认最后列

# 1、添加无完整性约束条件的字段
# 示例:在数据表tb_dept1中添加一个没有完整性约束的int类型的字段managerId;
alter table tb_dept1 add managerId int(10);

# 2、添加有完整性约束条件的字段
# 示例:在数据表tb_dept1中添加一个不能为空的varchar(12)类型的字段column1;
alter table tb_dept1 add column1 varchar(12) not null;

# 3、在表的第一列添加一个字段
# 示例:在数据表tb_dept1中添加一个int(11)类型的字段column2;
alter table tb_dept1 add column2 int(11) first;

# 4、在表的指定列之后添加一个字段
# 示例:在数据表tb_dept1中name列后添加一个int(11)类型的字段column3;
alter table tb_dept1 add column3 int(11) after name;

5、删除字段

alter table <表名> drop <字段名>;

# 示例:删除数据表tb_dept1表中的column2字段
alter table tb_dept1 drop column2;

6、修改字段的排列位置

alter table <表名> modify <字段1> <数据类型> first|after <字段2>;

"字段1"指要修改位置的字段;"数据类型"指"字段1"的数据类型;"first"为可选参数,指将"字段1"修改为表的第一个字段;"after 字段2"指将"字段1"插入到"字段2"后面;

# 1、修改字段为表的第一个字段
# 示例:将数据表tb_dept1中的culumn1字段修改为表的第一个字段
alter table tb_dept1 modify column1 varchar(12) first;

# 2、修改字段到表的指定列之后
# 示例:将数据表tb_dept1中的culumn1字段插入到location字段后
alter table tb_dept1 modify column1 varchar(12) after location

7、更改表的数据引擎

可以使用"show engines;"语句查看系统支持的存储引擎

更改表的存储引擎的语法格式如下:

alter table <表名> engine=<更改后的存储引擎名>;

# 示例:将数据表tb_department3的存储引擎修改为MyISAM
show create table tb_department3 \G
alter table tb_department3 engine=MyISAM;

8、删除表的外键约束

对于数据库中定义的外键,如果不再需要,可以将其删除;外键一旦删除就会解除主表和从表之间的关联关系;其语法格式如下:

alter table <表名> drop foreign key <外键约束名>
# 外键约束名 指定义表时constraint关键字后的参数

# 示例:删除表tb_emp9中的外键约束
create table tb_emp9(
id      int(11) primary key,
name    varchar(25),
deptId  int(11),
salary  float,
constraint fk_emp_dept foreign key (deptID) references tb_dept1(id)
);
show create table tb_emp9 \G
alter table tb_emp9 drop foreign key fk_emp_dept;

四、删除数据表

1、删除没有被关联的表

drop table [if exists]表1,表2,...表n;

# 示例:删除数据表tb_dept2
drop table if exists tb_dept2;

2、删除被其他表关联的表

先删子表再删父表;有的情况下要单独删除父表,只需要将关联的表的外键约束条件取消,就可以删除父表了;下面进行示例:

# 首先创建两个关联表
mysql> create table tb_dept2(
id       int(11) primary key,
name     varchar(22),
location varchar(50)
);
mysql> create table tb_emp(
id       int(11) primary key,
name     varchar(25),
deptId   int(11),
salary   float,
constraint fk_emp_dept foreign key (deptId) references tb_dept2(id)
);
mysql> show create table tb_emp \G

# 删除被数据表tb_emp关联的数据表tb_dept2
# 直接删除父表tb_dept2,发现报错;解除关联子表tb_emp的外键约束
drop table tb_dept2;
alter table tn_emp drop foreign key fk_emp_dept;
drop table tb_dept2;
show tables;

五、MySQL 8.0的新特性

1、默认字符集改为utf8mb4

在MySQL8.0之前,默认字符集为latin1,网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。若忘记修改;会出现乱码问题;使用以下命令查看数据库的默认编码:

show variables like 'character_set_database';

2、自增变量的持久化

在MySQL8.0之前,自增主键auto_increment的值如果大于max(primary key)+1,在MySQL重启后,会重置auto_increment=max(primary key)+1,这种现象在某些情况会导致业务主键冲突或其他难以发现的问题

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。 

学习永无止境,让我们共同进步!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李学不完

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值