【MySQL-增删查改】

目录

  • 1、插入数据
  • 2、查询数据
  • 3、修改数据
  • 4、删除数据

1、插入数据

语法: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";

2、查询数据

创建一张表

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

3、修改数据

语法:update 表名 set [column = expr].....

4、删除数据

语法: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 |
+----+------+-----------+------------+

你可能感兴趣的:(mysql,数据库)