加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql学习与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除

发布时间:2020-12-12 01:10:12 所属栏目:MySql教程 来源:网络整理
导读:《Mysql学习与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除》要点: 本文介绍了Mysql学习与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除,希望对您有用。如果有疑问,可以联系我们。 同样的,只会讲解跟SQLSERVER不同的地方 MYSQL数据库 插入 MYSQL数

《Mysql学习与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除》要点:
本文介绍了Mysql学习与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除,希望对您有用。如果有疑问,可以联系我们。

同样的,只会讲解跟SQLSERVER不同的地方MYSQL数据库

插入MYSQL数据库

将多行查询结果插入到表中MYSQL数据库

语法MYSQL数据库

INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition)

INSERT INTO SELECT 在SQLSERVER里也是支持的MYSQL数据库

table_name1指定待插入数据的表;column_list1指定待插入表中要插入数据的哪些列;table_name2指定插入数据是从MYSQL数据库

哪个表中查询出来的;column_list2指定数据来源表的查询列,该列表必须和column_list1列表中的字段个数相同,数据类型相同;MYSQL数据库

condition指定SELECT语句的查询条件MYSQL数据库

从person_old表中查询所有的记录,并将其插入到person表MYSQL数据库

CREATE TABLE person (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT,NAME CHAR(40) NOT NULL DEFAULT '',age INT NOT NULL DEFAULT 0,info CHAR(50) NULL,PRIMARY KEY (id)
)
CREATE TABLE person_old (
 id INT UNSIGNED NOT NULL AUTO_INCREMENT,PRIMARY KEY (id)
)
INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')
SELECT * FROM person_old

MYSQL数据库

?可以看到,插入记录成功,person_old表现在有两条记录.接下来将person_oldperson_old表中的所有记录插入到person表MYSQL数据库

INSERT INTO person(id,NAME,age,info)
SELECT id,info FROM person_old;
SELECT * FROM person 

MYSQL数据库

可以看到数据转移成功,这里的id字段为自增的主键,在插入时要保证该字段值的唯一性,如果不能确定,可以插入的时候忽略该字段,MYSQL数据库

只插入其他字段的值MYSQL数据库

如果再执行一次就会出错MYSQL数据库

MYSQL数据库

MYSQL和SQLSERVER的区别:MYSQL数据库

区别一MYSQL数据库

当要导入的数据中有重复值的时候,MYSQL会有三种方案MYSQL数据库

方案一:使用 ignore 关键字
方案二:使用 replace into
方案三:ON DUPLICATE KEY UPDATEMYSQL数据库

第二和第三种方案这里不作介绍,因为比较复杂,而且不符合要求,这里只讲第一种方案MYSQL数据库

TRUNCATE TABLE person
TRUNCATE TABLE persona_old 
INSERT INTO person_old
VALUES (11,'police')
##注意下面这条insert语句是没有ignore关键字的
INSERT INTO person(id,info FROM person_old;
INSERT INTO person_old 
VALUES (13,'kay',26,'student')
##注意下面这条insert语句是有ignore关键字的
INSERT IGNORE INTO person(id,info FROM person_old;

?

MYSQL数据库

MYSQL数据库

可以看到插入成功MYSQL数据库

SQLSERVERMYSQL数据库

在SQLSERVER这边,如果要忽略重复键,需要在建表的时候指定 WITH (IGNORE_DUP_KEY = ON) ON [PRIMARY]MYSQL数据库

这样在插入重复值的时候,SQLSERVER第一次会保留值,第二次发现有重复值的时候,SQLSERVER就会忽略掉MYSQL数据库

区别二MYSQL数据库

插入自增列时的区别MYSQL数据库

SQLSERVER需要使用 SET IDENTITY_INSERT 表名 ON 才能把自增字段的值插入到表中,如果不加 SET IDENTITY_INSERT 表名 ONMYSQL数据库

则在插入数据到表中时,不能指定自增字段的值,则id字段不能指定值,SQLSERVER会自动帮你自动增加一MYSQL数据库

INSERTINTO person(NAME,info) VALUES ('feicy',33,'student')

而MYSQL则不需要,而且自由度非常大MYSQL数据库

你可以将id字段的值指定为NULL,MYSQL会自动帮你增一MYSQL数据库

INSERTINTO person(id,info) VALUES (NULL,'feicy','student')

?

MYSQL数据库


也可以指定值MYSQL数据库

INSERT IGNORE INTO person(id,info) VALUES (16,'tom',88,'student')

MYSQL数据库

也可以不写id的值,MYSQL会自动帮你增一MYSQL数据库

INSERT IGNORE INTO person(NAME,info) VALUES ('amy',12,'bb')

MYSQL数据库

你可以指定id字段的值也可以不指定,指定的时候只要当前id字段列没有你正在插入的那个值就可以,即没有重复值就可以MYSQL数据库

自由度非常大,而且无须指定 SET IDENTITY_INSERT 表名 ON 选项MYSQL数据库

区别三MYSQL数据库

唯一索引的NULL值重复问题MYSQL数据库

MYSQLMYSQL数据库

在MYSQL中UNIQUE 索引将会对null字段失效MYSQL数据库

insert into test(a) values(null)
 
insert into test(a) values(null)

?
上面的插入语句是可以重复插入的(联合唯一索引也一样)MYSQL数据库

SQLSERVERMYSQL数据库

SQLSERVER则不行MYSQL数据库

CREATE TABLE person (
 id INT NOT NULL IDENTITY(1,1),NAME CHAR(40) NULL DEFAULT '',PRIMARY KEY (id)
)
CREATE UNIQUE INDEX IX_person_unique ON [dbo].[person](name)
INSERT INTO [dbo].[person]
    ( [NAME],[age],[info] )
VALUES ( NULL,-- NAME - char(40)
     1,-- age - int
     'aa' -- info - char(50)
     ),( NULL,-- NAME - char(40)
     2,-- age - int
     'bb' -- info - char(50)
     )
消息 2601,级别 14,状态 1,第 1 行
不能在具有唯一索引“IX_person_unique”的对象“dbo.person”中插入重复键的行.重复键值为 (<NULL>).
语句已终止.

?
更新MYSQL数据库

更新比较简单,就不多说了MYSQL数据库

UPDATE person SET info ='police' WHERE id BETWEEN 14 AND 17
SELECT * FROM person

MYSQL数据库

删除MYSQL数据库

删除person表中一定范围的数据MYSQL数据库

DELETE FROM person WHERE id BETWEEN 14 AND 17
SELECT * FROM person

MYSQL数据库

如果要删除表的所有记录可以使用下面的两种方法MYSQL数据库

##方法一
DELETE???? FROM personMYSQL数据库

##方法二
TRUNCATE TABLE? person
跟SQLSERVER一样,TRUNCATE TABLE会比DELETE FROM TABLE 快MYSQL数据库

MYISAM引擎下的测试结果,30行记录MYSQL数据库

MYSQL数据库

MYSQL数据库

MYSQL数据库

?
跟SQLSERVER一样,执行完TRUNCATE TABLE后,自增字段重新从一开始.MYSQL数据库

################################
INSERT IGNORE INTO person(id,info FROM person_old;
SELECT * FROM person
TRUNCATE TABLE person
INSERT IGNORE INTO person(NAME,'bb')
SELECT * FROM person

MYSQL数据库

当你刚刚truncate了表之后执行下面语句就会看到重新从一开始MYSQL数据库

SHOW TABLE STATUS LIKE 'person'

MYSQL数据库

总结MYSQL数据库

这一节介绍了MYSQL里的的插入、更新和删除,并且比较了与SQLSERVER的区别,特别是MYSQL里插入语句的灵活性MYSQL数据库

刚刚开始从SQLSERVER转过来可能会有一些不适应MYSQL数据库

如有不对的地方,欢迎大家拍砖o(∩_∩)oMYSQL数据库

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读