简单的查询和插入的语句
简单的查询语句
如果我们想查看某个表里已经存储了哪些数据,可以用下边这个语句:
SELECT * FROM 表名;
比如我们想看看前边创建的first_table
表中有哪些数据,可以这么写:
mysql> SELECT * FROM first_table;
Empty set (0.01 sec)
mysql>
很遗憾,我们从来没有向表中插入过数据,所以查询结果显示的是Empty set
,表示什么都没查出来~
简单插入语句
MySQL
插入数据的时候是以行为单位的,语法格式如下:
INSERT INTO 表名(列1, 列2, ...) VALUES(列1的值,列2的值, ...);
也就是说我们可以在表名后边的括号中指定要插入数据的列,然后在VALUES
后边的括号中按指定的列顺序填入对应的值,我们来为first_table
表插入第一行数据:
mysql> INSERT INTO first_table(first_column, second_column) VALUES(1, 'aaa');
Query OK, 1 row affected (0.00 sec)
mysql>
这个语句的意思就是我们要向first_table
表中插入一行数据,first_column
列的值是1
,second_column
列的值是'aaa'
。看一下现在表中的数据:
mysql> SELECT * FROM first_table;
+--------------+---------------+
| first_column | second_column |
+--------------+---------------+
| 1 | aaa |
+--------------+---------------+
1 row in set (0.00 sec)
mysql>
第一行数据就插入成功了!
我们也可以只指定部分的列,没有显式指定的列的值将被设置为NULL
,NULL
的意思就是此列的值尚不确定。比如这样写:
mysql> INSERT INTO first_table(first_column) VALUES(2);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO first_table(second_column) VALUES('ccc');
Query OK, 1 row affected (0.00 sec)
mysql>
这两条语句的意思就是:
-
第一条插入语句我们只指定了
first_column
列的值是2,而没有指定second_column
的值,所以second_column
的值就是NULL
。 -
第二条插入语句我们只指定了
second_column
的值是'ccc'
,而没有指定first_column
的值,所以first_column
的值就是NULL
。
执行完这两条语句后,再看一下现在表中的数据:
mysql> SELECT * FROM first_table;
+--------------+---------------+
| first_column | second_column |
+--------------+---------------+
| 1 | aaa |
| 2 | NULL |
| NULL | ccc |
+--------------+---------------+
3 rows in set (0.00 sec)
mysql>
批量插入
每插入一行数据写一条语句也不是不行,但是对人来说太烦了,而且每插入一行数据就向服务器提交一个请求远没有一次把所有插入的数据提交给服务器效率高,所以MySQL
为我们提供了批量插入记录的语句:
INSERT INTO 表名(列1,列2, ...) VAULES(列1的值,列2的值, ...), (列1的值,列2的值, ...), (列1的值,列2的值, ...), ...;
也就是在原来的单条插入语句后边多写几条记录的内容,用逗号分隔开就好了,举个例子:
mysql> INSERT INTO first_table(first_column, second_column) VALUES(4, 'ddd'), (5, 'eee'), (6, 'fff');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM first_table;
+--------------+---------------+
| first_column | second_column |
+--------------+---------------+
| 1 | aaa |
| 2 | NULL |
| NULL | ccc |
| 4 | ddd |
| 5 | eee |
| 6 | fff |
+--------------+---------------+
6 rows in set (0.01 sec)
mysql>
可以看到3行记录就插入成功了!
列的属性
我们在上一章唠叨表结构的时候说表中的每个列都可以有一些属性,至于这些属性是什么以及怎么在创建表的时候把它们定义出来就是本章接下来的内容哈。不过我们之后还会用到first_table
表做示例,所以先把该表删掉:
mysql> DROP TABLE first_table;
Query OK, 0 rows affected (0.01 sec)
默认值
我们刚说过在书写INSERT
语句插入记录的时候可以只指定部分的列,那些没有被显式指定的列的值将被设置为NULL
,换一种说法就是列的默认值为NULL
,NULL
的含义是这个列的值还没有被设置。如果我们不想让默认值为NULL
,而是设置成某个有意义的值,可以在定义列的时候给该列增加一个DEFAULT
属性,就像这样:
列名 列的类型 DEFAULT 默认值
比如我们把first_table
的second_column
列的默认值指定为'abc'
,创建一下这个表:
mysql> CREATE TABLE first_table (
-> first_column INT,
-> second_column VARCHAR(100) DEFAULT 'abc'
-> );
Query OK, 0 rows affected (0.02 sec)
mysql>
然后插入一条数据后看看默认值是不是起了作用:
mysql> INSERT INTO first_table(first_column) VALUES(1);
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM first_table;
+--------------+---------------+
| first_column | second_column |
+--------------+---------------+
| 1 | abc |
+--------------+---------------+
1 row in set (0.00 sec)
mysql>
我们的插入语句并没有指定second_column
的值,但是可以看到插入结果是按照我们规定的默认值'abc'
来设置的。
如果我们不设置默认值,其实就相当于指定的默认值为NULL
,比如