@GivenCui
        
        2017-08-29T03:05:01.000000Z
        字数 14970
        阅读 834
    SQL
**1** 安装了cygwin, 用来强化wind的powershell**2** 在环境变量path中添加%mysql%/bin,命令行就可以使用sql语句**3** bin\my.ini 是mySQL的配置文件**4** 修改编码方式[mysql]default-character-set=utf8[mysqld]character-set-server=utf8**5** 登录:密码为** : mysql -u root -p [option] 回车提示输入***的密码直接输密码: mysql -u root -ppassword [注] -p和password直接没有空格e.g. mysql -uroot -p cc 链接sql并登录到cc库[option]-D,--database = name 打开指定数据库--delimiter = name 指定分隔符-h, --host = name 服务器名-p, --password[=name] 密码-P, --port=3306 端口号,3306为默认端口号--prompt = name 设置提示符 e.g. \u@\h mySQL[\d]>-u, --user=name 用户名-V, --version 输出版本信息**6** 退出数据库 exit; quit; \q; 都可以**7** ";"的作用: 分号是语句的结束, 使mysql可以折行输出**8** 修改提示符进入时参见**5** [option]进入后: prompt 参数\D 完整的日期\d 当前数据库\h 服务器名称\u 当前用户e.g. prompt \u@\h mySQL [\d]> // 句子后面不能有";",应为这不是SQL语句, 知识命令行语句**9** mySQL语句规范- 关键字与函数名称全部大写- 数据库名称、表名称、字段名称全部小写- SQL语句必须以 ; 号结尾**10** 创建数据库CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] 数据库名 [DEFAULT] CHARACTER SET [=] 字符编码e.g.CREATE DATABASE IF NOT EXISTS cc; // 默认设置utf8CREATE DATABASE IF NOT EXISTS cc CHARACTER SET gbk; // 设置字符集为gbk**11** 查看所有数据库SHOW DATABASES; // 展示所有数据库SHOW CREATE DATABASE 数据库名; // 查看具体数据库**12** 查看警告 SHOW WARNINGS**13** 修改数据库ALTER {DATABASE | SCHEMA} 数据库名 [DEFAULT] CHARACTER SET [=] 字符编码**14** 删除数据库DROP {DATABASE | SCHEMA} {IF EXISTS} 数据库名 // 如果数据库下有其它文件删除报错**15** 使用数据库USE 数据库名 // 切换到已经创建的数据库status // 各种信息SELECT DATABASE() // 当前数据库SELECT VERSION() // 数据版本SELECT NOW() // 当前时间**16** 创建表格1. SHOW TABLES // 查看已创建的表格2. CREATE TABLE 表名称 (列声明); // 列声明 = col_name + datatype + 其他参数其他参数:NOT NULL // 字段不能为空AUTO-INCREMENT // 必须和key一起使用e.g. [参考手册] 以创建 pet 表为例, 表中将存放 宠物名字(name)、主人(owner)、宠物种类(species)、性别(sex)、出生日期(birth)、死亡日期(death) :CREATE TABLE pet (name VARCHAR(20),owner VARCHAR(20),species VARCHAR(20),sex CHAR(1),birth DATE,death DATE);e.g. [21分钟入门] 以创建 students 表为例, 表中将存放 学号(id)、姓名(name)、性别(sex)、年龄(age)、联系电话(tel) :CREATE TABLE students (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name CHAR(8) NOT NULL,sex CHAR(4) NOT NULL,age TINYINT UNSIGNED NOT NULL,tel CHAR(13) NULL default "-");3. DESCRIBE 表名 // 查看表列信息4. LOAD DATA INFILE '路径.文件' INTO TABLE 表名-> LINES TERMINATED BY '\r\n'; // unix可以略, win '\r\n', OS '\r'// 用于把.txt的数据导入数据库, 默认是制表符和换行符, 也可以自己指定分隔符和行尾标记// file.txt中不要写表头, 表头已经在数据库中定义了!!!5. mysql -D 数据库名 -u root -p < createtable.sql // 导入sql----------------------------------------CRUD : Create, Retrieve, Update, Delete----------------------------------------**17** 向表中插数据 (Create 增)INSERT [INTO] 表名 [(col1,col2,col3...)] VALUES (val1,val2,val3...);e.g.INSERT [INTO] students VALUES(NULL,"王刚","男",20,"13811371377");INSERT students (name,sex,age) VALUES("孙丽华","女",21);**18** 查询表中的数据 (Retrieve 查)SELECT [关键字] 列名 FROM 表名 [查询条件];e.g.SELECT * FROM students;SELECT name,age FROM students;SELECT DISTINCT owner FROM pet; // DISTINCT去重[查询条件]1. WHERE 列名 =[>,<,>=,<=,!=]"值";2. WHERE 列名 IS [NOT] NULL | IN | LIKE | NOT LIKE "值";3. WHERE 查询条件1 AND|OR 查询条件24. 条件查询 略e.g.SELECT * FROM students WHERE age > 21;SELECT * FROM stuendts WHERE name like "%王%";SELECT * FROM students WHERE id<5 and age>20;SELECT name,birth FROM pet ORDER BY birth; // 按升序排列(大小写顺序相同)SELECT name,birth FROM pet ORDER BY BINARY birth; // 按字母顺序 (A < a)SELECT name,birth FROM pet ORDER BY birth DESC; // 按降序,DESC只对其前面的列起作用5. 匹配模式a. 标准SQL匹配模式 LIKE和NOT LIKE“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零字符)b. 正则表达式 REGEXP和NOT REGEXP (RLIKE和NOT RLIKE)e.g.// 标准SELECT * FROM pet WHERE name LIKE '%fy'; // 匹配以fy结尾的名字SELECT * FROM pet WHERE name LIKE '%w%'; // 匹配含有w的名字// 正则表达式SELECT * FROM pet WHERE name REGEXP 'fy$';SELECT * FROM pet WHERE name REGEXP 'w'; // 没用^和$**19** 更新表中的数据 (Update 改)UPDATE 表名 SET 列名 = 值 WHERE 更新条件;e.g.UPDATE students SET age = age+1;UPDATE students SET name="张伟鹏",age=19 WHERE tel="13288097888";**20** 删除表中的数据 (Delete 删)DELETE FROM 表名 WHERE 删除条件;e.g.DELETE FROM students WHERE id=2;DELETE FROM students WHERE age < 20; // 删除年龄小于21岁的;DELETE FROM students; // 删除所有数据**21** 创建后表的修改 ALTER1. 添加列ALTER TABLE 表名 ADD 列名 列数据类型 [AFTER 插入位置];e.g.ALTER TABLE students ADD address CHAR(60) // 在表最后新增一列ALTER TABLE students ADD birthday DATA AFTER age; // 在名为 age 的列后插入列 birthday2. 修改列ALTER TABLE 表名 CHANGE 列名 列新名称 新数据类型;e.g.ALTER TABLE students CHANGE tel telphone CHAR(13) DEFAULT "-"; // 列改名ALTER TABLE students CHANGE name name CHAR(16) NOT NULL; // 改数据类型3. 删除列ALTER TABLE 表名 DROP 列名;e.g.ALTER TABLE students DROP birthday;4. 重命名表ALTER TABLE 表名 RENAME 新表名;e.g.ALTER TABLE students RENAME workmates;**22** 删除 DROP1. 删除整个表DROP TABLE 表名;e.g.DROP TABLE workmates;2. 删除整个数据库DROP DATABASE 数据库名;e.g.DROP DATABASE samp_db;**23** 修改root用户密码 p.s. root 用户默认是没有密码的,需要重设密码mysqladmin -u root -p password 新密码 // 回车提示输入旧密码,空则再回车
表1: 三种系统换行符对比
补充: 换行符, 也就是CR回车符 (Carriage Return) 和 LF换行符 (Line Feed)的问题,各个系统方案不同,在NotePad++中可以设置;在不同平台间使用FTP软件传送文件时,在ASCII文本模式传输模式下,一些FTP客户端程序会自动对换行格式进行转换。经过这种传输的文件字节数可能会发生变化。如果你不想FTP修改原文件,可以使用bin模式(二进制模式)传输文本。
历史由来:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的TTY概念也来自于此)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做"回车"Carriage Return,告诉打字机把打印头定位在左边界;另一个叫做“换行” Line Feed,告诉打字机把纸向下移一行。这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
| 系统 | 换行符 | 换行符的组成 | 
|---|---|---|
| DOS/window系统 | \r\n | CR+LF | 
| MAC系统 | \r | CR | 
| UNIX/Linux系统 | \n | LF | 
| 换行符 | 全称 | ASCII 十进制 | ASCII 十六进制 | 
|---|---|---|---|
| CR | Carriage Return | 13 | 0x0D | 
| LF | Line Feed | 10 | 0x0A | 
/* js进制转换 *///十进制转其他var x=110;alert(x);alert(x.toString(8));alert(x.toString(32));alert(x.toString(16));//其他转十进制var x='110';alert(parseInt(x,2));alert(parseInt(x,8));alert(parseInt(x,16));//其他转其他//先用parseInt转成十进制再用toString转到目标进制alert(String.fromCharCode(parseInt(141,8)))alert(parseInt('ff',16).toString(2));
| 数据类型 | 存储范围(sign) | 存储范围(unsign) | 字节 | 
|---|---|---|---|
| TINYINT | ~ | (255) | 1 | 
| SMALLINT | ~ | (65535) | 2 | 
| MEDIUMINT | ~ | 3 | |
| INT | ~ | -1 | 4 | 
| BIGINT | ~ | -1 | 8 | 
| 列类型 | 存储需求 | 
|---|---|
| CHAR(M) | |
| VARCHAR(M) | |
| TINYTEXT | |
| TEXT | |
| MEDIUMTEXT | |
| LONGTEXT | |
| ENUM('val1','val2',...) | |
| SET('val1','val2',...) | |
导入数据库的txt源
[注]: 推荐用NodePad++ 所有空为制表符, 不是空格, 注意用unix模式, \N 表示 NULL 空
Fluffy Harold cat f 1993-02-04 \NClaws Gwen cat m 1994-03-17 \NBuffy Harold dog f 1989-05-13 \NFang Benny dog m 1990-08-27 \NBowser Diane dog m 1979-08-31 1995-07-29Chirpy Gwen bird f 1998-09-11 \NWhistler Gwen bird f 1997-12-09 \NSlim Benny snake m 1996-04-29 \NPuffball Diane hamster f 1999-03-30 \Nmimi GivenCui cat f 2015-12-25 \N
1.子查询是指在另一个查询语句中的SELECT子句。例句:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement),SELECT column1 FROM t2 称为Sub Query[子查询]。所以,我们说子查询是嵌套在外查询内部。而事实上它有可能在子查询内部再嵌套子查询。子查询必须出现在圆括号之间。行级子查询SELECT * FROM t1 WHERE (col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);SELECT * FROM t1 WHERE ROW(col1,col2) = (SELECT col3, col4 FROM t2 WHERE id = 10);行级子查询的返回结果最多为一行。优化子查询-- 创建数据表CREATE TABLE IF NOT EXISTS tdb_goods(goods_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,goods_name VARCHAR(150) NOT NULL,goods_cate VARCHAR(40) NOT NULL,brand_name VARCHAR(40) NOT NULL,goods_price DECIMAL(15,3) UNSIGNED NOT NULL DEFAULT 0,is_show BOOLEAN NOT NULL DEFAULT 1,is_saleoff BOOLEAN NOT NULL DEFAULT 0);-- 写入记录INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('R510VC 15.6英寸笔记本','笔记本','华硕','3399',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Y400N 14.0英寸笔记本电脑','笔记本','联想','4899',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('G150TH 15.6英寸游戏本','游戏本','雷神','8499',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('X550CC 15.6英寸笔记本','笔记本','华硕','2799',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('X240(20ALA0EYCD) 12.5英寸超极本','超级本','联想','4999',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('U330P 13.3英寸超极本','超级本','联想','4299',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('SVP13226SCB 13.3英寸触控超极本','超级本','索尼','7999',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('iPad mini MD531CH/A 7.9英寸平板电脑','平板电脑','苹果','1998',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('iPad Air MD788CH/A 9.7英寸平板电脑 (16G WiFi版)','平板电脑','苹果','3388',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES(' iPad mini ME279CH/A 配备 Retina 显示屏 7.9英寸平板电脑 (16G WiFi版)','平板电脑','苹果','2788',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('IdeaCentre C340 20英寸一体电脑 ','台式机','联想','3499',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Vostro 3800-R1206 台式电脑','台式机','戴尔','2899',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('iMac ME086CH/A 21.5英寸一体电脑','台式机','苹果','9188',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('AT7-7414LP 台式电脑 (i5-3450四核 4G 500G 2G独显 DVD 键鼠 Linux )','台式机','宏碁','3699',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Z220SFF F4F06PA工作站','服务器/工作站','惠普','4288',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('PowerEdge T110 II服务器','服务器/工作站','戴尔','5388',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('Mac Pro MD878CH/A 专业级台式电脑','服务器/工作站','苹果','28888',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES(' HMZ-T3W 头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('X3250 M4机架式服务器 2583i14','服务器/工作站','IBM','6888',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('玄龙精英版 笔记本散热器','笔记本配件','九州风神','',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES(' HMZ-T3W 头戴显示设备','笔记本配件','索尼','6999',DEFAULT,DEFAULT);INSERT tdb_goods (goods_name,goods_cate,brand_name,goods_price,is_show,is_saleoff) VALUES('商务双肩背包','笔记本配件','索尼','99',DEFAULT,DEFAULT);-- 求所有电脑产品的平均价格,并且保留两位小数,AVG,MAX,MIN、COUNT、SUM为聚合函数SELECT ROUND(AVG(goods_price),2) AS avg_price FROM tdb_goods;-- 查询所有价格大于平均价格的商品,并且按价格降序排序SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5845.10 ORDER BY goods_price DESC;-- 使用子查询来实现SELECT goods_id,goods_name,goods_price FROM tdb_goodsWHERE goods_price > (SELECT ROUND(AVG(goods_price),2) AS avg_price FROM tdb_goods)ORDER BY goods_price DESC;-- 查询类型为“超记本”的商品价格SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本';-- 查询价格大于或等于"超级本"价格的商品,并且按价格降序排列SELECT goods_id,goods_name,goods_price FROM tdb_goodsWHERE goods_price >= ANY(SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本')ORDER BY goods_price DESC;-- = ANY 或 = SOME 等价于 INSELECT goods_id,goods_name,goods_price FROM tdb_goodsWHERE goods_price IN (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本')ORDER BY goods_price DESC;-- 创建“商品分类”表CREATE TABLE IF NOT EXISTS tdb_goods_cates(cate_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,cate_name VARCHAR(40));-- 查询tdb_goods表的所有记录,并且按"类别"分组SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;-- 将分组结果写入到tdb_goods_cates数据表INSERT tdb_goods_cates (cate_name) SELECT goods_cate FROM tdb_goods GROUP BY goods_cate;-- 通过tdb_goods_cates数据表来更新tdb_goods表UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_nameSET goods_cate = cate_id ;-- 通过CREATE...SELECT来创建数据表并且同时写入记录-- SELECT brand_name FROM tdb_goods GROUP BY brand_name;CREATE TABLE tdb_goods_brands (brand_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,brand_name VARCHAR(40) NOT NULL) SELECT brand_name FROM tdb_goods GROUP BY brand_name;-- 通过tdb_goods_brands数据表来更新tdb_goods数据表(错误)UPDATE tdb_goods INNER JOIN tdb_goods_brands ON brand_name = brand_nameSET brand_name = brand_id;-- Column 'brand_name' in field list is ambigous-- 正确UPDATE tdb_goods AS g INNER JOIN tdb_goods_brands AS b ON g.brand_name = b.brand_nameSET g.brand_name = b.brand_id;-- 查看tdb_goods的数据表结构DESC tdb_goods;-- 通过ALTER TABLE语句修改数据表结构ALTER TABLE tdb_goodsCHANGE goods_cate cate_id SMALLINT UNSIGNED NOT NULL,CHANGE brand_name brand_id SMALLINT UNSIGNED NOT NULL;-- 分别在tdb_goods_cates和tdb_goods_brands表插入记录INSERT tdb_goods_cates(cate_name) VALUES('路由器'),('交换机'),('网卡');INSERT tdb_goods_brands(brand_name) VALUES('海尔'),('清华同方'),('神舟');-- 在tdb_goods数据表写入任意记录INSERT tdb_goods(goods_name,cate_id,brand_id,goods_price) VALUES(' LaserJet Pro P1606dn 黑白激光打印机','12','4','1849');-- 查询所有商品的详细信息(通过内连接实现)SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS gINNER JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_idINNER JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;-- 查询所有商品的详细信息(通过左外连接实现)SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS gLEFT JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_idLEFT JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;-- 查询所有商品的详细信息(通过右外连接实现)SELECT goods_id,goods_name,cate_name,brand_name,goods_price FROM tdb_goods AS gRIGHT JOIN tdb_goods_cates AS c ON g.cate_id = c.cate_idRIGHT JOIN tdb_goods_brands AS b ON g.brand_id = b.brand_id\G;-- 无限分类的数据表设计CREATE TABLE tdb_goods_types(type_id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,type_name VARCHAR(20) NOT NULL,parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0);INSERT tdb_goods_types(type_name,parent_id) VALUES('家用电器',DEFAULT);INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑、办公',DEFAULT);INSERT tdb_goods_types(type_name,parent_id) VALUES('大家电',1);INSERT tdb_goods_types(type_name,parent_id) VALUES('生活电器',1);INSERT tdb_goods_types(type_name,parent_id) VALUES('平板电视',3);INSERT tdb_goods_types(type_name,parent_id) VALUES('空调',3);INSERT tdb_goods_types(type_name,parent_id) VALUES('电风扇',4);INSERT tdb_goods_types(type_name,parent_id) VALUES('饮水机',4);INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑整机',2);INSERT tdb_goods_types(type_name,parent_id) VALUES('电脑配件',2);INSERT tdb_goods_types(type_name,parent_id) VALUES('笔记本',9);INSERT tdb_goods_types(type_name,parent_id) VALUES('超级本',9);INSERT tdb_goods_types(type_name,parent_id) VALUES('游戏本',9);INSERT tdb_goods_types(type_name,parent_id) VALUES('CPU',10);INSERT tdb_goods_types(type_name,parent_id) VALUES('主机',10);-- 查找所有分类及其父类SELECT s.type_id,s.type_name,p.type_name FROM tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id = p.type_id;-- 查找所有分类及其子类SELECT p.type_id,p.type_name,s.type_name FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id;-- 查找所有分类及其子类的数目SELECT p.type_id,p.type_name,count(s.type_name) AS children_count FROM tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_id GROUP BY p.type_name ORDER BY p.type_id;-- 为tdb_goods_types添加child_count字段ALTER TABLE tdb_goods_types ADD child_count MEDIUMINT UNSIGNED NOT NULL DEFAULT 0;-- 将刚才查询到的子类数量更新到tdb_goods_types数据表UPDATE tdb_goods_types AS t1 INNER JOIN ( SELECT p.type_id,p.type_name,count(s.type_name) AS child_count FROM tdb_goods_types AS pLEFT JOIN tdb_goods_types AS s ON s.parent_id = p.type_idGROUP BY p.type_nameORDER BY p.type_id ) AS t2ON t1.type_id = t2.type_idSET t1.child_count = t2.child_count;-- 复制编号为12,20的两条记录SELECT * FROM tdb_goods WHERE goods_id IN (18,19);-- INSERT ... SELECT实现复制INSERT tdb_goods(goods_name,cate_id,brand_id) SELECT goods_name,cate_id,brand_id FROM tdb_goods WHERE goods_id IN (19,20);-- 查找重复记录SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2;-- 删除重复记录DELETE t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name) >= 2 ) AS t2 ON t1.goods_name = t2.goods_name WHERE t1.goods_id > t2.goods_id;