Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在SQL表中创建索引显示未定义索引_Mysql_Sql - Fatal编程技术网

Mysql 在SQL表中创建索引显示未定义索引

Mysql 在SQL表中创建索引显示未定义索引,mysql,sql,Mysql,Sql,我使用下面的代码创建了一个表。表被创建,但显示了警告 No index defined! 我使用以下SQL命令创建表 CREATE TABLE IF NOT EXISTS `test` ( `path` varchar(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; 我使用以下PHP代码将多个图像路径插入数据库,但每个路径都存储在新行中。如何在SQL表中存储在单行中 if ($_FILES) { $upload = new Uplo

我使用下面的代码创建了一个表。表被创建,但显示了警告

No index defined!
我使用以下SQL命令创建表

CREATE TABLE IF NOT EXISTS `test` (
`path` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
我使用以下PHP代码将多个图像路径插入数据库,但每个路径都存储在新行中。如何在SQL表中存储在单行中

if ($_FILES) {
$upload = new Upload_Rename();
$destination = 'upload';
$paths=$upload->multiple_files($_FILES['myfile'], $destination);

//Fill this with correct information
$mysql_hostname = "";
$mysql_user = "";
$mysql_password = "";
$mysql_database = "";
$tbl_name="";
$pathfield_name='path';
//
$mysql= new mysqli($mysql_hostname,$mysql_user,$mysql_password,$mysql_database);
foreach($paths as $path){
$query='INSERT INTO `'.$tbl_name.'` (id, `'.$pathfield_name.'`) VALUES ("'.$mysql- >escape_string($path).'");';
$mysql->query($query);}
$mysql->close();
}
?>

<form  method="post" enctype="multipart/form-data">
<?php for ($i = 0; $i < 10; $i++): ?>
file: <input type="file" name="myfile[]"><br>
<?php endfor; ?>
 <input type="submit">
if($\u文件){
$upload=新上传_重命名();
$destination='upload';
$path=$upload->多个_文件($_文件['myfile'],$destination);
//请填写正确的信息
$mysql_hostname=“”;
$mysql_user=“”;
$mysql_password=“”;
$mysql_database=“”;
$tbl_name=“”;
$pathfield_name='path';
//
$mysql=newmysqli($mysql\u主机名,$mysql\u用户,$mysql\u密码,$mysql\u数据库);
foreach($path作为$path){
$query='INSERT INTO`.$tbl_name.`(id,'.$pathfield_name.'`)值(“.$mysql->escape_string($path)。”);
$mysql->query($query);}
$mysql->close();
}
?>
文件:
  • 如果在表上定义主键,InnoDB会将其用作聚集索引

  • 如果您没有为表定义主键,MySQL会选择第一个唯一的索引(只有非空列)作为主键,InnoDB将其用作聚集索引

  • 如果表没有主键或合适的唯一索引,InnoDB会在包含行ID值的合成列上内部生成隐藏的聚集索引。这些行按InnoDB分配给此类表中的行的ID排序。行ID是一个6字节的字段,随着新行的插入而单调增加。因此,按行ID排序的行在物理上是按插入顺序排列的

  • 因此,在3的情况下,将创建合成索引。这个警告只是提供了一种理解,即没有为表定义特殊索引,这可能会在将来导致排序、搜索e.t.c.查询的问题


    您的表中应该有一个PK作为I字段,这对于查询/索引来说性能更好

    CREATE TABLE IF NOT EXISTS `test` (
    `id` int unsigned NOT NULL AUTO_INCREMENT,
    `path` varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    

    而且,路径只有50个字符,为什么您希望在一行中有多个路径?目的是什么

    如何创建索引,我看不出有什么问题。介意向我们展示数据库中的其余内容吗?正如您所写,这只是一个警告,而不是错误。它只是说您没有指定索引。@user3853978请看您正在将(
    id
    path
    )插入到一个只有
    path
    列的表中-这就是您的代码所说的。如何在一行中添加多个图像的文件路径您不应该这样做。一行-一个文件一个路径。SQL查询:如果不存在,则创建表
    test1
    id
    INT UNSIGNED NOT NULL AUTO_INCREMENT,
    path
    VARCHAR(50)NOT NULL)ENGINE=INNODB DEFAULT CHARSET=latin1 MySQL说:文档1075-表定义不正确;只能有一个自动列,必须将其定义为键。请向其中添加主键(
    id
    )。如下所示:创建表IF NOT EXISTS test1(id INT UNSIGNED NOT NULL AUTO_INCREMENT,path VARCHAR(50)NOT NULL,主键(
    id
    )ENGINE=INNODB DEFAULT CHARSET=latin1;
    CREATE TABLE IF NOT EXISTS `test` (
    `id` int unsigned NOT NULL AUTO_INCREMENT,
    `path` varchar(50) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;