喵星之旅-成长的雏鹰-MySQL数据库应用技术-2-数据管理

外键管理

如果一个实体的某个字段指向另一个实体的主键,就称为外键。被指向的实体,称之为主实体 (主表),也叫父实体(父表)。负责指向的实体,称之为从实体 (从表),也叫子实体(子表)。

外键的作用:为了一张表记录的数据不要太过几余、保持数据的一致性、完整性。

创建外键:建表时指定外键约束、建表后修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#外键:创建表时添加外键约束
#年级表:年级编号、年级名称
CREATE TABLE grade(
gradeid INT(10) PRIMARY KEY AUTO_INCREMENT,
gradename VARCHAR(50) NOT NULL
);

#学生表:学号、姓名、性别、年级、手机号、地址、出生日期、邮箱、身份证
CREATE TABLE student(
studentno INT(4) PRIMARY KEY,
studentname VARCHAR(20) NOT NULL DEFAULT '匿名',
sex TINYINT(1) DEFAULT 1,
gradeid INT(10),
phone VARCHAR(50) NOT NULL,
address VARCHAR(255),
borndate DATETIME,
email VARCHAR(50),
identityCard VARCHAR(18) NOT NULL,
CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) REFERENCES grade(gradeid)
);
#删除表时,先删除子表,再删除主表

#外键:创建表后,添加外键约束
CREATE TABLE grade(
gradeid INT(10) PRIMARY KEY AUTO_INCREMENT,
gradename VARCHAR(50) NOT NULL
);

#学生表:学号、姓名、性别、年级、手机号、地址、出生日期、邮箱、身份证
CREATE TABLE student(
studentno INT(4) PRIMARY KEY,
studentname VARCHAR(20) NOT NULL DEFAULT '匿名',
sex TINYINT(1) DEFAULT 1,
gradeid INT(10),
phone VARCHAR(50) NOT NULL,
address VARCHAR(255),
borndate DATETIME,
email VARCHAR(50),
identityCard VARCHAR(18) NOT NULL
);

ALTER TABLE student
ADD CONSTRAINT FK_gradeid FOREIGN KEY(gradeid) REFERENCES grade(gradeid);

#删除外键
ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
ALTER TABLE student DROP INDEX FK_gradeid;

SHOW CREATE TABLE student;

DML语言

DML(数据操作语言)
用于操作数据库对象中所包含的数据。

包括:INSERT ( 添加数据语句 )、UPDATE ( 更新数据语句 )、DELETE ( 删除数据语句 )。

添加数据

INSERT命令

1
INSERT INTO 表名 [ ( 字段1, 字段2, 字段3, … ) ] VALUES ( '值1','值2','值3', …)

字段或值之间用英文逗号隔开;
“字段1, 字段2…”该部分可省略,但添加的值务必与表结构数据列顺序相对应,且数量一致;
可同时插入多条数据,values 后用英文逗号隔开.

1
2
3
4
5
6
insert into student 
(StudentNo,StudentName,Sex,GradeId,Phone,Address,Email,IdentityCard)
values
(1111,"郭靖",1,1,"13500000001","北京海淀区中关村大街1号","guojing@kittybunny.club","450323198612111000"),
(1112,"李文才",1,2,"13500000002","河南洛阳","liwencai@kittybunny.club","450323198512311000"),
(1113,"李梅",2,3,"13500000015","上海卢湾区","limei@kittybunny.club","450323198412311000")

修改数据

UPDATE命令

1
2
UPDATE 表名
SET column_name = value [ , column_name2 = value2, …. ] [ WHERE condition ];

column_name 为要更改的数据列;
value 为修改后的数据,可以为变量、具体值、表达式或者嵌套的SELECT结果;
condition为筛选条件,如不指定则修改该表的所有列数据.

WHERE条件子句
简单理解为有条件地从表中筛选数据.

WHERE中的运算符
Alt text

1
2
updata student set email="student1013@kittybunny.club" , LoginPwd="000000" where StudentNo = "1013";

删除数据

DELETE命令

1
DELETE FROM 表名 [ WHERE condition ];

condition为筛选条件,如不指定则删除该表的所有列数据;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#创建一个demo_delete表
DROP TABLE IF EXISTS demo_delete;
CREATE TABLE IF NOT EXISTS demo_delete(
id INT(10) NOT NULL AUTO_INCREMENT,
title VARCHAR(32) NOT NULL,
PRIMARY KEY(id)
);

INSERT INTO demo_delete (title) VALUES ("aaaaa"),("bbbbb"),("cccccc"),("ddddd");

#带where条件的删除数据

DELETE FROM demo_delete WHERE title = "aaaa";


#不加where条件的删除数据

DELETE FROM demo_delete;

TRUNCATE命令

1
TRUNCATE [TABLE] table_name

用于完全清空表数据,但表结构、索引、约束等不变。

区别于DELETE命令
相同:都能删除数据、不删除表结构,但TRUNCATE 速度更快。

不同:使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器、使用TRUNCATE TABLE不会对事务有影响。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#创建一个demo_delete表
DROP TABLE IF EXISTS demo_delete;
CREATE TABLE IF NOT EXISTS demo_delete(
id INT(10) NOT NULL AUTO_INCREMENT,
title VARCHAR(32) NOT NULL,
PRIMARY KEY(id)
) AUTO_INCREMENT = 5 ;

INSERT INTO demo_delete (title) VALUES ("aaaaa"),("bbbbb"),("cccccc"),("ddddd");

#TRUNCATE清除数据
TRUNCATE TABLE demo_delete;

# 与 用 delete 删除数据比较, AUTO_INCREMENT 的值有不同
# delete 删除的不会重置该值,从上次插入的主键ID开始累计
delete from demo_delete;
文章目录
  1. 外键管理
  2. DML语言
  3. 添加数据
  4. 修改数据
  5. 删除数据
    1. DELETE命令
    2. TRUNCATE命令
|