欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL数据管理

程序员文章站 2024-03-21 17:49:04
...

1. 主键与外键

1.1 创建主键

关系型数据库中的一条记录有若干个字段(列/属性),若其中某个字段/字段组能够唯一标识一条记录,该字段组就可以成为一个主键,一般情况下主键不具备任何含义,只是用于标识当前记录。

除了在创建表时指定主键外,我们可通过修改表的方式来添加主键,具体如下;

ALTER TABLE 表名 ADD CONSTRAINT 主键名
PRIMARY KEY (主键字段);

MySQL数据管理

1.2 创建外键

外键用于与另一张表的关联,是能够确定另一张表记录的字段,用于保持数据的一致性。外键的特点:从表外键的值时对主表外键的引用,以表外键类型,必须与主表主键类型一致。

ALTER BABLE 从表 ADD CONSTRAINT 外键名称
FOREIGN KEY 从表外键字段名
REFERENCES 主表的外键
[外键名称] 用于删除外键约束,建议 _fk 结尾

在添加外键时可能会出现如err(150)等错误,可能的原因有:

  1. 外键的引用类型不一样,另一张表的主键时int,而本张表中对应的外键时char等类型。
  2. 找不到主表中引用的列。
  3. 主键和外键的字符编码不一致
  4. 两张表存储引擎不一样。(MyISAM储存引擎不支持外键)

在MySQL中创建外键时经常会遇到问题而失败,这是因为MySQL中还有狠多细节需要留意

  1. 两个字段的类型或者大小不严格匹配。例如,如果一个时int(10),那么外键也必须设置成int(10),另外还必须确定是否为一个signed,而另一个又是unsigned(即:无符号),这两字段必须严格地一致匹配。
  2. 试图设置外键的字段没有建立起索引,或者不是一个primary key。 如果其中一个不是primary key的话,你必须先为它创建一个索引。
  3. 其中一个或者两个表是MyISAM引擎的表。若想要使用外键约束,表必须是innoDB引擎。
  4. 外键的名字不能重复,应该检查数据库以确保外键名字是唯一的。
  5. 确定Charset和Clooate选项在表级和字段上的一致。
  6. 可能设置了一个默认值

1.3 外键的使用

在设置好外键以后,我们会发现对应的所设置了外键的表即从表,它的此外键字段取值必须满足一张表(主表)的实际值情况,否则无法储存。

主表:在数据库中建立的表格即Table,其中存在主键(primary key) 用于与其他表想关联,并且作为在主表中的唯一性标识。
从表:以主表的主键(primary key)值为外键(Foreign Key)的表,可以通过外键与主表进行关联查奥逊。

2. DML语句操作数据

2.1 插入数据

插入单条数据

插入数据时类型一定要保持一致。另外除了数值型数据类型,其他类型一定要添加单引号,如果不添加字段名列表,那么必须按照创建表时字段顺序依次进行插入。如果只是想插入表中的部分数据,字段名列表一定要加上。

INSERT INTO 表名 (字段名列表)VALUES(值列表);
  • 字段名是可选的,如省略则一次插入所有字段
  • 多个列表和多个值之间使用逗号分隔
  • 值列表和字段名列表一 一对应
  • 如插入的是表中部分数据,字段名列表必填

插入多条数据

INSERT INTO 新表(字段名列表)VALUES (值列表1),(值列表2),(值列表n);

将查询结果插入新表

插入数据只是将数据传递,如果插入到新表,部分约束会传递,但是主键约束和自增不会传递,查询多少字段就在新表中开辟多少字段,如果未*表示全字段。

CREATE TABLE 新表 (SELECT 字段1,字段2...... FROM 原表);

如果不想创建新表,想将数据查询插入到已存在的表,使用第二种方法/

INSERT INTO 目的表(字段列表)查询语句

2.2 修改数据

DDL语句中删除数据库和数据表的关键是DROP。这里DML语句中的删除表中数据是DELETE。还有另一种删除表数据语句未TRUNCATE 语句,它删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE快。但DELETE 不会重置自增序列

UPDATE 表名
SET 字段1 = 值1,字段2 = 值2,....,字段n=值n
WHERE 条件;

2.3 删除数据

DELETE FROM 表名 WHERE 条件;
TRUNCATE TABLE 表名;