MySQL全面瓦解5:数据 *** 作-DML

MySQL全面瓦解5:数据 *** 作-DML,第1张

概述说明 DML(Data Manipulation Language)数据 *** 作语言,是指对数据库进行增删改的 *** 作指令,主要有INSERT、UPDATE、DELETE三种,代表插入、更新与删除,这是学习M 说明

DML(Data Manipulation Language)数据 *** 作语言,是指对数据库进行增删改的 *** 作指令,主要有INSERT、UPDATE、DELETE三种,代表插入、更新与删除,这是学习MysqL必要掌握的基本知识。

与之前的章节一致,下方语法中 [] 中内容可以省略。 

INSERT *** 作逐行插入

语法格式如下:

1 insert into t_name[(column_name1,columnname_2,...)] values (val1,val2);2 或者3 into t_name set column_name1 = val1,column_name2 = val2;

1、字段名称和值需要保证数量一直,类型一直,位置一 一对应,否则可能导致异常。

2、not null的字段需要保证有插入的值,否则会报非空的异常信息。允许null的字段如果不想输入数据,字段和值都不出现,或者value用null代替。

3、数值类型,值不需要用单引号括起来,其他的如字符型或日期类型,值需要用单引号括起来;

4、如果表名后面的column_name 省略不写,则代表覆盖该表的所有字段。值的顺序和表中字段顺序须保持一致。

5、上述第二种语法的写法更繁琐,现在比较少使用。

测试一下:

 1 MysqL> desc `user1`; 2 +---------+--------------+------+-----+---------+----------------+ 3 | FIEld   | Type         | Null Key Default | Extra          | 4  5 | ID      bigint(20)   | NO   | PRI NulL    | auto_increment  6 | name    varchar(20)  |     |                 7 | age     int(11)      | 0        8 | address 255) | YES   9 10 4 rows in set11 12 MysqLinto `user1`(name,age,address) values('brand',20,fuzhou');13 query OK,1); Font-weight: bold">1 row affected14 15 MysqLinto `user1`(age,1)">values(16 1364 - FIEld name' doesnt have a default value17 18 MysqL> insert into `user1` values('sol,21,'xiamen19 1136 - Column count doesn't match value count at row 120 21 MysqLinto `user1` values(null,1)">sol21,1)">xiamen22 query OK,1)">23 24 MysqLselect * from25 --+-------+-----+---------+26 | ID | name  | age 27 28 |  3 | brand 20 | fuzhou  29 4 | sol   21 | xiamen  30 31 2 rows set
批量插入

语法格式如下:

into t_name  (val1_1,val1_2),(val2_1,val2_2)...);select  o_name1,o_name2  from o_t_name where  condition];

 

 1、上述第一个语法,values 后面的值个数需要同等配对 column的数量,可以设置多个,逗号隔开,提高数据插入效率。

 2、第二个语法,select查询的字段和插入数据的字段数量、顺序、类型需要一致。 insert的字段可以省略,代表插入t_name表所有字段。条件可选。

测试一下:

'),( 2 query OK,1); Font-weight: bold">2 rows affected 3 Records: 2  Duplicates: 0  Warnings: 0 4  5 MysqL5 6 11 12 set

 

 `user2`;| sex     1       5 rows 12 13 MysqLinto `user2` (name,address,sex) select name,null 14 query OK,1)">15 Records: 16 17 MysqL18 --+-------+-----+---------+------+19 | sex  20 21 7 | 1    22 8 1    23 24 set
UPDATE *** 作数据更新

语法格式如下:

update t_name [as] alias] set  alias.]column_name1 alias.]column_name2 = val2 where condition];

1、alias 是别名的意思,别名越简单识别性越强越好,容易辨认,方便 *** 作,没有别名情况下,表名就是别名

2、as alias 中as也是可选的,where 条件也是可选的,所以用户可以选择需要的,符合特定条件的部分数据进行更新。

测试一下:

NulL  9 10 MysqLupdate `user2` as u2 set u2.name = hero=23,u2.sex1 where ID7;11 query OK,1)">12 Rows matched: 1  Changed: 1  Warnings: 13 14 MysqL15 --+------+-----+---------+------+| name 17 | hero 23 |    1 | sol  set

 还有一种方式是同时更新多个表,使用不同的别名以及一些条件去限制,不过不建议这么做, *** 作易错,并且不好维护。

DELETE *** 作delete方式删除

语法格式如下:

delete aliasfrom t_name ] alias] ];

 

1、跟上面一样,alias代表别名,没有别名情况下,表名就是别名

2、如果表设置了别名,则delete后面必须跟上别名,否则数据库会报异常。

测试一下:

MysqL `user2`;--+------+-----+---------+------+|setMysqL>  delete from `user2` as alias where sex;1064 - You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near as alias where sex=1' at line delete alias ;query OK, row affectedMysqL1 row set

 

3、如果删除表中所有的数据,则后面不带上where条件即可,不过要谨慎使用哟。

--+-------+-----+----------+-----+| address  | sex | xiamen   |   0 10 | fuzhou   11 | helen | quanzhou 3 rows 10 11 MysqL12 query OK,1); Font-weight: bold">315 Empty set
truncate方式删除

语法格式如下:

truncate t_name;
12 13 14 truncate0set

  看起来跟delete很像,但是重新插入数据会发现,他的自增主键会重新从1开始,但是delete的是直接在原来的所以自增值之后往上加。看下面ID字段。

1),1)">helenquanzhou0),1); Font-weight: bold">3  Duplicates: | ID 2 13 set

 那 truncate 和 delete有什么区别呢?我们来梳理下。

truncate和delete的比较

1、truncate 指的是清空表的数据、释放表的空间,但不删除表的架构定义(表结构)。因为不包含Where条件,所以不是删除具体行,而是将整个表清空了。

2、而delete 语句是删除表中的数据行,可以在后面带上条件控制删除的维度、范围,它每次从表中删除一行,会同时将该行的删除 *** 作作为事务保存在日志中,用于进行可能的回滚 *** 作。

3、truncate 和 delete 一样的地方是:只是删除数据,涉及到的表结构及其列、约束、索引等均不会变。

4、如果被外键 foreign key 约束,不能使用truncate ,只能使用不带where子句的delete语句。

5、truncate *** 作会记录在日志中,delete *** 作会放到 rollback segement 中,执行时要等事务被commit才会生效;所以delete 会触发删除触发器(如果有的话),truncate 不会。

6、如果像上面我们测试的那样,包含自增字段,truncate方式清空之后,自增列的值会被初始化从1开始。

delete方式要分情况判断(如果数据全部delete,数据库未被重启,则按照之前max+1;数据库重启了,则一样会重新开始计算自增列的初始值)。

7、前面章节我们还学过drop,drop语句会删除表包括 结构、数据、依赖该表的约束(constrain),触发器(trigger)索引(index)等。

 

总结

以上是内存溢出为你收集整理的MySQL全面瓦解5:数据 *** 作-DML全部内容,希望文章能够帮你解决MySQL全面瓦解5:数据 *** 作-DML所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1152837.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存