(如果只给表中的部分字段插入值时

  • 栏目:数据 时间:2020-04-17 21:40
<返回列表

delete语法单表语法:

 

delete [low_priority] [quick] [ignore] from tbl_name [where where_definition] [order by ...] [limit row_count]多表语法:

  1. 与界面操作相比,通过SQL语句操作更为灵活,功能更为强大。

delete [low_priority] [quick] [ignore] tbl_name[.*] [, tbl_name[.*] ...] from table_references [where where_definition]或:

 

delete [low_priority] [quick] [ignore] from tbl_name[.*] [, tbl_name[.*] ...] using table_references [where where_definition]tbl_name中有些行满足由where_definition给定的条件。delete用于删除这些行,并返回被删除的记录的数目。

  为了让客服端能识别汉字:

如果您编写的delete语句中没有where子句,则所有的行都被删除。当您不想知道被删除的行的数目时,有一个更快的方法,即使用truncate table。请参见13.2.9节,truncate语法。

 

如果您删除的行中包括用于auto_increment列的最大值,则该值被重新用于bdb表,但是不会被用于myisam表或innodb表。如果您在autocommit模式下使用delete from tbl_name删除表中的所有行,则对于所有的表类型,序列重新编排。对于innodb表,此项操作有一些例外,在15.2.6.3节,auto_increment列如何在innodb中运行中进行了讨论。

set character_set_client=gb2312;

对于myisam和bdb表,您可以把auto_increment次级列指定到一个多列关键字中。在这种情况下,从序列的顶端被删除的值被再次使用,甚至对于myisam表也如此。请参见3.6.9节,使用auto_increment。

 

delete语句支持以下修饰符:

为了让结果不出现乱码:

如果您指定low_priority,则delete的执行被延迟,直到没有其它客户端读取本表时再执行。

 

对于myisam表,如果您使用quick关键词,则在删除过程中,存储引擎不会合并索引端结点,这样可以加快部分种类的删除操作的速度。

set character_set_results=gb2312;

在删除行的过程中,ignore关键词会使mysql教程忽略所有的错误。由于使用本选项而被忽略的错误会作为警告返回。

  www.2cto.com  

删除操作的速度会受到一些因素的影响,这些因素在7.2.18节,delete语句的速度中进行了讨论。

  1.       插入记录命令

在myisam表中,被删除的记录被保留在一个带链接的清单中,后续的insert操作会重新使用旧的记录位置。要重新使用未使用的空间并减小文件的尺寸,则使用optimize table语句或myisamchk应用程序重新编排表。optimize table更简便,但是myisamchk速度更快。请参见13.5.2.5节,optimize table语法和第7章:优化。

 

quick修饰符会影响到在删除操作中索引端结点是否合并。当用于被删除的行的索引值被来自后插入的行的相近的索引值代替时,delete quick最为适用。在此情况下,被删除的值留下来的空穴被重新使用。

    一旦创建了数据库和表,下一步就是向表里插入数据。通过insert或replace语句可以向表中插入一行或多行数据。(replace语句的用法和insert基本相同,使用replace可以在插入数据之前将与新纪录冲突的旧记录删除,从而使新纪录正常插入)

未充满的索引块跨越某一个范围的索引值,会再次发生新的插入。当被删除的值导致出现未充满的索引块时,delete quick没有作用。在此情况下,使用quick会导致未利用的索引中出现废弃空间。下面是此种情况的举例说明:

 

  1. 创建一个表,表中包含已编索引的auto_increment列。

insert into 表名(字段名1,字段名2.。。。)

2. 在表中插入很多记录。每次插入会产生一个索引值,此索引值被添加到索引的高端处。

 

  1. 使用delete quick从列的低端处删除一组记录。

values(值1,值2.。。。);

在此情况下,与被删除的索引值相关的索引块变成未充满的状态,但是,由于使用了quick,这些索引块不会与其它索引块合并。当插入新值时,这些索引块仍为未充满的状态,原因是新记录不含有在被删除的范围内的索引值。另外,即使您此后使用delete时不包含quick,这些索引块也仍是未充满的,除非被删除的索引值中有一部分碰巧位于这些未充满的块的之中,或与这些块相邻。在这些情况下,如果要重新利用未使用的索引空间,需使用optimize table。

 

如果您打算从一个表中删除许多行,使用delete quick再加上optimize table可以加快速度。这样做可以重新建立索引,而不是进行大量的索引块合并操作。

例如:

用于delete的mysql唯一的limit row_count选项用于告知服务器在控制命令被返回到客户端前被删除的行的最大值。本选项用于确保一个delete语句不会占用过多的时间。您可以只重复delete语句,直到相关行的数目少于limit值为止。

 

如果delete语句包括一个order by子句,则各行按照子句中指定的顺序进行删除。此子句只在与limit联用是才起作用。例如,以下子句用于查找与where子句对应的行,使用timestamp_column进行分类,并删除第一行:

Insert into xs(学号,姓名,专业名,总学分,照片,备注)values('081101','王林','计算机' ,50,null,null);

delete from somelogwhere user = 'jcole'order by timestamp_columnlimit 1;您可以在一个delete语句中指定多个表,根据多个表中的特定条件,从一个表或多个表中删除行。不过,您不能在一个多表delete语句中使用order by或limit。

 

table_references部分列出了包含在联合中的表。此语法在13.2.7.1节,join语法中进行了说明。

或者:(如果提供的值的个数和顺序与表中字段一致,可以省略字段名)

对于第一个语法,只删除列于from子句之前的表中的对应的行。对于第二个语法,只删除列于from子句之中的表中的对应的行。作用是,您可以同时删除许多个表中的行,并使用其它的表进行搜索:

 

delete t1, t2 from t1, t2, t3 where t1.id=t2.id and t2.id=t3.id;或:

insert into xs values('081101','王林','计算机',50,null,null);

delete from t1, t2 using t1, t2, t3 where t1.id=t2.id and t2.id=t3.id;当搜索待删除的行时,这些语句使用所有三个表,但是只从表t1和表t2中删除对应的行。

 

以上例子显示了使用逗号操作符的内部联合,但是多表delete语句可以使用select语句中允许的所有类型的联合,比如left join。

或者:(如果只给表中的部分字段插入值时,要指明字段名)

本语法允许在名称后面加.*,以便与access相容。

 

如果您使用的多表delete语句包括innodb表,并且这些表受外键的限制,则mysql优化程序会对表进行处理,改变原来的从属关系。在这种情况下,该语句出现错误并返回到前面的步骤。要避免此错误,您应该从单一表中删除,并依靠innodb提供的on delete功能,对其它表进行相应的修改。

insert into xs(学号,姓名,专业名,出生日期,总学分)

注释:当引用表名称时,您必须使用别名:

 

delete t1 from test as t1, test2 where ...进行多表删除时支持跨数据库教程删除,但是在此情况下,您在引用表时不能使用别名。举例说明:

values('081101','王林','计算机','1990-02-10',50);

delete test1.tmp1, test2.tmp2 from test1.tmp1, test2.tmp2 where ...目前,您不能从一个表中删除,同时又在子查询中从同一个表中选择。

 

如果只给表的部分列插入数据,需要指定这些列。对于没有指出的列,它们的值根据列默认值或有关属性来确定,MySQL处理的原则是:

 

  1.  insert 语法格式:

 

Insert [low_priority |delayed | high_priority] [ignore]

 

     [into] 表名 [(字段名,...)]  www.2cto.com  

 

     values ({expr | default},...),(...),...

 

     | SET col_name={expr| default}, ...

 

     [ on duplicate keyupdate=expr, ... ]

 

(1)具有identity属性的列,系统生成序号值来唯一标志列。

 

(2)具有默认值的列,其值为默认值。

 

(3)没有默认值的列,若允许为空值,则其值为空值;若不允许为空值,则出错。

 

(4)类型为timestamp的列,系统自动赋值。

 

values子句:包含各列需要插入的数据清单,数据的顺序要与列的顺序相对应。若表名后不给出列名,则在values子句中要给出每一列(除identity和timestamp类型的列)的值,如果列值为空,则值必须置为null,否则会出错。values子句中的值:

 

(1)expr:可以是一个常量、变量或一个表达式,也可以是空值null,其值的数据类型要与列的数据类型一致。例如,列的数据类型为int,插入的数据是‘aaa’就会出错。当数据为字符型时要用单引号括起。

 

(2)default:指定为该列的默认值。前提是该列原先已经指定了默认值。如果列清单和values清单都为空,则insert会创建一行,每个列都设置成默认值。

 

Inert语句支持下列修饰符:  www.2cto.com  

 

low_priority:可以使用在insert、delete和update等操作中,当原有客户端正在读取数据时,延迟操作的执行,直到没有其他客户端从表中读取为止。

 

delayed:若使用此关键字,则服务器会把待插入的行放到一个缓冲器中,而发送insert delayed语句的客户端会继续运行。如果表正在被使用,则服务器会保留这些行。当表空闲时,服务器开始插入行,并定期检查是否有新的读取请求(仅适用于myisam、memory和archive表)。

 

High_priority:可以使用在selectT和insert操作中,使操作优先执行。

 

Ignore:使用此关键字,在执行语句时出现的错误就会被当做警告处理。

 

onduplicate key update…:使用此选项插入行后,若导致uniqe key或primary key出现重复值,则根据update后的语句修改旧行(使用此选项时delayed被忽略)。

 

set子句:set子句用于给列指定值,使用set子句时表名的后面省略列名。要插入数据的列名在set子句中指定,col_name为指定列名,等号后面为指定数据,未指定的列,列值指定为默认值。

 

4.  使用insert语句可以向表中插入一行数据,也可以插入多行数据,插入的行可以给出每列的值,也可只给出部分列的值,还可以向表中插入其他表的数据。

 

使用insert into…select…,可以快速地从一个或多个表中向一个表插入多个行。语法格式如下:

 

Insert [low_priority |delayed | high_priority] [ignore]

 

     [into] 表名 [(字段名,...)]

 

    select ...

 

[ on duplicate key update=expr, ... ]

 

Select语句中返回的是一个查询到的结果集,insert语句将这个结果集插入到指定表中,但结果集在每行数据的字段数、字段的数据类型要与被操作的表完全一致。

 

    MySQL还支持图片的存储,图片一般可以以路径的形式来存储,即插入图片可以采用直接插入图片的存储路径。当然也可以直接插入图片本身,只要用load_file函数即可。

 

例如:

 

Insert into XS  values('081102', '程明', '计算机', 1, '1991-02-01',50, 'D:IMAGEpicture.jpg', null);

 

下列语句是直接存储图片本身:

 

Insert into XS

 

    values('081102', '程明', '计算机', 1, '1991-02-01',50, load_file('D:IMAGEpicture.jpg'), null);

 

    在表建完后设置主键,duplicateentry ‘学号’for key 1 ;

 

  1. 删除记录:  www.2cto.com  

 

delete from 表名   //删除表中的所有记录,此表变为了空表

 

delete from 表名 where 条件   //删除表中符合条件的记录

 

例如:delete from xs where 学号='081102';

 

drop table xs ; //删除整张表,结构和记录

 

truncate table 表名   //快速删除表中的所有记录

 

从单个表中删除,语法格式:

 

Delete [low_priority] [quick] [ignore] from表名

 

 [where where_definition]  [orderby...] [limit row_count]

 

说明:

 

● quick修饰符:可以加快部分种类的删除操作的速度。

 

● from子句:用于说明从何处删除数据,后跟要删除数据的表名。

 

● where子句:where_definition中的内容为指定的删除条件。如果省略where子句则删除该表的所有行,where子句后面详细介绍

 

●order by子句:各行按照子句中指定的顺序进行删除,此子句只在与limit联用时才起作用。

 

●limit子句:用于告知服务器在控制命令被返回到客户端前被删除的行的最大值。

 

  1.  从多个表中删除行,语法格式:

 

delete [low_priority] [quick] [ignore] 表名[.*] [,表名 [.*] ...]  from table_references  [wherewhere_definition]

 

或:

 

delete [low_priority] [quick] [ignore]

 

   from  tbl_name[.*] [, tbl_name[.*] ...]

 

   Using  table_references   [where where_definition]

 

说明:对于第一种语法,只删除列于from子句之前的表中对应的行。对于第二种语法,只删除列于from子句之中(在using子句之前)的表中对应的行。作用是,可以同时删除多个表中的行,并使用其他的表进行搜索。

 

例子:

 

假设有3个表t1、t2、t3,它们都含有id列。要删除t1中id值等于t2的id值的所有行和t2中id值等于t3的id值的所有行,使用如下语句:

 

delete   t1, t2

 

     from  t1, t2, t3

 

     where  t1.id=t2.id and t2.id=t3.id;

 

或:  www.2cto.com  

 

Delete from t1, t2 

 

     using t1, t2, t3

 

     where  t1.id=t2.id and  t2.id=t3.id;

 

  1.  使用truncate table语句将删除指定表中的所有数据,因此也称其为清除表数据语句。

 

语法格式:

 

truncate table 表名;

 

说明:由于TRUNCATETABLE语句将删除表中的所有数据,且无法恢复,因此使用时必须十分小心。

 

truncate table 在功能上与不带where子句的delete语句相同,二者均删除表中的全部行。但 truncate table比delete速度快,且使用的系统和事务日志资源少。delete语句每次删除一行,并在事务日志中为所删除的每行记录一项。而truncate table通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。使用 truncate table,auto_increment计数器被重新设置为该列的初始值。

 

注意:对于参与了索引和视图的表,不能使用 truncate table删除数据,而应使用delete语句。

 

  1.       修改记录(更新记录)

 

   要修改表中的一行数据,可以使用update语句,update可以用来修改一个表,也可以修改多个表。简要格式:

 

update 表名

 

set 字段名1=值1 [,字段名2=值2.。。。]

 

where 条件

 

修改单个表,语法格式:

 

update[low_priority] [ignore] 表名

 

   set col_name1=expr1 [, col_name2=expr2 ...]

 

   [where where_definition]

 

   [order by ...]  [limit row_count]

 

说明: 

 

 set子句:根据where子句中指定的条件对符合条件的数据行进行修改。若语句中不设定where子句,则更新所有行。col_name1、col_name2…为要修改列值的列名,expr1、expr2…可以是常量、变量或表达式。可以同时修改所在数据行的多个列值,中间用逗号隔开。

 

  1.   修改多个表,语法格式:

 

update [low_priority] [ignore] table_references

 

   set col_name1=expr1 [, col_name2=expr2 ...]

 

   [where where_definition]

 

说明:table_references中包含了多个表的联合,各表之间用逗号隔开。

 

  1. 按SQL包的格式导进来:source SQL包路径;

 

显示表的记录:select * from 表名;  www.2cto.com  

 

插入记录时,除了数值类型不用加引号,其他类型都要加单引号(比如:char、date等)

 

  1.       show语句

 

show tables或show tables from 库名:显示当前数据库中所有表的名称。

 

show databases:显示MySQL中所有数据库的名称。

 

show columns from 表名 from库名或show columnsfrom 库名.表名:显示表中列的名称。

 

show  grants for user_name:显示一个用户的权限,显示结果类似于grant命令。

 

show index from table_name:显示表的索引。

 

show  staus:显示一些系统特定资源的信息,例如,正在运行的线程数量。

 

show variables:显示系统变量的名称和值。

 

show  processlist:显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。

 

show table status:显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间。

 

show privileges:显示服务器所支持的不同权限。

 

show create database 库名:显示创建某一个数据库的create database语句。

 

show create table 表名:显示创建一个表的create table语句。

 

show events:显示所有事件的列表。

 

show innoDB status:显示InnoDB存储引擎的状态。

 

show logs:显示BDB存储引擎的日志。

 

show warnings:显示最后一个执行的语句所产生的错误、警告和通知。

 

show errors:只显示最后一个执行语句所产生的错误。

 

show [storage] engines:显示安装后的可用存储引擎和默认引擎。

 

show procedure status:显示数据库中所有存储过程基本信息,包括所属数据库、存储过程名称、创建时间等。

 

show create procedure sp_name:显示某一个存储过程的详细信息。

 

  1. describe语句(即desc)

 

describe语句用于显示表中各列的信息,结果等于showcolumns from语句。

 

语法格式:

 

{describe | desc} tb1_name [col_name |wild ]

 

说明:

 

desc是describe的简写,二者用法相同。

  www.2cto.com  

col_name可以是一个列名称,或一个包含‘%’和‘_’的通配符的字符串,用于获得对于带有与字符串相匹配的名称的各列的输出。没有必要在引号中包含字符串,除非其中包含空格或其他特殊字符。

 

例如:

 

显示学生表: desc|describe xs;

 

     显示学生表学号列:   desc xs 学号;

 

注意:用图形界面时,输入数据的时候要防止出现不必要的空格,否则检索数据时可能会出现漏洞。

 

 

 

作者 tianyazaiheruan

. 与界面操作相比,通过SQL语句操作更为灵活,功能更为强大。 为了让客服端能识别汉字: set character_set_client=gb2312; 为了让结果不出现乱码...

上一篇:sql中日期日期周末月末函数 下一篇:没有了

更多阅读

(如果只给表中的部分字段插入值时

数据 2020-04-17
delete语法单表语法:   delete [low_priority] [quick] [ignore] from tbl_name [wherewhere_definition] [order by ......
查看全文

sql中日期日期周末月末函数

数据 2020-04-17
文章介绍了在sql中计算月末和周末的sql语句函数,有需要了解的朋友可以参考一下。代码如下...
查看全文

然后执行存储过程xp

数据 2020-04-17
看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到...
查看全文

友情链接: 网站地图

Copyright © 2015-2019 http://www.koi-bumi.com. 韦德体育有限公司 版权所有