语法格式:
insert into 表名(字段名1,字段名2,字段名3,…) values(值1,值2,值3,…)
举例:
insert into t_student(no,name,sex,classno,birth) values(1,'zhangsan','1','gaosan1ban');
//ERROR 1136 (21S01): Column count doesn't match value count at row 1
要求:字段的数量和值的数量相同,并且数据类型要对应相同。
方法一:省略字段的插入
// 字段可以省略不写,但是后面的value对数量和顺序都有要求。
不建议使用此种方式,因为当数据库表中的字段位置发生改变的时候会影响到insert语句
mysql> insert into t_student values(1,'Tom',1,'Senior 3','1992-11-27');
Query OK, 1 row affected (0.06 sec)
mysql> select * from t_student;
±-----±-----±-----±---------±-----------+
| no | name | sex | classno | birth |
±-----±-----±-----±---------±-----------+
| 1 | Tom | 1 | Senior 3 | 1992-11-27 |
±-----±-----±-----±---------±-----------+
1 row in set (0.00 sec)
方法二:指定字段的插入(建议使用此种方式)
举例1:
mysql> insert into t_student(no,name,sex,classno,birth) values(2,'Mary',0,'Senior 3','1992,5,4');
举例2:
mysql> insert into t_student(no,name) values (3,'Jack');// 除no,name字段之外,剩下的所有字段自动插入NULL。
Query OK, 1 row affected (0.07 sec)
mysql> select * from t_student;
一次插入多行数据
mysql> insert into t_student(no,name,sex,classno) values(4,'Ket',1,'Senior 3'),(5,'Jerry',1,'Senior 3');
需要注意的地方:
当一条insert语句执行成功之后,表格当中必然会多一行记录。即使多的这一行记录当中某些字段是NULL,后期也没有办法在执行insert语句更改那些为NULL的数据了,只能使用update进行更新。
mysql> insert into dept1 select * from dept;
update 表名 set 字段名1=值1,字段名2=值2... where 条件;
注意:没有条件整张表数据全部更新。
可以修改数据,可以根据条件修改数据
举例1:
将部门10的LOC修改为SHANGHAI,将部门名称修改为RENSHIBU
update dept1 set loc = 'SHANGHAI', dname = 'RENSHIBU' where deptno = 10;
举例2:
将job为manager的员工的工资上涨10%
update emp set sal=sal+sal*0.1 where job='MANAGER';
更新所有记录
update dept1 set loc = 'x', dname = 'y';
注意: • 如果需要回滚数据,需要保证在DML前,进行 设置:SET AUTOCOMMIT = FALSE
可以删除数据,可以根据条件删除数据
delete from 表名 where 条件;
注意:没有条件全部删除。
举例:
删除10部门数据?
mysql> delete from dept1 where deptno = 10;
删除所有记录?
mysql> delete from dept1;
注意:删除完所有数据之后,表仍然存在,而且不释放表的存储空间。
可以使用 DELETE 语句删除数据,可以回滚 • 对比: delete from emp2; select * from emp2; rollback; select * from emp2
TRUNCATE TABLE 语句:
truncate table 表名; // 表被截断,不可回滚。永久丢失。