mysql数据库SQL语句大全(上)

一、数据库操作

  1. 创建数据库

sql 复制代码
CREATE DATABASE database_name;

创建一个名为 database_name 的数据库。
3. 1、删除数据

sql 复制代码
DROP DATABASE database_name;

删除一个名为 database_name 的数据库。
5. 2、选择数据库

sql 复制代码
USE database_name;
  1. 选择一个名为 database_name 的数据库进行操作。

  2. 二、表操作

  3. 1、创建表

```sql
CREATE TABLE table_name (
    column1 datatype [constraints],
    column2 datatype [constraints],
    ...
);
```

创建一个名为 `table_name` 的表。

示例:

```sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

2、删除表
```sql
DROP TABLE table_name;
```

删除一个名为 `table_name` 的表。
  1. 3、修改表

  2. 添加列:

```sql
ALTER TABLE table_name ADD column_name datatype [constraints];
```

删除列:
```sql
ALTER TABLE table_name DROP COLUMN column_name;
```

修改列:
```sql
ALTER TABLE table_name MODIFY COLUMN column_name datatype [constraints];
```

4、重命名表
```sql
ALTER TABLE old_table_name RENAME TO new_table_name;
```

三、数据操作
  1. 1、插入数据

```sql
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
```

示例:
```sql
INSERT INTO users (username, email) VALUES ('john_doe', 'john@example.com');
```

2、查询数据
```sql
SELECT column1, column2, ... FROM table_name [WHERE condition] [ORDER BY column1, column2, ...] [LIMIT number];
```

示例:
```sql
SELECT id, username, email FROM users WHERE username = 'john_doe';
```

3、更新数据
```sql
UPDATE table_name SET column1 = value1, column2 = value2, ... [WHERE condition];
```

示例:
```sql
UPDATE users SET email = 'new_email@example.com' WHERE username = 'john_doe';
```

4、删除数据
```sql
DELETE FROM table_name WHERE condition;
```

示例:
```sql
DELETE FROM users WHERE username = 'john_doe';
```

四、高级查询
  1. 1、连接查询

  2. 内连接:

    sql 复制代码
    SELECT columns FROM table1 INNER JOIN table2 ON table1.column = table2.column;

    左连接:

```sql
SELECT columns FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
```

右连接:

```sql
SELECT columns FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
```

2、子查询

```sql
SELECT columns FROM table WHERE column IN (SELECT column FROM table WHERE condition);
```

示例:

```sql
SELECT username FROM users WHERE id IN (SELECT user_id FROM orders WHERE amount > 100);
```

3、分组和聚合
  1. 分组:

    sql 复制代码
    SELECT column1, COUNT(*) FROM table GROUP BY column1;

    聚合函数:

    sql 复制代码
    SELECT COUNT(column), SUM(column), AVG(column), MAX(column), MIN(column) FROM table;

    五、索引和约束

  2. 1、创建索引

```sql
CREATE INDEX index_name ON table_name (column1, column2, ...);
```

示例:

```sql
CREATE INDEX idx_username ON users (username);
```

**唯一索引**:不允许索引列中有重复的值。

```sql
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
```

示例:

```sql
CREATE UNIQUE INDEX idx_email ON users (email);
```

2、删除索引

```sql
DROP INDEX index_name ON table_name;
```

示例:

```sql
DROP INDEX idx_username ON users;
```

3、**查看索引**
  1. 使用 SHOW INDEX 命令可以查看表的索引信息。

```sql
SHOW INDEX FROM table_name;
```

示例:

```sql
SHOW INDEX FROM users;
```

4、**全文索引**
  1. 全文索引主要用于文本搜索,可以对大量文本进行高效的关键词搜索。

```sql
CREATE FULLTEXT INDEX index_name ON table_name (column1, column2, ...);
```

示例:

```sql
CREATE FULLTEXT INDEX idx_content ON articles (content);
```

5、**空间索引**
  1. 空间索引用于地理数据的查询,需要 MyISAMInnoDB 存储引擎支持。

    python 复制代码
    CREATE SPATIAL INDEX index_name ON table_name (geometry_column);

    示例:

    sql 复制代码
    CREATE SPATIAL INDEX idx_location ON places (location);

    6、主键约束

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype PRIMARY KEY,
        column2 datatype
    );

    示例:

    sql 复制代码
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL
    );

    如果在创建表之后添加主键:

    sql 复制代码
    ALTER TABLE table_name ADD PRIMARY KEY (column1, column2, ...);

    示例:

    sql 复制代码
    ALTER TABLE users ADD PRIMARY KEY (id);

    7、外键约束

  2. 外键约束用于维护表之间的数据一致性。它确保一个表中的值对应另一个表中的值。

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype,
        column2 datatype,
        CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES other_table (other_column)
    );

    示例:

    sql 复制代码
    CREATE TABLE orders (
        order_id INT AUTO_INCREMENT PRIMARY KEY,
        user_id INT,
        amount DECIMAL(10, 2),
        CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id)
    );

    如果在创建表之后添加外键:

    sql 复制代码
    ALTER TABLE table_name ADD CONSTRAINT fk_name FOREIGN KEY (column) REFERENCES other_table (other_column);

    示例:

    sql 复制代码
    ALTER TABLE orders ADD CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id);

    8、唯一约束

  3. 唯一约束确保列中的所有值都是唯一的。

```sql
CREATE TABLE table_name (
    column1 datatype UNIQUE,
    column2 datatype
);
```

示例:

```sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);
```

如果在创建表之后添加唯一约束:

```sql
ALTER TABLE table_name ADD UNIQUE (column);
```

**9、检查约束**
  1. 检查约束用于确保列中的值符合指定的条件。MySQL从8.0.16开始支持CHECK约束。

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype,
        column2 datatype,
        CONSTRAINT chk_name CHECK (condition)
    );

    示例:

    sql 复制代码
    CREATE TABLE products (
        product_id INT PRIMARY KEY,
        price DECIMAL(10, 2),
        CONSTRAINT chk_price CHECK (price > 0)
    );

    如果在创建表之后添加检查约束:

    sql 复制代码
    ALTER TABLE table_name ADD CONSTRAINT chk_name CHECK (condition);

    示例:

    sql 复制代码
    ALTER TABLE products ADD CONSTRAINT chk_price CHECK (price > 0);

    10、默认约束

  2. 默认约束用于在没有提供值时,为列分配默认值。

    sql 复制代码
    CREATE TABLE table_name (
        column1 datatype DEFAULT default_value,
        column2 datatype
    );

    示例:

    sql 复制代码
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );

    如果在创建表之后添加默认约束:

    sql 复制代码
    ALTER TABLE table_name ALTER COLUMN column SET DEFAULT default_value;

    示例:

    sql 复制代码
    ALTER TABLE users ALTER COLUMN created_at SET DEFAULT CURRENT_TIMESTAMP;

    参考例子

    综合使用索引和约束可以提升查询效率和数据完整性。以下是一个综合示例:

    sql 复制代码
    -- 创建数据库
    CREATE DATABASE company;
    
    -- 选择数据库
    USE company;
    
    -- 创建员工表
    CREATE TABLE employees (
        id INT AUTO_INCREMENT PRIMARY KEY,               -- 主键约束
        name VARCHAR(100) NOT NULL,
        position VARCHAR(50),
        salary DECIMAL(10, 2) CHECK (salary > 0),        -- 检查约束
        email VARCHAR(100) UNIQUE,                       -- 唯一约束
        hire_date DATE DEFAULT CURRENT_DATE              -- 默认约束
    );
    
    -- 创建部门表
    CREATE TABLE departments (
        dept_id INT AUTO_INCREMENT PRIMARY KEY,
        dept_name VARCHAR(100) UNIQUE
    );
    
    -- 创建职位表,包含外键约束
    CREATE TABLE jobs (
        job_id INT AUTO_INCREMENT PRIMARY KEY,
        job_title VARCHAR(100),
        min_salary DECIMAL(10, 2),
        max_salary DECIMAL(10, 2),
        dept_id INT,
        CONSTRAINT fk_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
    );
    
    -- 创建索引
    CREATE INDEX idx_emp_name ON employees (name);
    
    -- 插入数据
    INSERT INTO departments (dept_name) VALUES ('HR'), ('IT'), ('Finance');
    INSERT INTO employees (name, position, salary, email, hire_date) VALUES ('Alice', 'Manager', 75000, 'alice@example.com', '2020-01-15');
    INSERT INTO employees (name, position, salary, email) VALUES ('Bob', 'Developer', 60000, 'bob@example.com');
    INSERT INTO jobs (job_title, min_salary, max_salary, dept_id) VALUES ('Software Engineer', 50000, 100000, 2);
    
    -- 查询数据
    SELECT * FROM employees;
    SELECT * FROM jobs WHERE dept_id = 2;
相关推荐
tatasix16 分钟前
MySQL UPDATE语句执行链路解析
数据库·mysql
南城花随雪。29 分钟前
硬盘(HDD)与固态硬盘(SSD)详细解读
数据库
儿时可乖了30 分钟前
使用 Java 操作 SQLite 数据库
java·数据库·sqlite
懒是一种态度32 分钟前
Golang 调用 mongodb 的函数
数据库·mongodb·golang
天海华兮35 分钟前
mysql 去重 补全 取出重复 变量 函数 和存储过程
数据库·mysql
gma9991 小时前
Etcd 框架
数据库·etcd
爱吃青椒不爱吃西红柿‍️2 小时前
华为ASP与CSP是什么?
服务器·前端·数据库
Yz98762 小时前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
武子康2 小时前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康2 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql