数据库的基本操作

SQL 语言不区分大小写,所以命令大写小写都无所谓,建议大写便于区分

创建数据库

CREATE DATABASE 数据库名称;

运行效果:

1703124595015.png
1703124595015.png

查看数据库基本信息

创建数据库后查看该数据库基本信息MySQL命令

SHOW CREATE DATABASE 数据库名称;

运行效果:

1703124704876.png
1703124704876.png

删除数据库

DROP DATABASE 数据库名称;

运行效果:

1703124861858.png
1703124861858.png

查询 MySQL 中所有的数据库

SHOW DATABASES;

运行效果:

1703125046320.png
1703125046320.png

修改数据的字符集

以修改为 GBK 为例:

ALTER DATABASE 数据库名称 CHARACTER SET GBK;

运行效果:

1703125486813.png
1703125486813.png

切换数据库

USE 数据库名称;

运行效果:

1703125599718.png
1703125599718.png

查看当前使用的数据库

SELECT DATABASE();

运行效果:

1703125668851.png
1703125668851.png

数据表的基本操作

数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。

请注意:在操作数据表之前应使用“USE 数据库名;”指定操作是在哪个数据库中进行先关操作,否则会抛出“No database selected”错误。

CREATE DATABASE studb;
USE studb;

创建数据表

 create table 表名(
         字段1 字段类型 约束,
         字段2 字段类型 约束,
         …
         字段n 字段类型 约束
);

示例:

 create table student(
 sid char(4) NOT NULL PRIMARY KEY,
 name char(8) NOT NULL,
 sex char(2),
 birthday date,
 addr varchar(50)
 );

运行效果:

1703126557518.png
1703126557518.png

查看数据表

查看所有表

SHOW TABLES;

运行效果:

![[Pasted image 20231221104413.png]]

查看某个表的基本信息

SHOW CREATE TABLE 表名称;

运行效果:

1703126795786.png
1703126795786.png

查看表的字段信息

DESC 表名称;

示例:

DESC student;

运行效果:

1703126938735.png
1703126938735.png

修改数据表

修改表名

ALTER TABLE student RENAME TO stu;

运行效果:

1703127225634.png
1703127225634.png

修改字段名

ALTER TABLE stu CHANGE NAME SNAME VARCHAR(10);

运行效果:

1703127380793.png
1703127380793.png

1703127395525.png
1703127395525.png

修改字段数据类型

ALTER TABLE stu MODIFY sname INT;

运行效果:

1703127528501.png
1703127528501.png

增加字段

ALTER TABLE stu ADD phone VARCHAR(15);

运行效果:

1703127652168.png
1703127652168.png

删除字段

ALTER TABLE stu DROP phone;

运行效果:

1703127794425.png
1703127794425.png

删除数据表

DROP TABLE 表名;

示例:

在上面的数据库中我新建了一个 test 数据表

1703128171637.png
1703128171637.png

现在把 test 数据表删除

DROP TABLE test;

运行效果:

1703128226008.png
1703128226008.png

表的约束

常见的约束如下:

约束条件说明
PRIMARY KEY主键约束用于唯一标识对应的记录
FOREIGN KEY外键约束
NOT NULL非空约束
UNIQUE唯一性约束
DEFAULT默认值约束,用于设置字段的默认值

1. 主键约束

  • 主键约束相当于唯一性约束+ 非空约束,主键约束不允许重复,也不允许出现空值
  • 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别创建

创建主键约束方式:

1. 创建表时创建

  • 方法一:
CREATE TABLE test(
    id int PRIMARY KEY
);

运行效果:

1703128906126.png
1703128906126.png

  • 方法二:
CREATE TABLE test(
    id int,
    PRIMARY KEY(id)
);

运行效果:

1703128928219.png
1703128928219.png

2. 创建表后添加约束

  • 方式一:
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);

示例:

添加前没有主键约束

1703129208320.png
1703129208320.png

执行下方命令

ALTER TABLE test ADD PRIMARY KEY(id);

运行效果:

1703129294911.png
1703129294911.png

  • 方式二:
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;

示例:

ALTER TABLE test MODIFY id INT PRIMARY KEY;

1703129624333.png
1703129624333.png

1703129634910.png
1703129634910.png

2. 非空约束

  • 默认所有有的类型得知都可以是null 包括int,float等数据类型
  • 非空约束只能出现表对象的列上,只能某个列单独限定非空,不能组合非空
  • 一个表可以有很多列都分别限定了非空

非空约束的创建方式:

1. 创建表时创建

    CREATE TABLE 表名(
    字段名 字段类型 NOT NULL
    );

示例:

CREATE TABLE test(name VARCHAR(20) NOT NULL);

运行效果:

1703132950498.png
1703132950498.png

2. 创建表后添加约束

ALTER TABLE 表名称 MODIFY 字段名 数据类型 NOT NULL;

示例:

ALTER TABLE test 
MODIFY name VARCHAR(20) NOT NULL;

3. 取消非空约束

ALTER TABLE 表名称 MODIFY 字段名 数据类型 NULL;

示例:

ALTER TABLE test MODIFY name VARCHAR(20) NOT NULL;

3. 默认值约束

  • 一个表可以有很多的默认值约束
  • 默认值约束只能针对某一个字段来说
  • 默认值约束意味着,该字段如果没有手动赋值,会按默认值处理

1. 建表时指定默认值约束

CREATE TABLE 表名称(
    字段名1 数据类型  PRIMARY KEY,
    字段名2 数据类型 [UNIQUE KEY] [NOT NULL] DEFAULT 默认值,
    字段名3 数据类型 DEFAULT 默认值,
    ...
);

示例:

创建一个 student 表,其中性别默认为男

CREATE TABLE student( 
sid INT PRIMARY KEY, 
sname VARCHAR(20) NOT NULL, 
gender CHAR DEFAULT '男' 
);

1703134151279.png
1703134151279.png

然后插入数据,只给出 sidsname

INSERT INTO student(sid,sname) VALUES(2,'海绵宝宝');

运行结果:

1703134329447.png
1703134329447.png

2. 建表后指定某个字段有默认值

ALTER TABLE 表名称 MODIFY 字段名 数据类型 DEFAULT 默认值;

示例:

先创建数据表

CREATE TABLE student( 
sid int PRIMARY KEY, 
sname varchar(20) NOT NULL, 
gender char 
);

然后对指定字段添加默认值约束

ALTER TABLE student MODIFY gender char DEFAULT '男';

1703135029461.png
1703135029461.png

注意事项

如果某个字段既要非空,又要默认值,那么 ALTER 后面两个约束都要写上。如果只写了默认值约束,那么就会取消非空约束(即便原本有非空约束)

错误示范:

原本 gender 是有 NOT NULL 约束的

1703135753328.png
1703135753328.png

然后执行

ALTER TABLE student MODIFY gender char(1) DEFAULT '男';

执行结果:

1703135872079.png
1703135872079.png

可以看到执行结果没有了非空约束

<font color = red>同样的,如果对有默认值的字段添加非空约束,如果在命令行中不添加默认值约束,那么最后的执行结果就只有非空约束,并失去原来的默认值约束!</red>

正确操作:

1703135753328.png
1703135753328.png

执行下方命令

alter table student modify gender char default '男' not null;

执行结果:

1703136257218.png
1703136257218.png

取消默认值约束

#不写默认值约束
#加[]中的非空约束会添加或者保留非空约束
#不加[]中的非空约束会添加或者保留非空约束,则会取消非空约束
ALTER TABLE [数据库名]表名称 MODIFY 字段名 数据类型 [NOT NULL]; 

4. 唯一性约束

  • 表可包含多个唯一约束,但每个表只允许一个主键。
  • 唯一约束列可包含 NULL 值。
  • 唯一约束列可修改或更新。
  • 唯一约束列的值可重复使用。
  • 唯一约束不能用来定义外键。

创建唯一性约束的两种方式:

1. 创建表的时候添加

模板:

CREATE TABLE 表名(
-- 不指定约束名称
字段名1 字段类型 UNIQUE,

字段名2 字段类型,
UNIQUE (字段名2),
-- 指定约束名称
字段名3 字段类型 CONSTRAINT 约束名 UNIQUE,

字段名4 字段类型,
CONSTRAINT 约束名 UNIQUE (字段4)
)

示例:

CREATE TABLE student(
-- 创建唯一性约束
-- 单个唯一约束
-- 按规范id应该设为主键约束,为了演示现在设为UNIQUE
id INT UNIQUE,

name VARCHAR(20),
address VARCHAR(255),
-- 多个唯一性约束
CONSTRAINT name_address UNIQUE (name,address)
);
  • 第一个 UNIQUE 约束 id 列,表示每个学生具有唯一的 id 号码
  • 第二个 UNIQUE 约束名称为 name_address,表示每个学生的 name 可以重复,学生的 address 也可以重复,但是 name+address 必须唯一不可重复

2. 创建表后添加唯一约束

-- 指定约束名
ALTER TABLE 表名
ADD CONSTRAINT 约束名称 UNIQUE (列名);

-- 不指定约束名
ALTER TABLE 表名
ADD UNIQUE (列名);

-- 创建多个唯一约束
-- 指定约束名
ALTER TABLE 表名
ADD CONSTRAINT 约束名 UNIQUE (列名1,列名2);

-- 不指定约束名
ALTER TABLE 表名
ADD UNIQUE (列名1,列名2);

3. 删除唯一约束

添加唯一约束时,MySQL 将为数据库创建一个相应的 BTREE 索引,所以删除索引即可删除约束。通过如下命令删除约束:

SHOW INDEX FROM 表名;

运行结果:

1703253913106.png
1703253913106.png

模板:

-- 格式一
DROP INDEX 约束名 ON 表名;

-- 格式二
ALTER TABLE 表名
DROP INDEX 约束名;

格式一:

DROP INDEX id ON student;

运行效果:

1703254026946.png
1703254026946.png

格式二:

ALTER TABLE student
DROP INDEX name_address;

运行效果:

1703254114268.png
1703254114268.png

5. 外键约束

  • 从表中添加的外键的值,一定要在主表中的 id 里存在,否则就会报错
  • 如果想要添加从表数据,先添加主表相对应的 id 的内容
  • 为了保证数据的完整性,如果当前主表中的数据已经被从表引用,则主表中的该数据无法被删除
  • 一个表可以有多个外键

创建外键约束的方式:

1. 创建表时添加

-- 定义表的同时创建外键
CREATE TABLE 表名 (
    字段名 字段类型 ... ,
    [CONSTRAINT 约束名] FOREIGN KEY (外键) REFERENCES 主表名 (主键)
    [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
    [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
);
/*
说明:
定义外键约束之后,在删除父表记录和更新父表的主键时可以设置以下操作方式:
(1)CASCADE 方式:在父表上更新和删除记录时,子表匹配的记录也同步进行更新(级联更新)和删除(级联删除);
(2)SET NULL 方式:在父表上更新和删除记录时,子表匹配的记录的外键设为NULL;
(3)No ACTION 方式:如果子表中有匹配的记录,则不允许对父表对应的主键进行更新和删除操作;
(4)RESTRICT 方式:同 no action, 都是立即检查外键约束;
(5)SET DEFULT 方式:父表上更新和删除记录时,子表将外键列设置成一个默认的值;
(6)系统默认为No ACTION 方式。
*/

2. 创建后添加外键

-- 为一个已存在的表定义外键
ALTER TABLE 表名
ADD CONSTRAINT 约束名
FOREIGN KEY(列名) REFERENCES 父表名(列名)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
;

检查约束

  • 用来检查数据表中,字段值是否有效,减少无效数据的输入。
CERATE TABLE <表名> (<字段名> <数据类型> ,
...,
CHECK <检查约束>);

-- <检查约束>,可以是简单的表达式,也可以是子查询
-- 例如创建一张表,定义一个age字段,要求age的值必须大于0
CREATE TABLE test (
age INT,
CHECK(age > 0));

总结

1、主键约束

主键是表中能唯一识别表中每条信息的字段。要求:唯一、非空。一个表中只能有 1 个主键。

2、外键约束

与主键结合使用,确保数据的一致性。

3、唯一约束

一个表中可以有多个字段设置唯一约束,允许存在空值。

4、检查约束

用来检查数据表中,字段值是否有效,减少无效数据的输入。

5、非空约束

设置了非空约束的字段,不允许出现空值。

6、默认值约束

设置了默认值约束的字段,在该字段无数据输入时,会自动添加一个默认值。通常和非空约束一起使用。