- mysql> alter table orders modify ordername varchar(20);
- Query OK, 0 rows affected (0.11 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc orders;
- +-------------+---------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------------+---------------+------+-----+---------+-------+
- | ordername | varchar(20) | YES | | NULL | |
- | createtime | date | YES | | NULL | |
- | ordermoney | decimal(10,2) | YES | | NULL | |
- | ordernumber | int(2) | YES | | NULL | |
- +-------------+---------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- ALTER TABLE tablename CHANGE [COLUMN] old_col_name column_definition
- [FIRST|AFTER col_name]
- mysql> alter table orders change column ordernumber ordernumbers int(4);
- Query OK, 0 rows affected (0.06 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc orders;
- +--------------+---------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------+---------------+------+-----+---------+-------+
- | ordername | varchar(20) | YES | | NULL | |
- | createtime | date | YES | | NULL | |
- | ordermoney | decimal(10,2) | YES | | NULL | |
- | ordernumbers | int(4) | YES | | NULL | |
- +--------------+---------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
- ALTER TABLE tablename ADD [COLUMN] column_definition [FIRST | AFTER col_name]
- mysql> alter table orders add column username varchar(30);
- Query OK, 0 rows affected (0.39 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc orders;
- +-------------+---------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------------+---------------+------+-----+---------+-------+
- | ordername | varchar(20) | YES | | NULL | |
- | createtime | date | YES | | NULL | |
- | ordermoney | decimal(10,2) | YES | | NULL | |
- | ordernumber | int(2) | YES | | NULL | |
- | username | varchar(30) | YES | | NULL | |
- +-------------+---------------+------+-----+---------+-------+
- 5 rows in set (0.00 sec)
3.4、删除表列字段命令
- ALTER TABLE tablename DROP [COLUMN] col_name
例:表 orders 上删除字段 username:
- mysql> alter table orders drop column username;
- Query OK, 0 rows affected (0.53 sec)
- Records: 0 Duplicates: 0 Warnings: 0
- mysql> desc orders;
- +-------------+---------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------------+---------------+------+-----+---------+-------+
- | ordername | varchar(20) | YES | | NULL | |
- | createtime | date | YES | | NULL | |
- | ordermoney | decimal(10,2) | YES | | NULL | |
- | ordernumber | int(2) | YES | | NULL | |
- +-------------+---------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
3.5、表改名命令
- ALTER TABLE tablename RENAME [TO] new_tablename
例:表 orders 名字改为goodsorders
- mysql> alter table orders rename goodsorders;
- Query OK, 0 rows affected (0.16 sec)
- mysql> desc orders;
- ERROR 1146 (42S02): Table 'ordermanage.orders' doesn't exist
- mysql> desc goodsorders;
- +--------------+---------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +--------------+---------------+------+-----+---------+-------+
- | ordername | varchar(20) | YES | | NULL | |
- | createtime | date | YES | | NULL | |
- | ordermoney | decimal(10,2) | YES | | NULL | |
- | ordernumbers | int(4) | YES | | NULL | |
- +--------------+---------------+------+-----+---------+-------+
- 4 rows in set (0.00 sec)
4、DML 语句
插入(insert)、查询(select)、更新(update)、删除(delete)
4.1、插入记录 命令
- INSERT INTO tablename (field1,field2,……fieldn) VALUES(value1,value2,……valuesn);
例:表 goodsorders 中插入一条记录,ordername 为zhang,createtime为2021-05-12,ordermoney为100.00,ordernumbers为:1
- mysql> insert into goodsorders (ordername,createtime,ordermoney,ordernumbers) values('zhang','2021-05-12',100.00,1);
- Query OK, 1 row affected (0.03 sec)
也可以省略(field1,field2,……fieldn)这一部分
- mysql> insert into goodsorders values('zhang1','2021-05-12',1001.00,11);
- Query OK, 1 row affected (0.05 sec)
4.2、查看插入数据命令
4.2.1、查询全部
- SELECT * FROM tablename [WHERE CONDITION]
例:查看goodsorders中所有插入数据
- mysql> select * from goodsorders;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | zhang | 2021-05-12 | 100.00 | 1 |
- | zhang1 | 2021-05-12 | 1001.00 | 11 |
- +-----------+------------+------------+--------------+
- 2 rows in set (0.00 sec)
其中“*”表示要将所有的记录都选出来
4.2.2、查询不重复记录命令关键字
例:查询非goodsorders中非重复创建时间(createtime)的数据
- mysql> select * from goodsorders;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | zhang | 2021-03-11 | 50.00 | 1 |
- | li | 2020-05-12 | 70.00 | 15 |
- | li | 2020-03-12 | 70.00 | 15 |
- | li | 2020-03-11 | 70.00 | 15 |
- | li | 2021-03-11 | 70.00 | 15 |
- +-----------+------------+------------+--------------+
- 5 rows in set (0.00 sec)
- mysql> select distinct createtime from goodsorders;
- +------------+
- | createtime |
- +------------+
- | 2021-03-11 |
- | 2020-05-12 |
- | 2020-03-12 |
- | 2020-03-11 |
- +------------+
- 4 rows in set (0.00 sec)
由此可以看到,将重复的一条时间数据2021-03-11去掉了
4.2.3、多条件查询关键字
- where 后面的条件是一个字段的‘=’比较,还可以使用>、<、>=、<=、!=等比较运算符;
- 多个条件之间还可以使用 or、and 等逻辑运算符进行多条件联合查询,
例:查询非goodsorders中 ordername='li'并且createtime为2020-03-11
- mysql> select * from goodsorders where ordername='li'and createtime ='2020-03-11';
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | li | 2020-03-11 | 70.00 | 15 |
- +-----------+------------+------------+--------------+
- 1 row in set (0.00 sec)
4.2.4、排序查询命名
- SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2
- [DESC|ASC],……fieldn [DESC|ASC]]
例:把 goodsorders表中的记录按照创建时间高低进行排序显示
- mysql> select * from goodsorders order by createtime;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | li | 2020-03-11 | 70.00 | 15 |
- | li | 2020-03-12 | 70.00 | 15 |
- | li | 2020-05-12 | 70.00 | 15 |
- | zhang | 2021-03-11 | 50.00 | 1 |
- | li | 2021-03-11 | 70.00 | 15 |
- +-----------+------------+------------+--------------+
- 5 rows in set (0.01 sec)
4.2.5、显示一部分,而不是全部,指令
- SELECT ……[LIMIT offset_start,row_count]
offset_start 表示记录的起始偏移量
row_count 表示显示的行数
例如1:显示 goodsorders表中按照 createtiem 排序后的前 3 条记录:
- mysql> select * from goodsorders order by createtime limit 3;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | li | 2020-03-11 | 70.00 | 15 |
- | li | 2020-03-12 | 70.00 | 15 |
- | li | 2020-05-12 | 70.00 | 15 |
- +-----------+------------+------------+--------------+
- 3 rows in set (0.00 sec)
例如2:如果要显示 goodsorders表中按照 createtiem 排序后 从第二条记录开始,显示3条数据:
- mysql> select * from goodsorders order by createtime limit 2,3;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | li | 2020-05-12 | 70.00 | 15 |
- | zhang | 2021-03-11 | 50.00 | 1 |
- | li | 2021-03-11 | 70.00 | 15 |
- +-----------+------------+------------+--------------+
- 3 rows in set (0.00 sec)
4.2.6、统计数据,聚合指令
- SELECT [field1,field2,……fieldn] fun_name
- FROM tablename
- [WHERE where_contition]
- [GROUP BY field1,field2,……fieldn
- [WITH ROLLUP]]
- [HAVING where_contition]
参数说明:
1、fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记录数)、max(最大值)、min(最小值)
2、GROUP BY 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门就应该写在 group by 后面。
3、WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。
4、HAVING 关键字表示对分类后的结果再进行条件的过滤。
注意:having 和 where 的区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤。
例1:查询统计goodsorders表中,记录总数
4.3、更新记录命令
- UPDATE tablename SET field1=value1,field2.=value2,……fieldn=valuen [WHERE CONDITION]
例:将表 goodsorders 中ordername为zhang的订单金额(ordermoney)改为50
- mysql> update goodsorders set ordermoney=50.00 where ordername='zhang';
- Query OK, 1 row affected (0.09 sec)
- Rows matched: 1 Changed: 1 Warnings: 0
- mysql> select * from goodsorders;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | zhang | 2021-05-12 | 50.00 | 1 |
- | zhang1 | 2021-05-12 | 1001.00 | 11 |
- +-----------+------------+------------+--------------+
- 2 rows in set (0.00 sec)
4.4、删除记录命名
- DELETE FROM tablename [WHERE CONDITION]
例:将表 goodsorders 中ordername为zhang1的记录全部删除
- mysql> delete from goodsorders where ordername = 'zhang1';
- Query OK, 1 row affected (0.06 sec)
- mysql> select * from goodsorders;
- +-----------+------------+------------+--------------+
- | ordername | createtime | ordermoney | ordernumbers |
- +-----------+------------+------------+--------------+
- | zhang | 2021-05-12 | 50.00 | 1 |
- +-----------+------------+------------+--------------+
- 1 row in set (0.02 sec)
5、DCL 语句
DCL语句主要是为了管理数据库系统中的操作对象权限
5.1创建数据库用户
例:创建一个数据库用户 user1,初始密码为123,具有对 ordermanage 数据库中所有表的 SELECT/INSERT 权限:
- mysql> grant select,insert on ordermanage.* to 'user1'@'localhost' identified by '123';
- Query OK, 0 rows affected, 1 warning (0.06 sec)
- mysql> exit
- Bye
- C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -uuser1 -p123
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 82
- Server version: 5.7.17-log MySQL Community Server (GPL)
- Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | ordermanage |
- +--------------------+
- 2 rows in set (0.00 sec)
在此基础上,将此用户(user1)的insert权限进行收回
- mysql> revoke insert on ordermanage.* from 'user1'@'localhost';
- Query OK, 0 rows affected (0.02 sec)
- mysql> exit
- Bye
- C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -uuser1 -p123
- mysql: [Warning] Using a password on the command line interface can be insecure.
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 84
- Server version: 5.7.17-log MySQL Community Server (GPL)
- Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- mysql> use ordermanage;
- Database changed
- mysql> insert into member values('11','ss');
- ERROR 1142 (42000): INSERT command denied to user 'user1'@'localhost' for table 'member'
- mysql>
由此可以看出插入权限不足,插入失败
此章节完事儿嘞