mysql--15000增删改

来源:互联网 发布:空间绑定域名 编辑:程序博客网 时间:2024/05/15 13:45

插入

insert

INSERT [INTO] tbl_name
[(col_name,…)]
{VALUES|VALUE}
({expr|DEFAULT},…),(…)

省略书写列名的话,表示将输入全部的

对于自动编号的值,可以使用null或者DEFAULT作为值
对于有默认值的值,可以使用DEFAULT作为值

多列输入

insert set

可以使用子查询

INSERT [INTO] tbl_name SET col_name = {DEFAULT|}

insert select

查找插入

插入完整行
INSERT INTO Persons
VALUES (‘Gates’, ‘Bill’, ‘Xuanwumen 10’, ‘Beijing’)
参数的数量和顺序应该和列中的定义一致

插入指定行
INSERT INTO Persons
(LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’)
对于未指定的参数,实际的插入值为默认值或者null或者自增的下一个值

批量插入
INSERT INTO Persons
(LastName, Address) VALUES (‘Wilson’, ‘Champs-Elysees’), (‘Wilson’, ‘Champs-Elysees’)
使用批量插入比多次使用单条会更

查询插入
完整插入
insert into table_name_new select * from table_name_old where 1 =1
选择插入
insert into t_fee_arbitration (name ,website)
select dname,dremark from t_cmmon_dictionaries

CREATE SELECT

update

单表更新
UPDATE
[LOW_PRIORITY][IGNORE] tbl_name
SET col_name = {expr1|DEFAULT},[col_name = {expr1|DEFAULT}]
[WHERE where_define]

返回

连表修改
UPDATE items,month
SET items.price=month.price
WHERE items.id=month.id;

假设有两个表,tab1,tab2,分别有产品名称和产品价格,现在我想用tab2的价格替换tab1的价格
update tab1 set tab1.产品价格 = (select tab2.产品价格 from tab2 where tab2.产品名称 = tab1.产品名称)

SQL语句是不支持多表同时更新的

单表更新

UPDATE Person SET FirstName = ‘Fred’ WHERE LastName = ‘Wilson’

UPDATE Person SET Address = ‘Zhongshan 23’, City = ‘Nanjing’ WHERE LastName = ‘Wilson’

多表更新

UPDATE product p INNER JOIN productPrice pp ON p.productId = pp.productId
SET pp.price = pp.price * 0.8, p.dateUpdate = CURDATE()
WHERE p.dateCreated < ‘2004-01-01’

update table1 set filed1= (select filed from table2 where table2.a)

delete

删除被选中的数据
将SELECT 换成DELETE

单表删除

DELETE FROM tbl_name [WHERE ]
delete from tablename where

truncate tablename
完全删除数据

drop tablename
完全删除数据,表结构

  1. delete 语句是数据库操作语言(dml),
    这个操作会放到 rollback segement 中,事务提交之后才生效;如果有相应的 trigger,执行的时候将被触发。
    truncate、drop 是数据库定义语言(ddl),
    操作立即生效,原数据不放到 rollback segment 中,不能回滚,操作不触发 trigger。

3.delete 语句不影响表所占用的 extent,高水线(high watermark)保持原位置不动
drop 语句将表所占用的空间全部释放。
truncate 语句缺省情况下见空间释放到 minextents个 extent,除非使用reuse storage;truncate 会将高水线复位(回到最开始)。

多表删除

SELECT * 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

将SELECT 换成DELETE

原创粉丝点击