一直都是用MySQL可视化工具,几乎没碰过建库、表等语句了。在京东上线SQL必须在Archery平台通过,当前DB库字符集使用GB2312导致很多SQL无法通过Archery审计。但SQL知识实属遗忘了不少。趁机补一补SQL吧。

库语句

创建数据库

-- 数据库配置文件default-character-set是utf8_mb3,则会导致创建的表是utf8mb3。我们无法人为控制,只能建库完毕后执行修改库字符集或者建库前修改MySQL配置
CREATE DATABASE IF NOT EXISTS `school` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 

修改数据库的字符集

-- 指定库的字符集
ALTER DATABASE `school` CHARACTER SET utf8mb4

指定库排序规则

-- 指定库的排序规则
ALTER DATABASE `school` COLLATE 'utf8mb4_bin'

当前库状态语句

-- 查看建表语句
SHOW CREATE DATABASE `school`

删除数据库

-- 删除数据库
DROP DATABASE `school表名错误就无法删除了`;

Navicat编辑数据库时执行的SQL

查看库的字符集

-- 查看库的字符集,这是Navicat点击"编辑数据库"执行的SQL。直接执行就行,没有参数
SELECT @@character_set_database, @@collation_database

事务

开启事务

START TRANSACTION;

提交事务

COMMIT;

表语句

建表

-- 无注释版
CREATE TABLE my_table (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  age INT,
  email VARCHAR(100) UNIQUE,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);


-- 带有注释的
CREATE TABLE my_table (
  id INT AUTO_INCREMENT PRIMARY KEY COMMENT '唯一标识符',
  name VARCHAR(50) NOT NULL COMMENT '姓名',
  age INT COMMENT '年龄',
  email VARCHAR(100) UNIQUE COMMENT '电子邮件',
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) COMMENT '示例表,用于存储用户信息';

默认值、默认时间、字段字符集、字段排序方式、索引、联合索引、注释、

查看X表的创建信息

SHOW CREATE TABLE my_table;

修改表字符集、排序规则

-- 修改名为 "my_table" 的表的字符集为 utf8mb4,排序规则为 utf8mb4_general_ci:
ALTER TABLE my_table
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

截断表

truncate TABLE_NAME

删除表

DROP TABLE IF EXISTS orders;

添加字段

-- 在现有字段 "existing_column" 之后添加一个名为 "new_column" 的 INT 类型字段。
ALTER TABLE my_table ADD new_column INT AFTER existing_column;

修改字段

-- 为 "my_column" 的字段的注释修改为 "This is a new comment"。
ALTER TABLE my_table
MODIFY COLUMN my_column INT COMMENT 'This is a new comment';

删除字段

ALTER TABLE my_table DROP COLUMN column_name;

添加索引

-- 添加单个索引
CREATE INDEX idx_name ON my_table (my_column);

-- 添加联合索引
ALTER TABLE table_name ADD INDEX index_name (column1, column2, ...);

查看索引

SHOW INDEX FROM my_table;
-- 或者
SHOW INDEXES FROM my_table;

删除索引

ALTER TABLE table_name DROP INDEX index_name;

修改索引

-- 先删除索引,再添加索引
ALTER TABLE my_table DROP INDEX idx_name;
ALTER TABLE my_table ADD INDEX idx_name (new_column1, new_column2);

插入数据

INSERT INTO aa_seller(`id`, `order_id`) VALUE (10000, 10000);

INSERT INTO aa_seller(`id`, `order_id`) VALUES (10001, 10001);

批量插入数据

INSERT INTO aa_seller(`id`, `order_id`) VALUES (10003, 10003),(10004, 10004);

插入数据如果存在就更新 ON DUPLICATE KEY UPDATE

INSERT INTO aa_seller(`id`, `order_id`) VALUE (10000, 10000) ON DUPLICATE KEY UPDATE `order_id` = `order_id` + 1;

INSERT INTO aa_seller(`id`, `order_id`) VALUE (10000, 10000),(10001,10001) ON DUPLICATE KEY UPDATE `order_id` = `order_id` + 1;
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤