MySQL--表的操作

本文详细介绍了MySQL中关于表的操作,包括命名规则、表的创建、删除和更新,以及select语句的基础知识,如列的查询、别名设置、常数查询、去重和条件选择。还涉及到算术运算符、比较运算符、逻辑运算符的使用,并举例说明了注释的书写方法。
摘要由CSDN通过智能技术生成

表中的数据库对象包括列、索引、触发器。在创建表时,必须指定列的名字和数据类型。
表的操作包括创建表、查看表、删除表、修改表。
本文所用的例子和语法均参考《SQL基础教程》第2版。

1 命名规则

在数据库名称、表名、列名的命名中,只可以出现1.半角英文字母 2.半角数字 3.下划线,且名称必须以半角英文字母开头。
在同一个数据库中,不能出现相同的表,在同一个表中,列名也不可相同。

2 表的创建

在创建表之前,首先要建立一个数据库,在这里,我们首先先建立一个名为shop的数据库,创建方法如下(没有区分大小写):

mysql> create database shop;

接着,我们就可以创建表了,通常,创建表的create table语句如下:
create table <表名>
(<列名1> <数据类型> <该列所需约束>,
<列名2> <数据类型> <该列所需约束>,
<列名3> <数据类型> <该列所需约束>,
<列名4> <数据类型> <该列所需约束>,

<该表的约束1>,<该表的约束2>,……);

需要注意的是,数据类型是创建表时必须要指定的,约束有无都可以,约束也可以在定义列的时候设置,也可以在语句的末尾进行设置,但是 NOT NULL 约束只能以列为单位进行设置。
接下来,我们创建一个名为Product的表。

mysql> create table Product
   -> (product_id char(4) not null,
   -> product_name varchar(100) not null,
   -> product_type varchar(32) not null,
   -> sale_price integer  ,
   -> purchase_price integer    ,
   -> regist_date date    ,
   -> primary key (product_id));
Query OK, 0 rows affected (0.22 sec)        

primary key (product_id)是用来给product_id设置主键约束的,即如果把 product_id列指定为主键,就可以通过该列取出特定的数据商品了。但若在product_id中输入了重复数据,就无法取出唯一的特定数据了。

3 表的删除和更新

表的删除

删除的表是无法恢复的,由于后续还要用到Product表,故这里只将语句写出 。

drop table <表名>;

表定义的更新

创建了表之后,如果发现少了列数,可以用alter table语句进行列的添加和删除。其中,添加的语句为:

alter table <表名> add column <列的定义>;
我们向Product表中添加product_name_pinyin列,该列可以存储100位的可变长字符串。

mysql> alter table Product add column product_name_pinyin varchar(100);

删除列的语句为:
alter tabble <表名> drop column <列名>;
接下来,我们删除刚刚添加的列。

mysql> alter table Product drop column product_name_pinyin;

需要注意的是,alter table 语句和drop table语句一样,执行之后都无法恢复。

向Product表中插入数据

mysql> start transaction;
mysql> insert into Product values('0001','T恤衫','衣服',1000,500,'2009-09-20'),
    -> ('0002','打孔器','办公用品',500,320,'2009-09-11'),
    -> ('0003','运动T恤','衣服',4000,2800,null),
    -> ('0004','菜刀','厨房用具',3000,2800,'2009-09-20'),
    -> ('0005','高压锅','厨房用具',6800,5000,'2009-01-15'),
    -> ('0006','叉子','厨房用具',500,null,'2009-09-20'),
    -> ('0007','擦菜板','厨房用具',880,790,'2008-04-28'),
    -> ('0008','圆珠笔','办公用品',100,null,'2009-11-11');
Query OK, 7 rows affected (0.00 sec)
Records: 7  Duplicates: 0  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.02 sec)    

开头的 start transaction语句是开始插入行的指令语句,结尾的commit语句是确定插入行的指令语句。
若想要查看表中的全部数据,则可用

mysql> select * from Product;

结果为

+------------+--------------+--------------+------------+----------------+-------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
+------------+--------------+--------------+------------+----------------+-------------+
| 0001       | T恤衫        | 衣服         |       1000 |            500 | 2009-09-20  |
| 0002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-11  |
| 0003       | 运动T恤      | 衣服         |       4000 |           2800 | NULL        |
| 0004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-20  |
| 0005       | 高压锅       | 厨房用具     |       6800 |           5000 | 2009-01-15  |
| 0006       | 叉子         | 厨房用具     |        500 |           NULL | 2009-09-20  |
| 0007       | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-28  |
| 0008       | 圆珠笔       | 办公用品     |        100 |           NULL | 2009-11-11  |
+------------+--------------+--------------+------------+----------------+-------------+

表名的修改

在MySQL中,表明的修改的语句为:

rename table <变更前的名称> to <变更后的名称>;

mysql> rename table Product to produc;
Query OK, 0 rows affected (0.11 sec)

4 select语句基础

列的查询

基本的select语句如下:

select <列名>,……
from <表名>;

接下来,我们尝试从Product表中查询product_id、product_name、purchase_price三列。

mysql> select product_id,product_name,purchase_price from Product;
+------------+--------------+----------------+
| product_id | product_name | purchase_price |
+------------+--------------+----------------+
| 0001       | T恤衫        |            500 |
| 0002       | 打孔器       |            320 |
| 0003       | 运动T恤      |           2800 |
| 0004       | 菜刀         |           2800 |
| 0005       | 高压锅       |           5000 |
| 0006       | 叉子         |           NULL |
| 0007       | 擦菜板       |            790 |
| 0008       | 圆珠笔       |           NULL |
+------------+--------------+----------------+
8 rows in set (0.00 sec)

查询中列的顺序与select语句中的顺序是相同的。
若想要查出表中的所有列,可用*,表示全部的意思,但是若使用星号,则列的显示顺序就是表中的顺序,不能改变。

mysql> select * from product;
+------------+--------------+--------------+------------+----------------+-------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
+------------+--------------+--------------+------------+----------------+-------------+
| 0001       | T恤衫        | 衣服         |       1000 |            500 | 2009-09-20  |
| 0002       | 打孔器       | 办公用品     |        500 |            320 | 2009-09-11  |
| 0003       | 运动T恤      | 衣服         |       4000 |           2800 | NULL        |
| 0004       | 菜刀         | 厨房用具     |       3000 |           2800 | 2009-09-20  |
| 0005       | 高压锅       | 厨房用具     |       6800 |           5000 | 2009-01-15  |
| 0006       | 叉子         | 厨房用具     |        500 |           NULL | 2009-09-20  |
| 0007       | 擦菜板       | 厨房用具     |        880 |            790 | 2008-04-28  |
| 0008       | 圆珠笔       | 办公用品     |        100 |           NULL | 2009-11-11  |
+------------+--------------+--------------+------------+----------------+-------------+
8 rows in set (0.00 sec)

为列设别名(使用as)

mysql> select product_id as id,product_name as name,
    -> purchase_price as price from Product;
+------+------------+-------+
| id   | name       | price |
+------+------------+-------+
| 0001 | T恤衫      |   500 |
| 0002 | 打孔器     |   320 |
| 0003 | 运动T恤    |  2800 |
| 0004 | 菜刀       |  2800 |
| 0005 | 高压锅     |  5000 |
| 0006 | 叉子       |  NULL |
| 0007 | 擦菜板     |   790 |
| 0008 | 圆珠笔     |  NULL |
+------+------------+-------+
8 rows in set (0.00 sec)

但是,当用 select * from product 查询全部时,列名还是原来的列名。
起别名时可是使用中文,需要用双引号括起来(不能为单引号

mysql> select product_id as "商品编号",product_name as "商品名称",purchase_price as "进货单价" from product;
+--------------+--------------+--------------+
| 商品编号     | 商品名称     | 进货单价     |
+--------------+--------------+--------------+
| 0001         | T恤衫        |          500 |
| 0002         | 打孔器       |          320 |
| 0003         | 运动T恤      |         2800 |
| 0004         | 菜刀         |         2800 |
| 0005         | 高压锅       |         5000 |
| 0006         | 叉子         |         NULL |
| 0007         | 擦菜板       |          790 |
| 0008         | 圆珠笔       |         NULL |
+--------------+--------------+--------------+

常数的查询

mysql> select '商品' as string,38 as number,'2009-02-24' as date,product_id,product_name from product;
+--------+--------+------------+------------+--------------+
| string | number | date       | product_id | product_name |
+--------+--------+------------+------------+--------------+
| 商品   |     38 | 2009-02-24 | 0001
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值