MySQL 增-删-改操作
数据库的基本操作就是:增-删-查-改。
用得最多的查:SELECT,在MySQL 查询操作已经讲过,现在学习其他三种。
插入-INSERT
基本语法:
INSERT INTO <tablename> (list1, list2, ...) VALUES (val1, val2, ...); eg:INSERT INTO students (class_id, name, gender, score) VALUES (2, '柯基', 'M', 80); 插入一条记录 INSERT INTO students (class_id, name, gender, score) VALUES (1, '二哈', 'M', 87),(2, '二宝', 'M', 81); 插入多条记录
INSERT INTO students (class_id, name, gender, score) SELECT class_id, name, gender, score FROM studentsB; 插入select出来的数据
值得注意的几点:
· 如果表使用了自增型主键,系统可以通过自增自动算出,该字段可以不用给出。
· 可以省略不写(list1,list2…),如果不写,给出的val顺序必须和表中列的顺序一致。不过建议写上列名,这样语句更容易理解,也不容易出错。
· 插入操作自动插到表末。关系数据库的记录集没有顺序的概念,只有查询的时候才会排序。查询不指定顺序,得到的就是表中实际存放的顺序,如果设置了主键且为自增型,那么就是按主键排序的结果。
有时插入的记录在原表中已经存在,如果任然使用普通的insert,会插入一条新的记录,这条记录与原有的某条记录重复。
有时我们不希望这样,大致可以分为三种情形:
1.原表中存在这个数据,我们希望将原记录删除,替换成新插入的记录。使用replace into,如果没有该记录,和普通插入一样。
REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
2.不删除,直接在原记录基础上更新,使用ON DUPLICATE KEY UPDATE,如果没有该记录,和普通插入一样。 INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99) ON DUPLICATE KEY UPDATE name='小明', gender='F', score=99;
3.如果该记录存在,就忽略这条语句,什么也不干,如果不存在,插入。
INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
那么如何判断原记录是否存在呢?这里是通过主键(或者唯一索引)进行判断的,因此表必须要有主键或者唯一索引,并且这些语句必须给出插入的主键(上例即id)。
修改-UPDATE
更新表中的数据,用UPDATE命令。语法如下:
UPDATE <tablename> SET list1=val1, list2=val2, ... WHERE ...; eg:UPDATE students SET name='大牛', score=66 WHERE id=1; 修改id为1的记录中name和score; UPDATE students SET name='小牛', score=77 WHERE id=5 AND id=7; 同时修改id=5和id=7的记录
UPDATE students SET score=NULL WHERE id=5; 将id=5的分数删除,可以置空NULL
当没有WHERE条件时,整个表都会被更新。
在使用MySQL关系数据库时,UPDATE语句会返回更新的行数以及WHERE条件匹配的行数。
删除-DELETE
删除某些记录,语法:
DELETE FROM <tablename> WHERE ...; eg:DELETE FROM students WHERE id=1; DELETE FROM students WHERE id>=1 AND id<=10;
不指定where时,表中所有记录都会被删除。MySQL不能读档,所以一定要小心,最好在删除和更新之前,使用select看where筛选是否正确。
在使用MySQL关系数据库时,DELETE语句会返回删除的行数以及WHERE条件匹配的行数。
小练习:想删除第1和第3行,应该是:WHERE id=1 OR id=3;而不是AND;AND匹配不到任何记录。
参考:廖雪峰的SQL教程