SQL 语法

First Post:

Last Update:

SQL: 结构化查询语句 (Structured Query Language)


DDL 数据定义语句

DDL: 数据定义语句 (Data Definition Language)


  • 建库
1
2
-- 创建 example 库
CREATE DATABASE example;
  • 删库
1
DROP DATABASE example;
  • 其他
1
2
3
4
5
-- 进入example库
USE example;

-- 查询当前库
SELECT DATABASE();
1
2
3
-- 指定字符集
-- COLLATE 设置排序规则
CREATE DATABASE example CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

  • 建表
1
2
3
4
CREATE TABLE example;

-- 查看表
SHOW TABLES;

实例:

要注意的是, 枚举型数据 ENUM 只允许插入字母,下划线和数字的字符组合
因此, 别想着在这里默认插入中文字符

1
2
3
4
5
6
7
CREATE TABLE example.users(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(10) NOT NULL,
gender ENUM("male", "female") NOT NULL DEFAULT "male",
age INT(12) NOT NULl,
PRIMARY KEY (id)
);

DML

DML: 数据操作语句 (Data Manipulation Language)

数据添加

1
2
3
4
5
-- 部分插入数据
INSERT INTO example.table (key1, key2, ...) VALUES (value1, value2, ...);

-- 完整插入数据
INSERT INTO example.table VALUES ( value1, value2, ...);

数据删除

注意, 如果省略了 WHERE, 整个表的记录都会被删除

1
2
DELETE FROM example.table
WHERE id = 0;

数据更新(修改)

  • 整个记录更新

一定要指定 WHERE 否则所有记录都将更新

1
UPDATE table_1 SET colum_1 = data_2  WHERE colum_1 = data_1;

DQL

DQL: Data Query Language

特征是以 WHERE 开头


IN 语句

这一语句是用于过滤数据

假设我们有一个名为表 test, 有 namebender 两个字段
我们只想查询性别为女的行(记录)就可以用到以下语句

1
SELECT name,bender FROM test WHERE sex IN ("male")

多表联合查询

INNER JOIN 内连接

1
2
3
SELECT colum_1,cloum_2 FROM table_1
INNER JOIN table2
ON table_1.colum_1 = table_2.colum_3

分组 GROUP By

1


DCL

DCL: Data Control Language

1
2
3
4
5
6
7
CREATE TABLE students (
sid INT NOT NULL AUTO_INCREMENT,
stuname VARCHAR(20) NOT NULL,
stunum VARCHAR(20) NOT NULL,
stuage INT,
PRIMARY KEY (sid)
);

其他

修改 root 账户

进入 mysql 库, 修改 user

1
2
3
4
5
6
-- 调用加密函数
-- 建议使用
UPDATE mysql.user SET authentication_string=password("密码") WHERE user="root"

-- 未加密 密码
UPDATE mysql.user SET authentication_string="密码" WHERE user="root";