數(shù)據(jù)庫中update與delete使用表別名的深入研究
總結
Update
| SQL語句示例 | Oracle | SQLite | PostgreSQL | MYSQL & mariadb |
|---|---|---|---|---|
UPDATE users as a SET a.age = 111 WHERE a.name = 'Alice'; | 報錯 | 報錯 | 報錯 | 正常執(zhí)行 |
UPDATE users as a SET a.age = 111 WHERE name = 'Alice'; | 報錯 | 報錯 | 報錯 | 正常執(zhí)行 |
UPDATE users as a SET age = 111 WHERE a.name = 'Alice'; | 報錯 | 正常執(zhí)行 | 正常執(zhí)行 | 正常執(zhí)行 |
UPDATE users as a SET age = 111 WHERE name = 'Alice'; | 報錯 | 正常執(zhí)行 | 正常執(zhí)行 | 正常執(zhí)行 |
Delete
| SQL語句示例 | Oracle | SQLite | PostgreSQL | MYSQL & mariadb |
|---|---|---|---|---|
delete from users as a WHERE a.name = 'Alice'; | 報錯 | 報錯 | 報錯 | 報錯 |
delete from users as a WHERE name = 'Alice'; | 報錯 | 報錯 | 報錯 | 報錯 |
1 Update
1.1 測試用例UPDATE users as a SET a.age = 111 WHERE a.name = 'Alice';
UPDATE users as a SET a.age = 111 WHERE a.name = 'Alice';
CREATE TABLE users (
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('Alice', 40);
SELECT * FROM users;
UPDATE users as a SET a.age = 111 WHERE a.name = 'Alice';
SELECT * FROM users;修改前表內(nèi)容如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
1 ORACLE
執(zhí)行報錯
ORA-00971: missing SET keyword
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2 sqlite
執(zhí)行報錯
Error: near line 12: near ".": syntax error
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
3 PG
執(zhí)行報錯
psql:commands.sql:12: ERROR: column "a" of relation "users" does not exist LINE 1: UPDATE users as a SET a.age = 111 WHERE a.name = 'Alice';
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
4 MYSQL & mariadb
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Alice | 111 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
1.2 測試用例UPDATE users as a SET a.age = 111 WHERE name = 'Alice';
UPDATE users as a SET a.age = 111 WHERE name = 'Alice';
CREATE TABLE users (
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('Alice', 40);
SELECT * FROM users;
UPDATE users as a SET a.age = 111 WHERE name = 'Alice';
SELECT * FROM users;修改前表內(nèi)容如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
1 ORACLE
執(zhí)行報錯
ORA-00971: missing SET keyword
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2 sqlite
執(zhí)行報錯
Error: near line 12: near ".": syntax error
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
3 PG
執(zhí)行報錯
psql:commands.sql:12: ERROR: column "a" of relation "users" does not exist LINE 1: UPDATE users as a SET a.age = 111 WHERE name = 'Alice';
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
4 MYSQL & mariadb
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Alice | 111 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
1.3 測試用例UPDATE users as a SET age = 111 WHERE a.name = 'Alice';
UPDATE users as a SET age = 111 WHERE a.name = 'Alice';
CREATE TABLE users (
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('Alice', 40);
SELECT * FROM users;
UPDATE users as a SET age = 111 WHERE a.name = 'Alice';
SELECT * FROM users;修改前表內(nèi)容如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
1 ORACLE
執(zhí)行報錯
ORA-00971: missing SET keyword
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2 sqlite
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Alice | 111 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
3 PG
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
| Alice | 111 |
4 MYSQL & mariadb
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Alice | 111 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
1.4 測試用例UPDATE users as a SET age = 111 WHERE name = 'Alice';
UPDATE users as a SET age = 111 WHERE name = 'Alice';
CREATE TABLE users (
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('Alice', 40);
SELECT * FROM users;
UPDATE users as a SET age = 111 WHERE name = 'Alice';
SELECT * FROM users;修改前表內(nèi)容如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
1 ORACLE
執(zhí)行報錯
ORA-00971: missing SET keyword
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2 sqlite
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Alice | 111 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
3 PG
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
| Alice | 111 |
4 MYSQL & mariadb
執(zhí)行正常
后表內(nèi)容已經(jīng)更新,如下:
| name | age |
|---|---|
| Alice | 111 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 111 |
2 delete
2.1 測試用例delete users as a from a WHERE a.name = 'Alice';
delete users as a from a WHERE a.name = 'Alice';
CREATE TABLE users (
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('Alice', 40);
SELECT * FROM users;
delete users as a from a WHERE a.name = 'Alice';
SELECT * FROM users;修改前表內(nèi)容如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
1 ORACLE
執(zhí)行報錯
ORA-03048: SQL reserved word 'AS' is not syntactically valid following 'delete users '
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2 sqlite
執(zhí)行報錯
Error: near line 12: near "users": syntax error
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
3 PG
執(zhí)行報錯
psql:commands.sql:12: ERROR: syntax error at or near "users" LINE 1: delete users as a from a WHERE a.name = 'Alice';
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
4 MYSQL & mariadb
執(zhí)行報錯
ERROR 1064 (42000) at line 12: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as a from a WHERE a.name = 'Alice'' at line 1
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2.2 測試用例delete users as a from a WHERE name = 'Alice';
delete users as a from a WHERE name = 'Alice';
CREATE TABLE users (
name VARCHAR(255) NOT NULL,
age INT
);
INSERT INTO users (name, age) VALUES ('Alice', 25);
INSERT INTO users (name, age) VALUES ('Bob', 30);
INSERT INTO users (name, age) VALUES ('Charlie', 35);
INSERT INTO users (name, age) VALUES ('Alice', 40);
SELECT * FROM users;
delete users as a from a WHERE name = 'Alice';
SELECT * FROM users;修改前表內(nèi)容如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
1 ORACLE
執(zhí)行報錯
ORA-03048: SQL reserved word 'AS' is not syntactically valid following 'delete users '
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
2 sqlite
執(zhí)行報錯
Error: near line 12: near "users": syntax error
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
3 PG
執(zhí)行報錯
psql:commands.sql:12: ERROR: syntax error at or near "users" LINE 1: delete users as a from a WHERE name = 'Alice';
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
4 MYSQL & mariadb
執(zhí)行報錯
ERROR 1064 (42000) at line 12: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'as a from a WHERE name = 'Alice'' at line 1
之后查詢表內(nèi)容未發(fā)生變化,如下:
| name | age |
|---|---|
| Alice | 25 |
| Bob | 30 |
| Charlie | 35 |
| Alice | 40 |
總結
到此這篇關于數(shù)據(jù)庫中update與delete使用表別名的文章就介紹到這了,更多相關update與delete使用表別名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL基于ibd2sql實現(xiàn)ibd文件批量轉換為SQL的完整指南
本文介紹了使用ibd2sql工具批量處理InnoDB獨立表空間文件.ibd恢復表結構和數(shù)據(jù)的方法,提供了Windows PowerShell腳本和Linux Shell自動化腳本,實現(xiàn)一鍵恢復,對于手動導入和常見問題也給出了解決方案,需要的朋友可以參考下2026-04-04
MySQL數(shù)據(jù)庫全量備份+增量備份的實現(xiàn)
本文介紹了通過全量備份和增量備份實現(xiàn)數(shù)據(jù)庫數(shù)據(jù)的安全,并通過cron定時任務自動進行備份,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2026-03-03
mysql?8.0.28?winx64.zip安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了mysql?8.0.28?winx64.zip安裝配置方法圖文教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗總結
本篇文章是對優(yōu)化mysql數(shù)據(jù)庫的經(jīng)驗進行了詳細的總結介紹,需要的朋友參考下2013-06-06

