MySQL命令2
索引与外键
// 添加索引
ALTER TABLE orders ADD KEY order_ix_custid(cust_id);
// 删除索引
ALTER TABLE orders DROP KEY order_ix_custid;
// 添加外键
ALTER TABLE orderitem ADD CONSTRAINT fk_orderitem_orders FOREIGN KEY (order_id) REFERENCES orders (id);
// 添加外键,支持级联删除
ALTER TABLE orderitem ADD CONSTRAINT fk_orderitem_orders FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE;
// 删除外键
ALTER TABLE orderitem DROP FOREIGN KEY fk_orderitem_orders;
// 添加唯一索引
ALTER TABLE orderitem ADD UNIQUE KEY uc_orderitem(order_id, product_id);
order是MySQL的一个关键字,不要用来做表名,否则有坑。
触发器
// 创建AFTER INSERT触发器
DELIMITER #
CREATE TRIGGER trigger_new_product AFTER INSERT ON wishitem FOR EACH ROW
BEGIN
DECLARE new_url VARCHAR(128);
SELECT thumbnail_url FROM product WHERE id = NEW.product_id INTO new_url;
UPDATE wish SET thumbnail_url = new_url WHERE id = NEW.wish_id;
END #
DELIMITER ; // 创建AFTER DELETE触发器
DELIMITER #
CREATE TRIGGER trigger_del_product AFTER DELETE ON wishitem FOR EACH ROW
BEGIN
DECLARE prod_url VARCHAR(128);
DECLARE prod_time DATETIME;
SELECT cp.thumbnail_url, wi.add_time FROM wishitem AS wi INNER JOIN product AS cp on wi.product_id =
cp.id WHERE wi.wish_id = OLD.wish_id ORDER BY wi.add_time LIMIT 1 INTO prod_url, prod_time;
IF prod_url IS NULL THEN
SET prod_url = '';
END IF;
UPDATE wish SET thumbnail_url = prod_url WHERE id = OLD.wish_id;
END #
DELIMITER ; // 显示触发器
SHOW TRIGGERS; // 删除触发器
DROP TRIGGER trigger_new_product;
replace into
REPLACE
works exactly like INSERT
, except that if an old row in the table has the same value as a new row for a PRIMARY KEY
or a UNIQUE
index, the old row is deleted before the new row is inserted.
INSERT ... ON DUPLICATE KEY UPDATE
If you specify an ON DUPLICATE KEY UPDATE
clause and a row to be inserted would cause a duplicate value in a UNIQUE
index or PRIMARY KEY
, an UPDATE
of the old row occurs.
REPLACE INTO是先删除再插入,如果主键是AUTO_INCREMENT,会导致主键自增。
现有一个表wishitems
可以使用 SHOW CREATE TABLE wishitem 查看表的AUTO_INCREMENT值
CREATE TABLE wishitem (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
wish_id bigint(20) unsigned NOT NULL DEFAULT '',
product_id bigint(20) unsigned NOT NULL DEFAULT '',
add_time datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY uc_wishitem (wish_id, product_id),
CONSTRAINT fk_wishitem_wish FOREIGN KEY (wish_id) REFERENCES wish (id) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=15000000000000000038 DEFAULT CHARSET=utf8
现在执行
REPLACE INTO wishitem(wish_id, product_id) VALUES(14000000000000000009,99999100000000037)
再次查看表中数据
再次使用 SHOW CREATE TABLE wishitem 查看表的AUTO_INCREMENT值
CREATE TABLE wishitem (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
wish_id bigint(20) unsigned NOT NULL DEFAULT '',
product_id bigint(20) unsigned NOT NULL DEFAULT '',
add_time datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
PRIMARY KEY (id),
UNIQUE KEY uc_wishitem (wish_id, product_id),
CONSTRAINT fk_wishitem_wish FOREIGN KEY (wish_id) REFERENCES wish (id) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=15000000000000000039 DEFAULT CHARSET=utf8
果然,主键ID自增了。
INSERT ... ON DUPLICATE KEY UPDATE不会出现这个问题。
AUTO_INCREMENT
对应表下一个要插入的id
You can retrieve the most recent automatically generated
AUTO_INCREMENT
value with the LAST_INSERT_ID()
SQL function
# 重新设置AUTO_INCREMENT
ALTER TABLE tablename AUTO_INCREMENT = 1
参考资料:
Insert into a MySQL table or update if exists
truncate foreign key constrained table
How to reset AUTO_INCREMENT in MySQL?
MySQL命令2的更多相关文章
- Mysql命令大全
格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root -p,回车后提示你输 ...
- ****Linux MySQL命令运用个人总结
1.xampp在linux下如何使用mysql命令 A: 解决方法(推荐第二个方法): 1.xampp中的命令工具在/opt/lampp/bin/目录中,所以可以这样运行mysql命令 /opt/la ...
- MySQL命令行登录的例子
环境:MySQL Sever 5.1 + MySQL命令行工具 问题:MySQL命令行登录 解决: 命令 行登录语法: mysql –u用户名 [–h主机名或者IP地址] –p密码 说明:用户名是你登 ...
- MySQL命令行下执行.sql脚本详解
本文主要介绍一个在MySQL命令行下执行脚本文件的例子,通过这个例子让我们来了解一下在命令行下MySQL是怎样执行脚本的吧.现在我们开始介绍这一过程. 1.首先编写sql脚本,保存为的:book.sq ...
- Mysql 命令大全
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root - ...
- mysql 在windows下,使用 net start mysql 命令发生错误 服务名无效 或 1067
mysql 在windows下,使用 net start mysql 命令发生错误 :服务名无效 或 1067 先使用mysqld -install安装一下 删除data目录下的日志等文件(因为之前 ...
- MySQL命令大全:MySQL常用命令手册、MySQL命令行大全、查询工具
1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...
- MYSQL命令行使用指南
一.连接MYSQL. 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -u ...
- mysql命令行以及mysql workbence查询结果中文乱码的解决方法
最近正在学习mysql,安装环境是windows server 2003 32位操作系统+mysql 5.1.47同时也安装了mysql命令行以及mysql workbench这里是test数据库cr ...
- MySQL命令行导出数据库
MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server ...
随机推荐
- shell-function 删除目录和文件
function sDelDirFile() { if [ "$#" -eq 1 ];then if [ -e "$1" ];then rm "$1& ...
- classpath和环境变量设置(转)
classpath和环境变量设置(转) 在没有设置环境变量之前,我们可以通过直接在应用程序中加带相关信息来运行我们 的程序.比如,我们可以这样开始运行一个java程序: C:\jdk1.3.1\bin ...
- 微服务框架-Spring Cloud
Spring Cloud入门 微服务与微服务架构 微服务架构是一种新型的系统架构.其设计思路是,将单体架构系统拆分为多个可以相互调用.配合的独立运行的小程序.这每个小程序对整体系统所提供的功能就称为微 ...
- windows/linux下如何更换Python的pip源
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:xlixiaohui PS:如有需要Python学习资料的小伙伴可以 ...
- 杭电1080 J - Human Gene Functions
题目大意: 两个字符串,可以再中间任何插入空格,然后让这两个串匹配,字符与字符之间的匹配有各自的分数,求最大分数 最长公共子序列模型. dp[i][j]表示当考虑吧串1的第i个字符和串2的第j个字符时 ...
- Windows安装Tesseract-OCR 4.00并配置环境变量
一.前言 Tesseract-OCR 是一款由HP实验室开发由Google维护的开源OCR(Optical Character Recognition , 光学字符识别)引擎.与Microsoft O ...
- Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践
Spring Boot 自定义kafka 消费者配置 ContainerFactory最佳实践 本篇博文主要提供一个在 SpringBoot 中自定义 kafka配置的实践,想象这样一个场景:你的系统 ...
- JDBC处理CLOB 和 BLOB大对象
在数据库中: clob用于存储大量的文本数据 可以使用字符流操作 clob用于存储大量的二进制数据 可以使用字节流操作 以mysql为例 先准备一张表: CREATE TABLE `t_user2` ...
- ambarella H2平台fpga捕捉卡驱动案例
公司最近开发的一款产品用到了ambarella H2平台的一款Soc,众所周知ambarella的H2系列的Soc编码能力很强,最高可达4kp60,捕捉上没有用ambarella开发板推荐的几个捕捉卡 ...
- Spring Boot中只能有一个WebMvcConfigurationSupport配置类
首先将结论写文章的最前面,一个项目中只能有一个继承WebMvcConfigurationSupport的@Configuration类(使用@EnableMvc效果相同),如果存在多个这样的类,只有一 ...