MySQL6_表的增刪改查CURD

1.CREATE,數據的插入

創建一張學生表


mysql> create table student(

    ->     id int primary key comment '學生id',

    ->     name varchar(32) comment '學生姓名',

    ->     age int comment'學生年齡',

    ->     email varchar(32) comment '學生郵箱'

    -> );

Query OK, 0 rows affected (0.60 sec)

 

  • 單行數據+全列插入

--語法

insert into 表名 values(列1值,列2值,列3值);

mysql> insert into student values(1,'Alice',18,'[email protected]');

Query OK, 1 row affected (0.16 sec)

 

mysql> select * from student;

+----+-------+------+---------+

| id | name  | age  | email   |

+----+-------+------+---------+

|  1 | Alice |   18 | [email protected] |

+----+-------+------+---------+

1 row in set (0.00 sec)
  • 多行數據+全部列插入

--語法

insert into 表名 values(列1值,列2值,列3值),(列1值,列2值,列3值);

mysql> insert into student values(2,'Bob',18,'[email protected]'),  (3,'Candy',18,'[email protected]');

Query OK, 2 rows affected (0.15 sec)

Records: 2  Duplicates: 0  Warnings: 0

 

mysql> select * from student;

+----+-------+------+---------+

| id | name  | age  | email   |

+----+-------+------+---------+

|  1 | Alice |   18 | [email protected] |

|  2 | Bob   |   18 | [email protected] |

|  3 | Candy |   18 | [email protected] |

+----+-------+------+---------+

3 rows in set (0.00 sec)
  • 單行數據+指定列插入

--語法

insert into 表名(列1名,列2名)values(列1值,列2值);

mysql> insert into student(id,name)values(4,'Davis');

Query OK, 1 row affected (0.07 sec)

 

mysql> select * from student;

+----+-------+------+---------+

| id | name  | age  | email   |

+----+-------+------+---------+

|  1 | Alice |   18 | [email protected] |

|  2 | Bob   |   18 | [email protected] |

|  3 | Candy |   18 | [email protected] |

|  4 | Davis | NULL | NULL    |

+----+-------+------+---------+

4 rows in set (0.00 sec)
  • 多行數據+指定列插入

--語法

insert into 表名(列1名,列2名)values(列1值,列2值),(列1值,列2值);

mysql> insert into student(id,name)values(5,'Edsiom'),(6,'Frank');

Query OK, 2 rows affected (0.15 sec)

Records: 2  Duplicates: 0  Warnings: 0

 

mysql> select * from student;

+----+--------+------+---------+

| id | name   | age  | email   |

+----+--------+------+---------+

|  1 | Alice  |   18 | [email protected] |

|  2 | Bob    |   18 | [email protected] |

|  3 | Candy  |   18 | [email protected] |

|  4 | Davis  | NULL | NULL    |

|  5 | Edsiom | NULL | NULL    |

|  6 | Frank  | NULL | NULL    |

+----+--------+------+---------+

6 rows in set (0.00 sec)
  • 主鍵或者唯一鍵替換

在student表中,id是主鍵,不能重複,但是如果想要修改id爲1的學生的姓名應該如何操作

這種同步更新操作會先刪除原有數據,在進行新的插入,所以會有兩行受到影響


--語法

insert into 表名(列1,列2) values (列1值, 列2值)  on duplicate key update 列1=列1值,列2=列2值;

mysql> insert into student(id,name)values(1,'Alice')on duplicate key update id =1,name='Amda';

Query OK, 2 rows affected (1.22 sec)

 

mysql> select * from student;

+----+--------+------+---------+

| id | name   | age  | email   |

+----+--------+------+---------+

|  1 | Amda   |   18 | [email protected] |

|  2 | Bob    |   18 | [email protected] |

|  3 | Candy  |   18 | [email protected] |

|  4 | Davis  | NULL | NULL    |

|  5 | Edsiom | NULL | NULL    |

|  6 | Frank  | NULL | NULL    |

+----+--------+------+---------+

6 rows in set (0.00 sec)
  • 替換:直接替換有主鍵衝突的數據
    
    --語法
    
    replace into 表名(列1,列2)values(列1值,列2值);
    
    
    mysql> replace into student(id,name)values(1,'Alice');
    
    Query OK, 2 rows affected (0.14 sec)
    
     
    
    mysql> select * from student;
    
    +----+--------+------+---------+
    
    | id | name   | age  | email   |
    
    +----+--------+------+---------+
    
    |  1 | Alice  | NULL | NULL    |
    
    |  2 | Bob    |   18 | [email protected] |
    
    |  3 | Candy  |   18 | [email protected] |
    
    |  4 | Davis  | NULL | NULL    |
    
    |  5 | Edsiom | NULL | NULL    |
    
    |  6 | Frank  | NULL | NULL    |
    
    +----+--------+------+---------+
    
    6 rows in set (0.00 sec)
    
    
    

     

2.RETRIEVE、查詢

創建學生成績表並插入數據得如下表

+----+-----------+------+---------+---------+

| id | name      | math | chinese | english |

+----+-----------+------+---------+---------+

|  1 | 張三      |   54 |      32 |      88 |

|  2 | 李四      |   88 |      99 |      25 |

|  3 | 王五      |   55 |      99 |      88 |

|  4 | 張六六    |   48 |      96 |      32 |

|  5 | 趙四      |   74 |      68 |      87 |

|  6 | 周七      |   70 |      60 |      58 |

|  7 | 王八      |   99 |      98 |      95 |

+----+-----------+------+---------+---------+


查詢所有列


--語法

select * from 表名;

mysql> select * from score;

+----+-----------+------+---------+---------+

| id | name      | math | chinese | english |

+----+-----------+------+---------+---------+

|  1 | 張三      |   54 |      32 |      88 |

|  2 | 李四      |   88 |      99 |      25 |

|  3 | 王五      |   55 |      99 |      88 |

|  4 | 張六六    |   48 |      96 |      32 |

|  5 | 趙四      |   74 |      68 |      87 |

|  6 | 周七      |   70 |      60 |      58 |

|  7 | 王八      |   99 |      98 |      95 |

+----+-----------+------+---------+---------+

7 rows in set (0.00 sec)


查詢指定列

--語法(不需要按照指定順序查詢)
select 列1,列2 from 表名;

--查詢學生姓名對應的語文成績和數學成績

mysql> select name,chinese,math from score;

+-----------+---------+------+

| name      | chinese | math |

+-----------+---------+------+

| 張三      |      32 |   54 |

| 李四      |      99 |   88 |

| 王五      |      99 |   55 |

| 張六六    |      96 |   48 |

| 趙四      |      68 |   74 |

| 周七      |      60 |   70 |

| 王八      |      98 |   99 |

+-----------+---------+------+

7 rows in set (0.00 sec)

--查詢學生姓名對應的語文成績和數學成績

mysql> select name,chinese,math from score;

+-----------+---------+------+

| name      | chinese | math |

+-----------+---------+------+

| 張三      |      32 |   54 |

| 李四      |      99 |   88 |

| 王五      |      99 |   55 |

| 張六六    |      96 |   48 |

| 趙四      |      68 |   74 |

| 周七      |      60 |   70 |

| 王八      |      98 |   99 |

+-----------+---------+------+

7 rows in set (0.00 sec)


查詢字段或表達式
--語法
select 表達式 as 新列名 from 表名;  --as可以省略
--查詢學生姓名所對應的總成績
mysql> select name,math+chinese+english as total from score;
+-----------+-------+
| name      | total |
+-----------+-------+
| 張三      |   174 |
| 李四      |   212 |
| 王五      |   242 |
| 張六六    |   176 |
| 趙四      |   229 |
| 周七      |   188 |
| 王八      |   292 |
+-----------+-------+
7 rows in set (0.10 sec)
結果去重
--語法
select distinct 列名 from 表名;
--查詢所有的不重複的語文成績
mysql> select distinct chinese from score;
+---------+
| chinese |
+---------+
|      32 |
|      99 |
|      96 |
|      68 |
|      60 |
|      98 |
+---------+
6 rows in set (0.02 sec)
條件查詢
--語法
查詢語句 where 查詢條件;
--查詢語文成績爲99或者數學成績爲48的同學信息
mysql> select  * from score where chinese=99 or math=48;
+----+-----------+------+---------+---------+
| id | name      | math | chinese | english |
+----+-----------+------+---------+---------+
|  2 | 李四      |   88 |      99 |      25 |
|  3 | 王五      |   55 |      99 |      88 |
|  4 | 張六六    |   48 |      96 |      32 |
+----+-----------+------+---------+---------+
3 rows in set (0.00 sec)
--查詢姓名爲三個字的學生信息
mysql> select  * from score where name like'___';
+----+-----------+------+---------+---------+
| id | name      | math | chinese | english |
+----+-----------+------+---------+---------+
|  4 | 張六六    |   48 |      96 |      32 |
+----+-----------+------+---------+---------+
1 row in set (0.02 sec)
--查詢語文成績小於等於數學成績的同學信息
mysql> select  * from score where chinese<=math;
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  1 | 張三   |   54 |      32 |      88 |
|  5 | 趙四   |   74 |      68 |      87 |
|  6 | 周七   |   70 |      60 |      58 |
|  7 | 王八   |   99 |      98 |      95 |
+----+--------+------+---------+---------+
4 rows in set (0.00 sec)
--查詢總分高於150的分數,tips:在where中不允許使用別名
mysql> select math+chinese+english 總分 from score where math+chinese+english>150;
+--------+
| 總分   |
+--------+
|    174 |
|    212 |
|    242 |
|    176 |
|    229 |
|    188 |
|    292 |
+--------+
7 rows in set (0.00 sec)
結果排序(order by):ASC(升序,默認)DESC(降序)
--語法
查詢語句 order by 字段 desc/asc;
--按數學成績降序查詢學生信息
mysql> select  * from score order by math desc;
+----+-----------+------+---------+---------+
| id | name      | math | chinese | english |
+----+-----------+------+---------+---------+
|  7 | 王八      |   99 |      98 |      95 |
|  2 | 李四      |   88 |      99 |      25 |
|  5 | 趙四      |   74 |      68 |      87 |
|  6 | 周七      |   70 |      60 |      58 |
|  3 | 王五      |   55 |      99 |      88 |
|  1 | 張三      |   54 |      32 |      88 |
|  4 | 張六六    |   48 |      96 |      32 |
+----+-----------+------+---------+---------+
7 rows in set (0.00 sec)
按數學成績降序查詢姓張的同學的信息
mysql> select  * from score where name like'張%' order by math desc;
+----+-----------+------+---------+---------+
| id | name      | math | chinese | english |
+----+-----------+------+---------+---------+
|  1 | 張三      |   54 |      32 |      88 |
|  4 | 張六六    |   48 |      96 |      32 |
+----+-----------+------+---------+---------+
2 rows in set (0.00 sec)
分頁查詢
--語法
-- 從 0 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 從 s 開始,篩選 n 條結果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 從 s 開始,篩選 n 條結果,比第二種用法更明確,建議使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET n;
--插敘數學成績前三的同學信息
mysql> select  * from score order by math desc limit 3 offset 0;
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  7 | 王八   |   99 |      98 |      95 |
|  2 | 李四   |   88 |      99 |      25 |
|  5 | 趙四   |   74 |      68 |      87 |
+----+--------+------+---------+---------+
3 rows in set (0.10 sec)
 
mysql> select  * from score order by math desc limit 0,3;
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  7 | 王八   |   99 |      98 |      95 |
|  2 | 李四   |   88 |      99 |      25 |
|  5 | 趙四   |   74 |      68 |      87 |
+----+--------+------+---------+---------+
3 rows in set (0.00 sec)
 
mysql> select  * from score order by math desc limit 3;
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  7 | 王八   |   99 |      98 |      95 |
|  2 | 李四   |   88 |      99 |      25 |
|  5 | 趙四   |   74 |      68 |      87 |
+----+--------+------+---------+---------+
3 rows in set (0.00 sec)
3.UPDATE、修改

--語法
update 表名 set 列名 = 新的列名;
--給張三同學的數學成績加五分
mysql> select * from score where name like '張三';
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  1 | 張三   |   54 |      32 |      88 |
+----+--------+------+---------+---------+
1 row in set (0.00 sec)
 
mysql> update score set math = math+10 where name like'張三';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> select * from score where name like '張三';
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  1 | 張三   |   64 |      32 |      88 |
+----+--------+------+---------+---------+
1 row in set (0.00 sec)
4.DELETE、刪除

--語法
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
--刪除張三同學的成績
mysql> select * from score where name like'張三';
+----+--------+------+---------+---------+
| id | name   | math | chinese | english |
+----+--------+------+---------+---------+
|  1 | 張三   |   64 |      32 |      88 |
+----+--------+------+---------+---------+
1 row in set (0.00 sec)
 
mysql> delete from score where name like '張三';
Query OK, 1 row affected (0.19 sec)
 
mysql> select * from score where name like'張三';
Empty set (0.00 sec)
5.截斷表(truncate)和刪除表

--建立兩張一樣的表a和b,id自增長
mysql> create table a(
    -> id int primary key auto_increment,
    -> name varchar(32)
    -> );
Query OK, 0 rows affected (1.88 sec)
mysql> insert into a (name)values('alice'),('bob');
Query OK, 2 rows affected (0.16 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from a;
+----+-------+
| id | name  |
+----+-------+
|  1 | alice |
|  2 | bob   |
+----+-------+
2 rows in set (0.00 sec)
mysql> create table b(
    -> id int primary key auto_increment,
    -> name varchar(32)
    -> );
Query OK, 0 rows affected (0.63 sec)
mysql> insert into b (name)values('alice'),('bob');
Query OK, 2 rows affected (0.10 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> select * from b;
+----+-------+
| id | name  |
+----+-------+
|  1 | alice |
|  2 | bob   |
+----+-------+
2 rows in set (0.00 sec)
--對錶a進行整表刪除,然後插入一條數據
mysql> delete from a;
Query OK, 2 rows affected (0.18 sec)
mysql> insert into a (name)values('cindy');
Query OK, 1 row affected (0.15 sec)
mysql> select * from a;
+----+-------+
| id | name  |
+----+-------+
|  3 | cindy |
+----+-------+
1 row in set (0.00 sec)
可以看到,刪除整張表後id自增長是接着沒有刪除前的id繼續增長的

--對錶b進行截斷,然後插入數據
mysql> truncate b;
Query OK, 0 rows affected (0.97 sec)
mysql> insert into b (name)values('cindy');
Query OK, 1 row affected (0.16 sec)
mysql> select * from b;
+----+-------+
| id | name  |
+----+-------+
|  1 | cindy |
+----+-------+
1 row in set (0.00 sec)
可以看到,id是重新進行了自增長

截斷表的特點:1.只能對整表操作;2.速度比delete快;3.重置auto_increment

 

6.數據庫中的聚合函數

count()    返回查詢到的數據的 數量
sum()    返回查詢到的數據的 總和,不是數字沒有意義
avg()    返回查詢到的數據的 平均值,不是數字沒有意義
max()    返回查詢到的數據的 最大值,不是數字沒有意義
min()    返回查詢到的數據的 最小值,不是數字沒有意義
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章