MySQL学习第三天—DML、DQL语言,重点SELECT

本人还是看的狂神的视频,附上链接:https://www.bilibili.com/video/BV1NJ411J79W?p=24

一、主键、外键

1. 主键

主键:表中经常有一个列或多列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。

2. 外键

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。外键并不是通过列名实现的,而是通过定义外键约束实现的。

外键的作用:保持数据一致性,完整性。主要目的是控制存储在外键表中的数据。 使两张表形成关联,外键只能引用外表中的列的值或使用空值

创建外键

--定义外键约束
ALTER TABLE student
ADD CONSTRAINT fk_class_id  --外键约束的名称fk_class_id可以任意
FOREIGN KEY (class_id)     --指定了class_id作为外键
REFERENCES class (id);    --指定了这个外键将关联到class表的id列(即class表的主键)

删除外键

ALTER TABLE student
DROP FOREIGN KEY fk_class_id;

删除具有主外键关系的表时 , 要先删子表 , 后删主表

二、DML语言

1. INSERT 添加数据

INSERT命令
INSERT INTO 语句用于向表格中插入新的行。
语法:INSERT INTO 表名称 VALUES (值1, 值2,…)
语法:INSERT INTO 表名称 (列1, 列2,…) VALUES (值1, 值2,…)

  • 增加-插入的值的结构顺序要和原表一样
-- 向表 Persons 插入一条字段 LastName = JSLite 字段 Address = shanghai
INSERT INTO Persons (LastName, Address) VALUES ('JSLite', 'shanghai');
-- 向表 meeting 插入 字段 a=1 和字段 b=2
INSERT INTO meeting SET a=1,b=2;
-- SQL实现将一个表的数据插入到另外一个表的代码
-- 如果只希望导入指定字段,可以用这种方法:
-- INSERT INTO 目标表 (字段1, 字段2, ...) SELECT 字段1, 字段2, ... FROM 来源表;
INSERT INTO orders (user_account_id, title) SELECT m.user_id, m.title FROM meeting m where m.id=1;

-- 向表 charger 插入一条数据,已存在就对表 charger 更新 `type`,`update_at` 字段;
INSERT INTO `charger` (`id`,`type`,`create_at`,`update_at`) VALUES (3,2,'2017-05-18 11:06:17','2017-05-18 11:06:17') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`), `type`=VALUES(`type`), `update_at`=VALUES(`update_at`);
  • 主键列是自动增长,但是在全列插入时需要占位,通常使用0,插入成功以后以实际数据为准

2. UPDATE 更新数据

UPDATE命令
Update 语句用于修改表中的数据。
语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

-- update语句设置字段值为另一个结果取出来的字段
update user set name = (select name from user1 where user1 .id = 1 )
where id = (select id from user2 where user2 .name='小苏');
-- 更新表 orders 中 id=1 的那一行数据更新它的 title 字段
UPDATE `orders` set title='这里是标题' WHERE id=1;

3. DELETE 删除数据

DELETE命令
DELETE 语句用于删除表中的行。
语法:DELETE FROM 表名称 WHERE 列名称 = 值

-- 在不删除table_name表的情况下删除所有的行,清空表。
DELETE FROM table_name
-- 或者
DELETE * FROM table_name
-- 删除 Person表字段 LastName = 'JSLite' 
DELETE FROM Person WHERE LastName = 'JSLite' 
-- 删除 表meeting id 为23的两条数据
DELETE from meeting where id in (2,3);

TRUNCATE命令

TRUNCATE [TABLE] table_name;
 
-- 清空年级表
TRUNCATE grade

两者区别:

  • 相同点:都能删除数据,不删除表结构,但TRUNCATE速度更快
  • 不同点:
    1、使用TRUNCATE TABLE 重新设置AUTO_INCREMENT计数器;
    2、使用TRUNCATE TABLE不会对事务有影响 (事务后面会说)

测试:

-- 删除表数据(不带where条件的delete)
DELETE FROM test;
-- 结论
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值