数据库的基本操作
SQL 语言不区分大小写,所以命令大写小写都无所谓,建议大写便于区分
创建数据库
CREATE DATABASE 数据库名称;
运行效果:
查看数据库基本信息
创建数据库后查看该数据库基本信息MySQL命令
SHOW CREATE DATABASE 数据库名称;
运行效果:
删除数据库
DROP DATABASE 数据库名称;
运行效果:
查询 MySQL 中所有的数据库
SHOW DATABASES;
运行效果:
修改数据的字符集
以修改为 GBK 为例:
ALTER DATABASE 数据库名称 CHARACTER SET GBK;
运行效果:
切换数据库
USE 数据库名称;
运行效果:
查看当前使用的数据库
SELECT DATABASE();
运行效果:
数据表的基本操作
数据库创建成功后可在该数据库中创建数据表(简称为表)存储数据。
请注意:在操作数据表之前应使用“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)
);
运行效果:
查看数据表
查看所有表
SHOW TABLES;
运行效果:
![[Pasted image 20231221104413.png]]
查看某个表的基本信息
SHOW CREATE TABLE 表名称;
运行效果:
查看表的字段信息
DESC 表名称;
示例:
DESC student;
运行效果:
修改数据表
修改表名
ALTER TABLE student RENAME TO stu;
运行效果:
修改字段名
ALTER TABLE stu CHANGE NAME SNAME VARCHAR(10);
运行效果:
修改字段数据类型
ALTER TABLE stu MODIFY sname INT;
运行效果:
增加字段
ALTER TABLE stu ADD phone VARCHAR(15);
运行效果:
删除字段
ALTER TABLE stu DROP phone;
运行效果:
删除数据表
DROP TABLE 表名;
示例:
在上面的数据库中我新建了一个 test 数据表
现在把 test 数据表删除
DROP TABLE test;
运行效果:
表的约束
常见的约束如下:
约束条件 | 说明 |
---|---|
PRIMARY KEY | 主键约束用于唯一标识对应的记录 |
FOREIGN KEY | 外键约束 |
NOT NULL | 非空约束 |
UNIQUE | 唯一性约束 |
DEFAULT | 默认值约束,用于设置字段的默认值 |
1. 主键约束
- 主键约束相当于唯一性约束+ 非空约束,主键约束不允许重复,也不允许出现空值
- 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别创建
创建主键约束方式:
1. 创建表时创建
- 方法一:
CREATE TABLE test(
id int PRIMARY KEY
);
运行效果:
- 方法二:
CREATE TABLE test(
id int,
PRIMARY KEY(id)
);
运行效果:
2. 创建表后添加约束
- 方式一:
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
示例:
添加前没有主键约束
执行下方命令
ALTER TABLE test ADD PRIMARY KEY(id);
运行效果:
- 方式二:
ALTER TABLE 表名 MODIFY 列名 数据类型 PRIMARY KEY;
示例:
ALTER TABLE test MODIFY id INT PRIMARY KEY;
2. 非空约束
- 默认所有有的类型得知都可以是null 包括int,float等数据类型
- 非空约束只能出现表对象的列上,只能某个列单独限定非空,不能组合非空
- 一个表可以有很多列都分别限定了非空
非空约束的创建方式:
1. 创建表时创建
CREATE TABLE 表名(
字段名 字段类型 NOT NULL
);
示例:
CREATE TABLE test(name VARCHAR(20) NOT NULL);
运行效果:
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 '男'
);
然后插入数据,只给出 sid
和 sname
INSERT INTO student(sid,sname) VALUES(2,'海绵宝宝');
运行结果:
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 '男';
注意事项
如果某个字段既要非空,又要默认值,那么 ALTER
后面两个约束都要写上。如果只写了默认值约束,那么就会取消非空约束(即便原本有非空约束)
错误示范:
原本 gender
是有 NOT NULL
约束的
然后执行
ALTER TABLE student MODIFY gender char(1) DEFAULT '男';
执行结果:
可以看到执行结果没有了非空约束
<font color = red>同样的,如果对有默认值的字段添加非空约束,如果在命令行中不添加默认值约束,那么最后的执行结果就只有非空约束,并失去原来的默认值约束!</red>
正确操作:
执行下方命令
alter table student modify gender char default '男' not null;
执行结果:
取消默认值约束
#不写默认值约束
#加[]中的非空约束会添加或者保留非空约束
#不加[]中的非空约束会添加或者保留非空约束,则会取消非空约束
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 表名;
运行结果:
模板:
-- 格式一
DROP INDEX 约束名 ON 表名;
-- 格式二
ALTER TABLE 表名
DROP INDEX 约束名;
格式一:
DROP INDEX id ON student;
运行效果:
格式二:
ALTER TABLE student
DROP INDEX name_address;
运行效果:
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、默认值约束
设置了默认值约束的字段,在该字段无数据输入时,会自动添加一个默认值。通常和非空约束一起使用。