-
多表更新一步到位
通过tdb_goods_brands数据表来更新tdb_goods数据表(注意给表起别名)
通过ALTER TABLE语句修改数据表结构
查看全部 -
2019-06-18
多表更新(参照另外一张表更新本表的记录)
语法:UPDATE table_references SET col_name1={expr1 | DEFAULT}
[,col_name2={expr2 | DEFAULT}] ... [WHERE where_condition],需要表的参照关系,这就是将要讲的连接。
表的参照关系:一张表通过INNER JOIN或者LEFT OUTER JOIN去连接另外的一张表并通过ON指定连接条件,在写表的参照时,也可以给表起别名。
连接表的语法:table_reference {[INNER | CROSS] JOIN | {LEFT | RIGHT} [OUTER] JOIN} table_reference ON conditional_expr。
连接表除了使用表的名称以外,还需要使用连接类型。
连接类型一共分为3中:在MySQL中,JOIN,CROSS JOIN和INNER JOIN是等价的。
【1】INNER JOIN:内连接.
【2】LEFT [OUTER] JOIN:左外连接。
【3】RIGHT [OUTER] JOIN:右外连接。
案例:使用INNER JOIN连接两张表,并作为表的参照关系进行多表更新,更新商品表id=22的商品分类属性,修改为6,因为商品分类的名称在商品分类表中对应的id为6
结果:数据信息被更新了
多表更新
UPDATE table_references
SET col_name1 = {expr1|DEFAULT}
[, col_name2 ={expr2|DEFAULT}]...
[WHERE where_condition]
语法结构
{[INNER|CROSS] JOIN | {LEFT|RIGHT} [OUTER]JOIN}
table_reference
ON conditional_expr
UPDATE tdb_goods INNER JOIN tdb_goods_cates ON goods_cate = cate_name;
SET goods_cate = cate_id;
SELECT * FROM tdb_goods\G;
查看全部 -
限制查询结果返回的数量
[ LIMIT { [ offset, ] row_count OFFSET offset } ]
SELECT * FROM users LIMIT 2;返回前两条数据
SELECT * FROM users LIMIT 2,2;是指从下标2(下标从0开始算)(即是第三条记录开始)开始,返回两条记录
insert [into] 表名 set 字段={...},...
INSERT test (username) SELECT username FROM users WHERE age>=30;
将users表中年龄大于等于30的结果插入test表中
insert 目的表(字段名) select 字段名 from 原表名 where 另一字段 >=30; 把select后查出表中满足条件的字段数据插入到目的表中
limit 0,2 ---0代表第一行,2代表显示几行
查看全部 -
关于本小节中,count(id) >= 2;的测试!!!
以下面的数据表为例:
注意表中sex列, 其中值为NULL的有2个,值为0的有3个,值为2的有1个,值为3的有1个。
上面这步很重要!!接着我们来测试一下:
当 count(id) >= 1 时:
当 count(id) >= 2 时:
当 count(id) >= 3 时:
当 count(id) >= 4 时:
由此可见, count(id) >= 2 输出的结果跟id毫无关系! 它只跟set列中具有相同值的个数有关,
值为NULL的有2个,值为0的有3个,值为2的有1个,值为3的有1个
当 count(id) >= 1 时, 输出的是NULL,0,2,3。因为他们的数目都满足>=1
当 count(id) >= 2 时, 输出的是NULL,0。因为他们对应的数目分别为2和3,都满足>=2
当 count(id) >= 3 时, 输出的是0, 因为值为0的个数为3,满足>=3
当 count(id) >= 4 时, 没有输出。因为没有满足条件的元素。
这问题让我纠结的半个小时,看了一些慕友的问答后,更是把我搞糊涂了,说什么输出的是非NULL值,还有说什么跟id有什么什么关系。经过测试,输出的结果只跟set列具有相同的值的个数有关系,跟是不是NULL没关系,跟id也没关系。
你可以把count(id) >= 2 改成count(username) >= 2或者改成count(age) >= 2或者改成count(password) >= 2,输出的结果都是一样的,老师的一个无意之举,本没有什么特别的含义,结果却引得众慕友们胡乱猜测。为了让还没有搞明白的慕友们,在这个问题上少绕些弯子,就写了这么一些东西,如果有什么不对的地方,欢迎各慕友指点。。
查看全部 -
约束:
NOT NULL(非空约束)
PRIMARY KEY (主键约束)
UNIQUE KEY(唯一约束)
DEFAULT(默认约束)
FOREIGN KEY(外键约束)
查看全部 -
MySQL修改数据表——修改列定义和更名数据表
一、修改列定义(针对数据类型和位置)
ALTER TABLE 表名 MODIFY [COLUMN] 列名 column_definition [FIRST | AFTER 列名]
注意:由大类型——>小类型可能会造成数据的丢失(比如:SMALLINT(无符号为0-65535)——>TINYINT(0-255))。
二、修改列名称(既可以修改列定义,又可以修改列名称)
ALTER TABLE 表名 CHANGE [COLUMN] 老名称 新名称 列定义 [FIRST | AFTER 表名]
三、数据表更名
方法1:
ALTER TABLE 旧表名 RENAME [TO | AS] 新表名
方法2:
RENAME TABLE 旧表名 TO 新表名 [,旧表名 TO 新表名]...
(方法2可以为多张数据表进行更名,尽量少使用数据列的更名以及数据表的更名,原因当我们原来创建过索引,或者使用过视图,或存储过程的话,表名或者列名曾经被引用情况下,如果修改了,可能会导致某个视图或者某个存储过程无法正常进行工作)
查看全部 -
删除主键约束:ALTER TABLE 列名 DROP PRIMARY KEY(不需要加主键名,因为主键是唯一的)
SHOW INDEXES FROM 列名;KEY .... 指的是索引
删除唯一约束:ALTER TABLE 表名 DROP 约束名;
删除索引;ALTER TABLE 表名 DROP 索引;
删除外键约束ALTER TABLE 表名 DROP FOREIGN KEY 外键名
查看全部 -
删除主键约束:ALTER TABLE 列名 DROP PRIMARY KEY(不需要加主键名,因为主键是唯一的)
SHOW INDEXES FROM 列名;KEY .... 指的是索引
删除唯一约束:ALTER TABLE 表名 DROP 约束名;
删除索引;ALTER TABLE 表名 DROP 索引;
删除外键约束ALTER TABLE 表名 DROP FOREIGN KEY 外键名
查看全部 -
MySQL修改数据表(添加和删除列)
添加单列:ALTER TABLE 表名 ADD [COLUMN] 列名 列定义 [FIRST(添加这一列放在指定列前方)|AFTER 列名(添加这一列放在指定列的后面)]。(如果省略FIRST或者AFTER则插入表最后面)
添加多列:ALTER TABLE 表名 ADD [COLUMN] (列名,列定义,...)
1、添加的列需要放置在();
查看全部 -
1、对一个数据列建立的约束,称为列级约束;
2、对多个数据列建立的约束,称为表级约束;
3、列级约束既可以在列定义时声明,也可以在列定义后声明;
4、表级约束只能在列定义后声明
5、并不是所有约束都存在表级约束。如NOT NULL 和DEFAULT约束是不存在表级约束的。
查看全部 -
参照操作的含义是;在创建了外键约束后,继续添加的一些操作。
创建了外键约束后,必须先在主表中插入记录
若有一条记录没有写入成功,若存在自动编号的话,编号会往后调跳移位eg。1,3,4
删除命令DELETE FROM 表名 WHERE 序号名 =几;
在实际开发中很少使用物理的外键约束(只有innDB引擎支持),一般使用逻辑的外键约束(MyISAM)
查看全部 -
AUTO_INCREMENT 自动编号 自动编号,必须与主键组合使用 默认情况下,起始值为1,每次增量为1
查看全部 -
MySQL数据类型之日期时间型
DATE:支持1000年1月1号——9999年12月31号。
DATETIME:支持1000年1月1号0点——9999年12月31号23点59分59秒。
TIMESTAMP:1970年1月1号0点——2037年。
查看全部 -
MySQL默认端口号是多少 3306
MySQL中的超级用户叫 root
创建数据库 CREATE DATABASE
修改数据库 ALTER DATABASE
删除数据库 DROP DATABASE
查看全部 -
修改MySQL提示符(默认提示符MySQL>)
方式一:登录客户端时通过参数指定。
mysql -uroot -p123456 --prompt 提示符
方式二:登录客户端后,通过prompt命令修改。
mysql>prompt 提示符
查看全部
举报