表的修改
语句: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)
语句:select 显示的列名 from 表名 where 条件 ;mysql> select id ,name from mytable where salary>10000; +----+------+ | id | name | +----+------+ | 3 | esy | | 4 | asd | +----+------+ 2 rows in set (0.00 sec)
例 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)