是否可以有一个列名但有 2 个不同的名称来引用它?
我有一个列名为“iduser”的表。但我想使用一些php插件,插件使用列名“id”。
所以我想知道mysql中是否有一种快速的方法来为当前的列名“iduser”创建别名“id”。我想在此基础上进行 CRUD 操作。
我这样做是因为我懒得将插件的所有列名更改为“iduser”。
谢谢。
可以使用view。
只需确保您的视图定义符合
19.5.3 的要求。可更新和可插入的视图。但这应该不是问题,因为您将使用表的主键拥有最简单的 1:1 关系。
它将如何影响性能取决于您来衡量......
例如
<?php
// this script creates a persistent table soFooTbl and a persistent view soFooView
// can't use temporary tables for this example
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);
printTable($pdo, 'soFooTbl');
printTable($pdo, 'soFooView');
echo "deleting rows\n";
$pdo->exec('DELETE FROM soFooView WHERE id IN (1,2,3,4,5)');
printTable($pdo, 'soFooTbl');
printTable($pdo, 'soFooView');
function printTable($pdo, $src) {
echo "---- $src ----\n";
foreach( $pdo->query('SELECT * FROM '.$src, PDO::FETCH_ASSOC) as $row ) {
echo join(', ', $row), " | ";
}
echo "\n";
}
function setup($pdo) {
$pdo->exec('
CREATE TABLE IF NOT EXISTS soFooTbl(
idUser int auto_increment,
val varchar(32),
primary key(idUser)
)
');
$pdo->exec('TRUNCATE TABLE soFooTbl');
$stmt = $pdo->prepare('INSERT INTO soFooTbl (val) VALUES (:val)');
$stmt->bindParam('val', $val);
foreach( range(1,10) as $val ) {
$stmt->execute();
}
$pdo->exec('
CREATE OR REPLACE VIEW
soFooView
(id,val)
AS
SELECT
idUser,val
FROM
soFooTbl
');
}
印刷
---- soFooTbl ----
1, 1 | 2, 2 | 3, 3 | 4, 4 | 5, 5 | 6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 |
---- soFooView ----
1, 1 | 2, 2 | 3, 3 | 4, 4 | 5, 5 | 6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 |
deleting rows
---- soFooTbl ----
6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 |
---- soFooView ----
6, 6 | 7, 7 | 8, 8 | 9, 9 | 10, 10 |