[疯狂Java]SQL-DML:插入、修改、删除记录

来源:互联网 发布:淘宝上进货 编辑:程序博客网 时间:2024/06/06 20:28

1. DML:

    1) Data Manipulation Language,即数据操作语言,其针对的目标直接就是数据表中的数据记录;

    2) 主要有向数据表中插入数据记录(行)(insert)、修改数据记录(列的值)(update)、删除表中的记录(delete);

    3) 所有DML语句都必须包含一个要素,就是操作的是哪张表,因此其格式为:DML操作 目标表名 具体怎么操作;

    4) 其中DML操作名有对应上面三种:insert into(插入[到哪张表])、update(修改,即更新[哪张表])、delete from([从哪张表里]删除记录);

    5) 这三个操作都有自己独特的操作语法,这在之后会详细讲解;


2. 插入记录——insert into:

    1) 语法格式:主要分为显示指定值和子查询两种,前两个是显式指定值(但是一次只能插入一条记录,如果要插入多条就要反复编写该插入语句,而子查询插入支持一次插入多条,插入的内容直接就是子查询的结果,因此插入多条是显而易见的)

         i. 直插入记录的某几个字段(列),其余字段使用定义列时给出的默认值:insert into 目标表(要插入值的列) values(对应的值);

         ii. 不指定具体的列,但是所有字段必须给出值:insert into 目标表 values(每一列的值); // 还无法确定值的就先给一个null(但不能有not null约束)

         iii. 子查询插入(指定插入值的列):insert into 目标表(要插入值的列) select语句; // 将select的查询结果插入到目标表中

         iv. 子查询插入(满插,不指定插入值的列,所以所有字段必须都给出值):insert into 目标表 select语句; // 查询结果必须和目标表的列数一样

!!子查询插入中子查询的结果的列数和数据类型必须和目标一一对应!

     2) 示例:

create table t1(col1 int,col2 int);insert into t1 values(1, 2); // 不指定列insert into t1(col1, col2) values(2, 3); // 指定列create table t2(col1 int,col2 int);insert into t2(col1) select col2 from t1; // 子查询指定列,t2.col2将被设为nullinsert into t2 select * from t1; // 子查询不指定列
    3) 对于设定为自增长的列插入是可以传null值,但实际插入的并不是null值,而是自增长后的值!!null的意思就是要么为空,要么就交给系统默认处理;

    4) 标准SQL虽然规定显式指定值的插入一次只能插入一条记录,但是MySQL为显式值插入提供了一次插入多条记录的语句,就是在values后使用多个括号插入记录即可,记录之间用逗号隔开,例如:insert into t1(col1, col2) values(1, 2), (3, 4); // 一次插入了两条记录,分别是(1, 2)和(3, 4)


3. 修改/更新——update:

    1) 修改记录不仅需要确定是哪张表,而且要确定修改的是哪几行(因此update支持多行修改的)以及记录的哪几列,即三要素(必须要定位表、行、列);

    2) 语法格式:

update 目标表set 列1=更新的值1[, 列2=更新的值2[...]][where子句];
         i. 第一行确定了修改的是哪张表;

         ii. 第三行的where子句用来定位要修改的是哪几行(即满足where子句条件的行才会被修改,如果不写where子句就表示结果总为true,即所有行都要修改);

         iii. 第二行指定了要修改的是哪几列;

    3) 示例:

update TableTeacher // 修改的是教师表set teacher_name='lalala', teacher_address='111' // 把名字改成'lalala',把地址改成'111'where teacher_id > 1; // 所有编号大于1的教师记录都要改


4. 删除记录——delete from:

    1) 删除记录不需要指定列,因为删除记录在标准SQL中规定只能整行删除,因此删除记录只关心是哪张表和哪几行(where子句指定);

    2) 语法格式:delete from 目标表 [where子句]; // where子句确定被删的行应该是怎样的,因此同样支持多行删除,如果where子句不写则表示全部行都要删除,这就跟truncate的效果一样了,但还是建议删除数据但不删表还是使用truncate,truncate更加高效

    3) 示例:delete from TableTeacher where teacher_id > 50; // 把所有编号大于50的教师记录删除



0 0
原创粉丝点击