一、SQL语法——7-DML语句语法

7-DML语句语法

  DML语句与DDL语句不同,DDL语句用于操作数据库对象,而DML语句用于操作数据库数据,使用DML语句可以完成如下三个任务:

(1)插入新数据;

(2)修改已有数据;

(3)删除不需要的数据。

1.insert into语句

(1)insert into语句用于向指定表中插入记录,对于标准的SQL语句而言,每次只能插入一条记录。

(2)insert into语句语法如下:

  insert into table_name(column1,column2...) values(column1,column2...);

  执行插入操作时,表名后可以用括号列出所有需要插入值的列名,而values后用括号列出对应需要插入的值。

  如果省略了表名后的括号,默认将为所有列都插入值,则需要为每一列都指定一个值,如果既不想在表名后列出列名,又不想为所有值都指定值,则可以为那些无法确定值的列分配null。

(3)带子查询的插入语句可以一次插入多条记录;

(4)insert into语句示例:

#相关表建立
create table teacher_table2(
    teacher_id int auto_increment,
    teacher_name varchar(255),
    primary key(teacher_id)
);
create table student_table2(
    #为本表建立主键约束
    student_id int auto_increment primary key,
    student_name varchar(255),
    java_teacher int,
    #使用表级约束语法建立foreign key并为其指定名字
    constraint student_teacher_fk foreign key(java_teacher) references teacher_table2(teacher_id)
);

#不省略表名后的列名插入记录
insert into teacher_table2(teacher_name)
values('test');

#省略表名后的列名插入记录
#使用null代替不确定的值,此处null位置为teacher_table2表的primary key它被定义为自增长
#会被系统自动赋值
insert into teacher_table2 values(null,'test');

#当向外键列插入值时,外键列的值必须是被参照列中已有的值
insert into student_table2
values(null,'s_test',1);

#注:foreign key保证被参照的记录必须存在,但不保证必须有被参照记录,即foreign key可以为null。如果
#    想要保证每条从表记录必须存在对应的主表记录,则应该使用非空、外键两个约束。


#使用子查询的值插入,可以同时插入多条记录
#带子查询的插入语句甚至不要求被查询数据的原表和插入数据的目的表是同一个表,它只要求选择出来的数据列和插入目的
#表的数据列个数相等、数据类型匹配即可
insert into student_table2(student_name)
select teacher_name from teacher_table2;


#MySQL的拓展语法,可以同时插入多条记录
insert into teacher_table2
values(null,'test2'),(null,'test3');

2.update语句

(1)update语句用于修改数据表中的记录,每次可以修改多条记录,使用where关键字限定修改那些记录,没有where子句则代表where表达式的值总是为true,即该表的所有记录都会被修改。

(2)update语句语法格式如下:

  update table_name

  set column1=value1,column2=value2...

  [where condition];

(3)示例:

#所有记录都被修改
update teacher_table2
set teacher_name='update_test';

#使用where限制修改记录
update teacher_table2
set teacher_name='test'
where teacher_id>1;

3.delete from语句

(1)delete from用于删除指定记录表的记录,也可选择使用where限定或者不限定删除记录。

(2)示例:

#删除所有记录
delete from student_table2;

#指定删除记录
delete from teacher_table2 
where teacher_id>2;

#注:当主表记录被从表参照时,不能够删除主表记录,应该先删除从表参照该记录的记录,这些记录被删除后才可以删除主表记录
#也可以在定义外键时使用on delete cascade,或者on delete set null级联删除,但注意两者区别
#on delete cascade:删除记录;
#on delete set null:把外键列的值设置为null;

 

posted @ 2017-08-03 15:57  丶theDawn  阅读(337)  评论(0编辑  收藏  举报