语法:insert into 表名 (字段) values(值);
先创建一个学生表,包含id、学号、姓名、qq
create table students(
id int primary key auto_increment comment "主键",
su varchar(10) not null unique comment "学号",
name varchar(11) not null comment "名字",
qq varchar(11) unique comment "qq联系方式"
)
1、插入一行数据
insert into students (su,name,qq) values ("1001","陈平安","11111111111");
2、插入多行数据
insert into students (su,name,qq) values
("1001","陈平安","11111111111"),
("1002","杨间","22222222222"),
("1003","荒","33333333333");
3、如果你是全行插入数据,可以省略values前面字段名
insert into students values (4,"1004","愚者","55555555555");
4、如果你是只插入学号、名字
insert into students (su,name) values ("1005","白小纯");
su、name 需要顺序写
5、如果插入的记录已经存在,则可以修改,若不存在,则插入
由于主键或唯一键的存在,导致新的记录无法插入,则可以使用以下方法
insert into 表名 () values() on duplicate key updata ......;
是修改了表中存在的记录(有就修改,没有就添加)
下面的唯一键都重复了
insert into students (su,name,qq) values ("1001","陈平安","11111111111")
on duplicate key update su="1006",qq="66666666666";
创建一张表
CREATE TABLE exam_result (
id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL COMMENT '同学姓名',
chinese int DEFAULT 0 COMMENT '语文成绩',
math int DEFAULT 0 COMMENT '数学成绩',
english int DEFAULT 0 COMMENT '英语成绩'
);
1、查找表中全部记录
select * from 表名
2、查询某些字段
select name,math from 表名
3、可包含表达式
select name,chinese+math+engilsh from 表名
4、为查询结果指定别名
select name,chinese+math+engilsh as total from 表名
5、加入where
select name,chinese from 表名 where...
注意:
下面这条语句是否正确?
select name,chinese+math+engilsh as total from 表名 where total>=100
答:错误,total别名无法再where中使用。
分析:
select是把通过where已经筛选出来的记录拿出来,而别名total的产生是在select和where之间,这段区域是需要把筛选出来的记录的某些字段拿出来。其前后顺序是先where再生成total别名,所以where中无法使用别名。要理清楚前后关系。
正确的方式:
select name,chinese+math+engilsh as total from 表名 wherechinese+math+engilsh>=100
6、去重
select distinct 字段 from 表名
7、排序
升序:asc (默认)
降序:desc
select name,chinese from 表名 order by chinese
语文升序,数学降序
select name,chinese,math from 表名 order by chinese,math desc
排序中可以使用别名,排序需要先拿出数据出来,再来排序,故别名可以使用。
排序和where一起使用
找出数学成绩大于80的人并且按语文成绩升序
select name,chinese from 表名 where math>80 order by chinese
8、分页
前n行
select * from 表名 limit n
下标s开始,n行
select * from 表名 limit s,n
下标s开始,n行,比第二种用法更明确,建议使用
select * from 表名 limit n offset s
语法:update 表名 set [column = expr].....
语法:delete from 表名 [...]
使用delete删除数据,其主键自增属性不会清空。
mysql> show create table students\G;
*************************** 1. row ***************************
Table: students
Create Table: CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`su` varchar(11) NOT NULL,
`name` varchar(11) NOT NULL,
`qq` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `su` (`su`),
UNIQUE KEY `qq` (`qq`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
delete from students;
insert into students (su,name,qq) values ("1001","陈平安","11111111111");
mysql> show create table students\G;
*************************** 1. row ***************************
Table: students
Create Table: CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`su` varchar(11) NOT NULL,
`name` varchar(11) NOT NULL,
`qq` varchar(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `su` (`su`),
UNIQUE KEY `qq` (`qq`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
清空了记录之后,再重新插入一条记录
mysql> select * from students;
+----+------+-----------+------------+
| id | su | name | qq |
+----+------+-----------+------------+
| 9 | 1001 | 孙悟空 | 6666666666 |
+----+------+-----------+------------+