CMysqlSchema
优质
小牛编辑
131浏览
2023-12-01
所有包 | 属性 | 方法
CMysqlSchema是从MySQL(4.1.x和5.x)数据库检索元数据信息的类。
源码: framework/db/schema/mysql/CMysqlSchema.php#105 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#73 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#190 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#304 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#155 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#219 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#248 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#207 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#115 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#60 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#48 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#266 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#87 (显示)
源码: framework/db/schema/mysql/CMysqlSchema.php#134 (显示)
包 | system.db.schema.mysql |
---|---|
继承 | class CMysqlSchema » CDbSchema » CComponent |
源自 | 1.0 |
版本 | $Id: CMysqlSchema.php 3515 2011-12-28 12:29:24Z mdomba $ |
源码 | framework/db/schema/mysql/CMysqlSchema.php |
公共属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
columnTypes | array | 映射到实体列类型的抽象列类型。 | CMysqlSchema |
commandBuilder | CDbCommandBuilder | the SQL command builder for this connection. | CDbSchema |
dbConnection | CDbConnection | database connection. | CDbSchema |
tableNames | array | Returns all table names in the database. | CDbSchema |
tables | array | Returns the metadata for all tables in the database. | CDbSchema |
受保护属性
隐藏继承属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
serverVersion | 浮点型的服务器版本。 | CMysqlSchema |
公共方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__construct() | Constructor. | CDbSchema |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
addColumn() | Builds a SQL statement for adding a new DB column. | CDbSchema |
addForeignKey() | Builds a SQL statement for adding a foreign key constraint to an existing table. | CDbSchema |
alterColumn() | Builds a SQL statement for changing the definition of a column. | CDbSchema |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
checkIntegrity() | 启用或禁用完整性检查。 | CMysqlSchema |
compareTableNames() | 比较两个表的名称。 | CMysqlSchema |
createIndex() | Builds a SQL statement for creating a new index. | CDbSchema |
createTable() | Builds a SQL statement for creating a new DB table. | CDbSchema |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
dropColumn() | Builds a SQL statement for dropping a DB column. | CDbSchema |
dropForeignKey() | 构造删除外键约束的SQL语句。 | CMysqlSchema |
dropIndex() | Builds a SQL statement for dropping an index. | CDbSchema |
dropTable() | Builds a SQL statement for dropping a DB table. | CDbSchema |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaluateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getColumnType() | Converts an abstract column type into a physical column type. | CDbSchema |
getCommandBuilder() | 返回the SQL command builder for this connection. | CDbSchema |
getDbConnection() | 返回database connection. The connection is active. | CDbSchema |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
getTable() | Obtains the metadata for the named table. | CDbSchema |
getTableNames() | Returns all table names in the database. | CDbSchema |
getTables() | Returns the metadata for all tables in the database. | CDbSchema |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
quoteColumnName() | Quotes a column name for use in a query. | CDbSchema |
quoteSimpleColumnName() | 用引号引用列名以便查询时使用。 | CMysqlSchema |
quoteSimpleTableName() | 用引号引用表名以便查询时使用。 | CMysqlSchema |
quoteTableName() | Quotes a table name for use in a query. | CDbSchema |
raiseEvent() | 发起一个事件。 | CComponent |
refresh() | Refreshes the schema. | CDbSchema |
renameColumn() | 构造重命名列的SQL语句。 | CMysqlSchema |
renameTable() | Builds a SQL statement for renaming a DB table. | CDbSchema |
resetSequence() | 重置表的主键的序列值。 | CMysqlSchema |
truncateTable() | Builds a SQL statement for truncating a DB table. | CDbSchema |
受保护方法
隐藏继承方法
方法 | 描述 | 定义在 |
---|---|---|
createColumn() | 创建一个列。 | CMysqlSchema |
createCommandBuilder() | Creates a command builder for the database. | CDbSchema |
findColumns() | 收集表的列元数据。 | CMysqlSchema |
findConstraints() | 收集给定表外键列的详细信息。 | CMysqlSchema |
findTableNames() | 返回所有数据库里的表名。 | CMysqlSchema |
getServerVersion() | CMysqlSchema | |
loadTable() | 为指定表载入元数据。 | CMysqlSchema |
resolveTableNames() | 生成各种表名。 | CMysqlSchema |
属性详细
columnTypes 属性 (可用自 v1.1.6) public array $columnTypes;映射到实体列类型的抽象列类型。
serverVersion 属性 只读 protected 浮点型的服务器版本。 getServerVersion()方法详细
checkIntegrity() 方法 (可用自 v1.1)public void checkIntegrity(boolean $check=true, string $schema='') | ||
$check | boolean | 是否开启完整性检查。 |
$schema | string | 各表schema。默认为空字符串,意味着当前或默认schema。 |
publicfunctioncheckIntegrity($check=true,$schema='')
{
$this->getDbConnection()->createCommand('SETFOREIGN_KEY_CHECKS='.($check?1:0))->execute();
}
启用或禁用完整性检查。
compareTableNames() 方法public boolean compareTableNames(string $name1, string $name2) | ||
$name1 | string | 表名1 |
$name2 | string | 表名2 |
{return} | boolean | 两个表名是否指向同一个表。 |
publicfunctioncompareTableNames($name1,$name2)
{
returnparent::compareTableNames(strtolower($name1),strtolower($name2));
}
比较两个表的名称。 表名可以是被引用或未引用的。该方法 会考虑这两种情况。
createColumn() 方法protected CDbColumnSchema createColumn(array $column) | ||
$column | array | 列元数据 |
{return} | CDbColumnSchema | 规范的列元数据 |
protectedfunctioncreateColumn($column)
{
$c=newCMysqlColumnSchema;
$c->name=$column['Field'];
$c->rawName=$this->quoteColumnName($c->name);
$c->allowNull=$column['Null']==='YES';
$c->isPrimaryKey=strpos($column['Key'],'PRI')!==false;
$c->isForeignKey=false;
$c->init($column['Type'],$column['Default']);
$c->autoIncrement=strpos(strtolower($column['Extra']),'auto_increment')!==false;
return$c;
}
创建一个列。
dropForeignKey() 方法 (可用自 v1.1.6)public string dropForeignKey(string $name, string $table) | ||
$name | string | 要删除的外键约束名。该键名会被指定方法正确引用。 |
$table | string | 要删除的外键约束所在表。该表名会被指定方法正确引用。 |
{return} | string | 删除外键约束的SQL语句。 |
publicfunctiondropForeignKey($name,$table)
{
return'ALTERTABLE'.$this->quoteTableName($table)
.'DROPFOREIGNKEY'.$this->quoteColumnName($name);
}
构造删除外键约束的SQL语句。
findColumns() 方法protected boolean findColumns(CMysqlTableSchema $table) | ||
$table | CMysqlTableSchema | 表元数据 |
{return} | boolean | 表是否存在于数据库里 |
protectedfunctionfindColumns($table)
{
$sql='SHOWCOLUMNSFROM'.$table->rawName;
try
{
$columns=$this->getDbConnection()->createCommand($sql)->queryAll();
}
catch(Exception$e)
{
returnfalse;
}
foreach($columnsas$column)
{
$c=$this->createColumn($column);
$table->columns[$c->name]=$c;
if($c->isPrimaryKey)
{
if($table->primaryKey===null)
$table->primaryKey=$c->name;
elseif(is_string($table->primaryKey))
$table->primaryKey=array($table->primaryKey,$c->name);
else
$table->primaryKey[]=$c->name;
if($c->autoIncrement)
$table->sequenceName='';
}
}
returntrue;
}
收集表的列元数据。
findConstraints() 方法protected void findConstraints(CMysqlTableSchema $table) | ||
$table | CMysqlTableSchema | 表元数据 |
protectedfunctionfindConstraints($table)
{
$row=$this->getDbConnection()->createCommand('SHOWCREATETABLE'.$table->rawName)->queryRow();
$matches=array();
$regexp='/FOREIGNKEYs+(([^)]+))s+REFERENCESs+([^(^s]+)s*(([^)]+))/mi';
foreach($rowas$sql)
{
if(preg_match_all($regexp,$sql,$matches,PREG_SET_ORDER))
break;
}
foreach($matchesas$match)
{
$keys=array_map('trim',explode(',',str_replace('`','',$match[1])));
$fks=array_map('trim',explode(',',str_replace('`','',$match[3])));
foreach($keysas$k=>$name)
{
$table->foreignKeys[$name]=array(str_replace('`','',$match[2]),$fks[$k]);
if(isset($table->columns[$name]))
$table->columns[$name]->isForeignKey=true;
}
}
}
收集给定表外键列的详细信息。
findTableNames() 方法protected array findTableNames(string $schema='') | ||
$schema | string | 表schema。默认是空字符串,意味着当前或默认schema。 若为空,则返回的表名会被加上schema名前缀。 |
{return} | array | 数据库里的所有表名。 |
protectedfunctionfindTableNames($schema='')
{
if($schema==='')
return$this->getDbConnection()->createCommand('SHOWTABLES')->queryColumn();
$names=$this->getDbConnection()->createCommand('SHOWTABLESFROM'.$this->quoteTableName($schema))->queryColumn();
foreach($namesas&$name)
$name=$schema.'.'.$name;
return$names;
}
返回所有数据库里的表名。
getServerVersion() 方法protected 浮点型的服务器版本。 getServerVersion() | ||
{return} | 浮点型的服务器版本。 |
protectedfunctiongetServerVersion()
{
$version=$this->getDbConnection()->getAttribute(PDO::ATTR_SERVER_VERSION);
$digits=array();
preg_match('/(d+).(d+).(d+)/',$version,$digits);
returnfloatval($digits[1].'.'.$digits[2].$digits[3]);
}
loadTable() 方法protected CMysqlTableSchema loadTable(string $name) | ||
$name | string | 表名 |
{return} | CMysqlTableSchema | 取决于表元数据的驱动。若表不存在则返回null。 |
protectedfunctionloadTable($name)
{
$table=newCMysqlTableSchema;
$this->resolveTableNames($table,$name);
if($this->findColumns($table))
{
$this->findConstraints($table);
return$table;
}
else
returnnull;
}
为指定表载入元数据。
quoteSimpleColumnName() 方法 (可用自 v1.1.6)public string quoteSimpleColumnName(string $name) | ||
$name | string | 列名 |
{return} | string | 正确引用的列名 |
publicfunctionquoteSimpleColumnName($name)
{
return'`'.$name.'`';
}
用引号引用列名以便查询时使用。 一个不包括前缀的简单列名。
quoteSimpleTableName() 方法 (可用自 v1.1.6)public string quoteSimpleTableName(string $name) | ||
$name | string | 表名 |
{return} | string | 正确引用的表名 |
publicfunctionquoteSimpleTableName($name)
{
return'`'.$name.'`';
}
用引号引用表名以便查询时使用。 一个不包括前缀的简单表名。
renameColumn() 方法 (可用自 v1.1.6)public string renameColumn(string $table, string $name, string $newName) | ||
$table | string | 要重命名的列所在表。该表名会被指定方法正确引用。 |
$name | string | 原有列名。该列名会被指定方法正确引用。 |
$newName | string | 新列名。该列名会被指定方法正确引用。 |
{return} | string | 重命名列的SQL语句。 |
publicfunctionrenameColumn($table,$name,$newName)
{
$db=$this->getDbConnection();
$row=$db->createCommand('SHOWCREATETABLE'.$db->quoteTableName($table))->queryRow();
if($row===false)
thrownewCDbException(Yii::t('yii','Unabletofind"{column}"intable"{table}".',array('{column}'=>$name,'{table}'=>$table)));
if(isset($row['CreateTable']))
$sql=$row['CreateTable'];
else
{
$row=array_values($row);
$sql=$row[1];
}
if(preg_match_all('/^s*`(.*?)`s+(.*?),?$/m',$sql,$matches))
{
foreach($matches[1]as$i=>$c)
{
if($c===$name)
{
return"ALTERTABLE".$db->quoteTableName($table)
."CHANGE".$db->quoteColumnName($name)
.''.$db->quoteColumnName($newName).''.$matches[2][$i];
}
}
}
//trytogivebackaSQLanyway
return"ALTERTABLE".$db->quoteTableName($table)
."CHANGE".$db->quoteColumnName($name).''.$newName;
}
构造重命名列的SQL语句。
resetSequence() 方法 (可用自 v1.1)public void resetSequence(CDbTableSchema $table, mixed $value=NULL) | ||
$table | CDbTableSchema | 要重置主键序列的表schema |
$value | mixed | 新插入行的主键值。如果未设置, 则新行主键值为1。 |
publicfunctionresetSequence($table,$value=null)
{
if($table->sequenceName!==null)
{
if($value===null)
$value=$this->getDbConnection()->createCommand("SELECTMAX(`{$table->primaryKey}`)FROM{$table->rawName}")->queryScalar()+1;
else
$value=(int)$value;
$this->getDbConnection()->createCommand("ALTERTABLE{$table->rawName}AUTO_INCREMENT=$value")->execute();
}
}
重置表的主键的序列值。 序列会被充值,这样一来,新插入行的主键值 将会是指定值或者1。
resolveTableNames() 方法protected void resolveTableNames(CMysqlTableSchema $table, string $name) | ||
$table | CMysqlTableSchema | 表元数据 |
$name | string | 未引用的表名 |
protectedfunctionresolveTableNames($table,$name)
{
$parts=explode('.',str_replace('`','',$name));
if(isset($parts[1]))
{
$table->schemaName=$parts[0];
$table->name=$parts[1];
$table->rawName=$this->quoteTableName($table->schemaName).'.'.$this->quoteTableName($table->name);
}
else
{
$table->name=$parts[0];
$table->rawName=$this->quoteTableName($table->name);
}
}
生成各种表名。