初学者快速使用SQL(一)

概述

SQLStructured Query Language,被设计用于关系型数据库管理系统(RDBMSrelational database management systems)的一种语言。

P.S.:译自SQL for Beginners1

基本操作

DATABASE

CREATE DATABASE

创建一个数据库

1
CREATE DATABASE my_first_db;

SHOW DATABASES

获取所有的数据库列表

1
SHOW DATABASES;

DROP DATABASE

删除一个存在的数据库,在输入此命令后会直接删除,不会提示

1
DROP DATABASE my_first_db;

USE

选择一个数据库,不需要在查询语句后加上;

1
USE my_first_db

Database Table

数据库表可以存放结构化数据,也可对数据进行增加读取更新删除操作

CREATE TABLE

创建数据库表,可以使用多行和缩进来完成创建

1
2
3
4
CREATE TABLE users {
username VARCHAR(20),
create_date DATE
};
  1. PRIMARY KEY:用于区分表里的每一行数据
  2. AUTO_INCREMENT:每次添加新行时自动增加一个新的ID数

    1
    2
    3
    4
    5
    CREATE TABLE users {
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(20),
    create_date DATE
    };
  3. SHOW TABLES:显示当前数据库里的所有表

    1
    SHOW TABLES;
  4. EXPLAIN:查看一个存在的数据库表的结构

    1
    EXPLAIN users;
  5. DROP TABLE:删除一个数据库表,没有任何提示

    1
    DROP TABLE users;
  6. ALTER TABLE:修改一个数据库表的结构

    • Add a column:添加一列

      1
      2
      3
      ALTER TABLE users
      ADD email VARCHAR(100)
      AFTER username;
    • Remove a column:移除一列,没有任何提示

      1
      ALTER TABLE users DROP email;
    • Modify a column:修改一列,即修改该列的属性

      1
      2
      3
      ALTER TABLE users
      CHANGE username
      user_name VARCHAR(30);

INSERT

添加一些数据到数据库表里

  1. VALUES:存放属性值的列表,使用,隔开;注意主键值为NULL的情况,该值可以自动生成,因为该列设置为AUTO_INCREMENT

    1
    2
    3
    4
    5
    6
    INSERT INTO users VALUES (
    NULL,
    ‘johndoe’,
    ‘john@doe.com’,
    2009-12-14
    );
  2. Alternate Syntax:使用SET关键字代替VALUES;注意一列可以被忽略,并且每列必须通过列名被引用

    1
    2
    3
    4
    INSERT INTO users SET
    user_name = ‘nettuts’,
    email = ‘nettuts@gmail.com’,
    create_date = ‘2009-12-15
  3. Alternate Syntax 2:每一列通过列名被引用,可以指定任意的顺序

    1
    2
    INSERT INTO users (email, user_name, created_date)
    VALUES (‘foo@bar.com’, ‘foobar’, ‘2009-12-16’);
  4. LAST_INSERT_ID():获取当前会话里被插入最后一行的ID

    1
    SELECT LAST_INSERT_ID();
  5. NOW():返回当前的日期

    1
    2
    3
    4
    INSERT INTO users SET
    create_date = NOW(),
    user_name = ‘batman’,
    email = ‘bat@man.com’;

SELECT

从一个数据库表里读取数据

  1. Asterisk(*):从数据库表里获取所有列的数据

    1
    SELECT * FROM users;
  2. WHERE:筛选出符合条件的某些行数据,如=>=<=等条件

    1
    SELECT email FROM users WHERE user_name = ‘nettuts’;
  3. AND and OR:组合筛选的条件

    1
    2
    SELECT * FROM users WHERE
    user_id = 1 OR user_name = ‘nettuts’;
  4. IN():用于匹配多个值

    1
    2
    SELECT * FROM users WHERE
    create_date IN (‘2009-12-15’, ‘2009-12-16’);
  5. LIKE:通配符(%标记)查找

    1
    2
    SELECT * FROM users WHERE
    email LIKE ‘%tuts%’;
  6. ORDER BY:获取指定顺序的结果,如增序(ASC)、降序(DESC)等

    1
    2
    SELECT * FROM users
    ORDER BY create_date;
  7. LIMIT … OFFSET …:限制返回结果的数目,如LIMIT 2表示获取前两条结果,LIMIT 1 OFFSET 2表示在前两条结果后获取一条结果,LIMIT2, 1表示在前一条结果后获取两条结果

    1
    SELECT * FROM users LIMIT 2;
    1
    SELECT * FROM users LIMIT 1 OFFSET 2;
    1
    SELECT * FROM users LIMIT 2, 1;

UPDATE

更新数据库表里的数据,可以结合WHERELIMIT语句

1
2
3
4
UPDATE users SET
email = ‘changed@gmail.cm’,
user_name = ‘barfoo’,
WHERE user_name = ‘foobar’;
1
2
UPDATE users SET create_date = ‘2009-12-01
WHERE create_date = ‘2009-12-14LIMIT 1;

DELETE

结合WHERE语句来删除数据库表里的数据

1
DELETE FROM users WHERE user_name = ‘batman’;

通常使用TRUNCATE更有效,可以重置AUTO_INCREMENT数,即一个新行的ID值为1,而DELETE会继续计数

1
TRUNCATE TABLE users;

转移字符和特殊单词

转义字符串

某些字符需要被转义,可以使用\来实现

特殊单词

因MySQL有很多如SELECTUPDATE等特殊单词,可以通过` 来避免冲突