在前面两篇博客已经说过数据库表相关的MySQL语句,点击MySQL学习之路-创建、使用库相关 和 MySQL学习之路_数据的组织方式-表传送过去查看。
插入
在表结构创建好之后,下一步就是往里面装数据了,往表里面装数据使用INSERT INTO
语句完成。
INSERT INTO 表名 (字段) VALUES (值);
示例代码:
-- 创建一个数据库
CREATE DATABASE db_tb1;
-- 使用刚刚创建的数据库
USE DATABASE example;
-- 在当前数据库下创建表,确定表的字段
-- 把id字段设置为主键和自动增加
CREATE TABLE example
(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10) NOT NULL,
submission_date DATE NOT NULL);
-- 往表插入数据
INSERT INTO example (name, submission_date) VALUES ("张三", NOW());
INSERT INTO example (name, submission_date) VALUES ('李四', "2016-11-10 9:55:56");
上述示例代码都有注释,很容易懂,就不多解释。
字段id
设置为AUTO_INCREMENT
的意思是,每插入一个数据,它的值就自动往上递增。
在插入数据里,插入列”’submission_date”’的是NOW()''',这是一个函数,代表当前时间,后一条插入语句的是一个代表日期的字符串,插入后,会被解析为'''DATE'''类型。 值得注意的是插入的值必须和写出的字段属性顺序一致,否则会发生错误,譬如
INSERT INTO example (name, submission_date) VALUES (“张三”, NOW());,插入时不能这样
INSERT INTO example (name, submission_date) VALUES (NOW(), ‘张三’)
,这样是错的。
AUTO_INCREMENT
插入数据时,如果只插入了部分列数据,有部分没有指定,没有指定的列又不是,那么它的值就是
NULL“`。
查询行
在完成数据的插入后,还要查看数据是否已经插入,可以使用SELECT
语句。
SELECT 列名 FROM 表名;
示例代码
SELECT name, submission_date FORM example;
上述示例代码查询表example
两个字段name
、submission_date
的数据,如果要查询全部的数据,那么把列名改为‘*’这个通配符,即可查询全部数据。
SELECT * FROM example;
也可以查询多张表的数据,多张表使用逗号隔开可以了。
修改数据
修改数据使用UPDATE
语句。
UPDATE 表名 SET 修改列的值 WHERE 列的值;
SET
语句指定要修改的列的值,WHERE
限定要修改的列。
UPDATE example SET name='张思' WHERE id=1;
上面语句意思就是把表example
字段id=1
的行的name
字段值设置为张思
。如果没有WHERE
字句,那么语句SET
后面列的所有的值都会被改为设置的值。
需要走注意的是,UPDATE
语句只能更改数据,要更改列属性,譬如列名,列的数据类型等,请使用ALTER TABLE
语句。
删除行(记录)
在表中删除数据时,使用DELETE
语句。
DELETE FROM 表名 WHERE 指定列值
示例代码:
DELETE FROM example WHERE name='张思';
删除example
中name
字段为张思的记录,同样的,如果没有指定WHERE
子句,那么会删除表中所有记录。需要注意的是,DELETE
语句只能删除表记录,不能删除表,删除表请用ALTER TABLE DROP 表名
语句。
在删除一个表中所有记录时,除了可以使用不带WHERE
子句的DELETE
语句,还可以使用TRUNCATE
语句。
TRUNCATE TABLE 表名;
上述语句删除指定表的所有记录。
TRUNCATE
和DELETE
的区别就是DELETE
语句在删除记录时,是一条一条的删除,而TRUNCATE
就比较粗暴,直接把整个表摧毁,再重建表结构来达到目的。这样做有什么好处呢?我觉得好处是显而易见的——关乎性能。如果一个数据库表内有上千万条记录,DELETE
和TRUNCATE
中,很明显选择后者,前者要逐条逐条去删除,而后者,直接摧毁表,在重建表结构,OK!完了,就这么简单。所以,删除整个表的时候,一般选择TRUNCATE
。
由于我自己也刚学,所以这里就只做个简单的介绍,但是,也难免有疏漏或者不严谨的地方,如有错误,敬请指正。