MySQL 数据的操作(增,删,改,查)

表的修改

语句:alter table table_name  table_name为修改的表的名称

格式:ALTER TABLE table_name

           [ ADD   colum_definition   [ FIRST   |   AFTER   column_name ] ] ,

           [ CHANGE   old_column_name   column_definition   [ FIRST   |   AFTER   column_name ] ] ,

           [ DROP   old_column_name ] ,

           [ DROP   PRIMARY  KEY ] ;

table_name:指要修改表的名称。

colum_definition:指一个列的定义,包括创建表时列的所有可能的定义方式。

old_column_name:当前表中的列名,即要修改或删除的列名。

FIRST:可选选项,如果标明则新加列或修改列将被置于表的第一个列。

AFTER   column_name:可选选项,如果标明则新加列将被置于表中column_name列后面。

DROP   PRIMARY  KEY:删除表的主键。

例:

mysql> alter table mytable
    -> add bonus float(15,2) after salary,
    -> change id serial_no int(6) not null;
Query OK, 0 rows affected (0.19 sec)
Records: 0  Duplicates: 0  Warnings: 0

这里,对表 mytable 在列 salary 后面增加了一个名为 bonus 的列用于储存奖金。同时对 id 列做了修改,将列名重命名为 serial_no ,将长度从5改为6。在执行了 alter table 命令后,数据库系统会对表中数据做一下检查,检查表中的数据是否满足新的表定义。

在修改表的时候,对 id 的修改并没有重新指定修改后的列 serial_no 仍为主键。但 MySQL 自动将主键从 id 替换成了 serial_no。

 

表的删除

语句:drop table table_name ;

例:

mysql> drop table mytable;
Query OK, 0 rows affected (0.01 sec)

删除表后,表的结构和表的数据都被删除。

数据的插入

语句:insert into table_name ( 列名1 ,..., 列名n ) value ( 插入的值1,...,插入的值n ) ;

例 1:

mysql> insert into mytable (id,name,age,birthday,salary) value (001 , 'qjy' , 19 , null , 2000 );
Query OK, 1 row affected (0.00 sec)
mysql> insert into mytable (id,name,age,birthday,salary) value (002 , 'qsy' , 29 , null , 3000 );
Query OK, 1 row affected (0.02 sec)

例 2:

mysql> create table mytable_new like mytable;
Query OK, 0 rows affected (0.09 sec)

mysql> insert into mytable_new select * from mytable where salary >=3000;
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from mytable_new;
+----+------+-----+----------+----------+
| id | name | age | birthday | salary   |
+----+------+-----+----------+----------+
|  2 | qsy  |  29 | NULL     |  3000.00 |
|  3 | esy  |  43 | NULL     | 40000.00 |
|  4 | asd  |  26 | NULL     | 20000.00 |
+----+------+-----+----------+----------+
3 rows in set (0.00 sec)

创建一个新的复制表 mytable_new,使用语句insert into mytable_new select * from mytable where salary >=3000 ; 再查询 mytable_new,即显示出 salary 列的数值 >= 3000 的项。

 

数据的查询

格式:SELECT   [ ALL | DISTINCT ]   column_name , ... , expr ...

           [ FROM table_name , ...

           [ WHERE condition ]

           [ GROUP BY column_name , ... [ HAVING condition ] ] 

           [ ORDER BY   column_name   [ ASC | DESC ] , ... ]

           [ LIMIT   [ offset , ]   row_count ] ] ;

其中,table_name 表示要查询的表的名称。select 后面可以跟列名或一般表达式。ALL 和 DISTINCT 关键字是一个可选属性,ALL 查询所有记录,DISTINCT 只查询不重复的记录。如果在 select 后只跟一般表达式,则可以实现一些表达式运算。

例 1:

mysql> select 1+1;
+-----+
| 1+1 |
+-----+
|   2 |
+-----+
1 row in set (0.00 sec)

例 2:查询 mytable 中的所有数据

mysql> select * from mytable;
+----+------+-----+----------+----------+
| id | name | age | birthday | salary   |
+----+------+-----+----------+----------+
|  1 | qjy  |  19 | NULL     |  2000.00 |
|  2 | qsy  |  29 | NULL     |  3000.00 |
|  3 | esy  |  43 | NULL     | 40000.00 |
|  4 | asd  |  26 | NULL     | 20000.00 |
+----+------+-----+----------+----------+
4 rows in set (0.00 sec)
mysql> select id ,name from mytable where salary>10000;
+----+------+
| id | name |
+----+------+
|  3 | esy  |
|  4 | asd  |
+----+------+
2 rows in set (0.00 sec)
           语句:select 显示的列名 from 表名 where 条件 ;

例 4:查询各个年龄的人数与平均工资

mysql> select age,count(*),avg(salary) from mytable group by age;
+-----+----------+--------------+
| age | count(*) | avg(salary)  |
+-----+----------+--------------+
|  19 |        1 |  2000.000000 |
|  26 |        1 | 20000.000000 |
|  29 |        1 |  3000.000000 |
|  43 |        1 | 40000.000000 |
+-----+----------+--------------+
4 rows in set (0.00 sec)

           count 函数:计算每个年龄的员工的数量。

           avg 函数:计算平均工资。

例 5:查询 mytable 所有数据并按工资从高到低排序,如果工资相同按年龄从低到高排列

mysql> select * from mytable order by salary desc,age asc;
+----+------+-----+----------+----------+
| id | name | age | birthday | salary   |
+----+------+-----+----------+----------+
|  3 | esy  |  43 | NULL     | 40000.00 |
|  4 | asd  |  26 | NULL     | 20000.00 |
|  2 | qsy  |  29 | NULL     |  3000.00 |
|  1 | qjy  |  19 | NULL     |  2000.00 |
+----+------+-----+----------+----------+
4 rows in set (0.00 sec)

语句:select * from mytable order by salary desc , age asc ;

desc:降序排列,即由高到低。

asc:升序排列,即有低到高。

例 6:查询 mytable 中的1~3条数据

mysql> select * from mytable limit 0,3;
+----+------+-----+----------+----------+
| id | name | age | birthday | salary   |
+----+------+-----+----------+----------+
|  1 | qjy  |  19 | NULL     |  2000.00 |
|  2 | qsy  |  29 | NULL     |  3000.00 |
|  3 | esy  |  43 | NULL     | 40000.00 |
+----+------+-----+----------+----------+
3 rows in set (0.00 sec)

使用 limit 时,第一条记录的 offset 为 0 。即 (查询的第几条数据-1,查询数据数) 。

 

数据的更新

格式:UPDATE table_name1 [ , table_name2 ] [ , ... ]

           SET column_name1 = value1 [ , column_name2 = value2 ] [ , ... ]

           [ WHERE ... ] ;

table_name:更新的表名。

column_name : 更新的列名。

value : 更新后的值。

WHERE :后面跟要更新的记录条件,与 SELECT 语句中的 WHERE 用法相同。

语句:update 表名 set 列名 = ‘ 更改值 ’ where 更新记录的条件

mysql> select * from mytable_new;
+----+------+-----+----------+----------+
| id | name | age | birthday | salary   |
+----+------+-----+----------+----------+
|  2 | qsy  |  29 | NULL     |  3000.00 |
|  3 | esy  |  43 | NULL     | 40000.00 |
|  4 | asd  |  26 | NULL     | 20000.00 |
+----+------+-----+----------+----------+
3 rows in set (0.01 sec)

mysql> update mytable_new set name = 'vivin' where id = '3' ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from mytable_new;
+----+-------+-----+----------+----------+
| id | name  | age | birthday | salary   |
+----+-------+-----+----------+----------+
|  2 | qsy   |  29 | NULL     |  3000.00 |
|  3 | vivin |  43 | NULL     | 40000.00 |
|  4 | asd   |  26 | NULL     | 20000.00 |
+----+-------+-----+----------+----------+
3 rows in set (0.00 sec)

数据的删除

格式:DELETE FROM table_name

           [ WHERE ... ] ;

table_name 指删除的表名,where 后面跟删除记录的条件。

例:

mysql> select * from mytable_new;
+----+-------+-----+----------+----------+
| id | name  | age | birthday | salary   |
+----+-------+-----+----------+----------+
|  2 | qsy   |  29 | NULL     |  3000.00 |
|  3 | vivin |  43 | NULL     | 40000.00 |
|  4 | asd   |  26 | NULL     | 20000.00 |
+----+-------+-----+----------+----------+
3 rows in set (0.00 sec)

mysql> delete from mytable_new where salary=20000;
Query OK, 1 row affected (0.00 sec)

mysql> select * from mytable_new;
+----+-------+-----+----------+----------+
| id | name  | age | birthday | salary   |
+----+-------+-----+----------+----------+
|  2 | qsy   |  29 | NULL     |  3000.00 |
|  3 | vivin |  43 | NULL     | 40000.00 |
+----+-------+-----+----------+----------+
2 rows in set (0.00 sec)

 

猜你喜欢

转载自blog.csdn.net/Qjy_985211/article/details/82316639