我有以下表架构,它将user_customers映射到实时MySQL数据库的权限:
mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_customer_id | int(11) | NO | PRI | NULL | |
| permission_id | int(11) | NO | PRI | NULL | |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
我想删除user_customer_id和permission_id的主键,并保留id的主键.
当我运行命令时:
alter table user_customer_permission drop primary key;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ERROR 1075 (42000): Incorrect table definition; there can …
Run Code Online (Sandbox Code Playgroud) 我正在将我的mysql db表从id(auto)更改为uid.
ALTER TABLE companies DROP PRIMARY KEY;
ALTER TABLE companies ADD PRIMARY KEY (`uuid`);
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误..
[SQL] ALTER TABLE companies DROP PRIMARY KEY;
[Err] 1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
Run Code Online (Sandbox Code Playgroud)
据我所知,我需要将id更改为非自动增量,因为我将其作为主键删除.更改列以删除主键和自动增量的语法是什么?
ALTER TABLE companies change id id ?????????? int(11)
Run Code Online (Sandbox Code Playgroud) 这是MySQL 5.3.X + db中的一个表:
CREATE TABLE members` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`memberid` VARCHAR( 30 ) NOT NULL ,
`Time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
`firstname` VARCHAR( 50 ) NULL ,
`lastname` VARCHAR( 50 ) NULL ,
UNIQUE (memberid),
PRIMARY KEY (id)
) ENGINE = MYISAM;
Run Code Online (Sandbox Code Playgroud)
Id列从不在查询中使用,它只是为了方便视觉(因此很容易看到表的增长方式).Memberid是一个实际的键,是唯一的,并且在查询中使用memberid来标识任何成员(WHERE memberid ='abcde').
我的问题是:如何保持auto_increment,但将memberid作为主键?那可能吗?当我尝试使用PRIMARY KEY(memberid)创建此表时,出现错误:
1075 - 表定义不正确; 只能有一个自动列,必须将其定义为键
什么是最佳选择(希望有一种方法可以保持id列,以便性能良好,查询通过memberid识别任何用户,而不是id),如果性能非常重要(尽管磁盘空间不是)?
SQL查询:
ALTER TABLE `blog` CHANGE `id` `id` BIGINT NOT NULL AUTO_INCREMENT
Run Code Online (Sandbox Code Playgroud)
MySQL说:
#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个博客,我完成了代码.现在,我需要id
自动增加,但是我得到了这个错误.我为什么要这个?
这有效:
CREATE TABLE shoutbox_shout (
shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL DEFAULT 0,
shout_date INT UNSIGNED NOT NULL DEFAULT 0,
message MEDIUMTEXT NOT NULL,
KEY shout_date (shout_date)
)
Run Code Online (Sandbox Code Playgroud)
......而这个:
CREATE TABLE shoutbox_shout (
shout_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL DEFAULT 0,
shout_date INT UNSIGNED NOT NULL DEFAULT 0,
message MEDIUMTEXT NOT NULL,
KEY shout_date (shout_date)
)
Run Code Online (Sandbox Code Playgroud)
...结果是:
错误代码:1075 - 表定义不正确; 只能有一个自动列,必须将其定义为键
我添加了主键但仍然出错.
我有一个有一个AUTO_INCREMENT
字段的表.目前,它也是一个主要的关键.
但是,在某些情况下我需要此AUTO_INCREMENT
列以允许重复.换句话说 - 两个不同的行在列内可以具有相同的值AUTO_INCREMENT
.这意味着拥有一个不是PRIMARY KEY的AUTO_INCREMENT字段.
这可能吗?
我猜它不是,因为每当我尝试这样做时,我都会收到此错误:
ERROR 1075 (42000) at line 130: Incorrect table definition; there can be only one auto column and it must be defined as a key
我喜欢使用AUTO_INCREMENT字段,因为它使我不必手动存储/增加数据库中其他位置的单独计数器.我可以插入表中并获取插入的值.但是,如果我不能重复,似乎我将不得不使用一个单独的表来跟踪并手动增加该字段.
更新:作为一个快速说明,我已经熟悉将AUTO_INCREMENT字段与另一个键分组,如此处所述.让我们假设为了论证,由于数据库中的其他约束,此解决方案将无法工作.
我想在数据库表中创建一个AUTO_INCREMENT列,这是我写的语法:
create table comments
(
name varchar(20),
mail varchar(30),
comment varchar(100),
com_no int auto_increment
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误1075(42000):表定义不正确; 只能有一个自动列,必须将其定义为键
然后我把它作为主键:
create table comments
(
name varchar(20),
mail varchar(30),
comment varchar(100),
com_no int primary_key auto_increment
);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误1064(42000):您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在'primary_key auto_increment,name varchar(20),mail varchar(30),comment varchar(100'在第1行)附近使用正确的语法
怎么了???
我在Windows上编写项目(IntelliJIdea),一切都好.它编译并运行.但是当我尝试在Debian(GNU/Linux 5.0)上运行时,我有
SEVERE: Access denied for user 'root'@'localhost' (using password: YES)
[java] 30.11.2010 15:39:04 org.hibernate.cfg.SettingsFactory buildSettings
[java] WARNING: Could not obtain connection to query metadata
[java] java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
[java] at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
[java] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
[java] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
[java] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
我使用这样的Spring配置:
<bean id="mySqlDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb"/>
<property name="username" value="mydb"/>
<property name="password" value="Fallout_3"/>
</bean>
<bean id="mySqlSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="mySqlDataSource"/>
<property name="mappingResources">
<list>
<value>entities/ClientPrices.hbm.xml</value>
<value>entities/User.hbm.xml</value>
<value>entities/Provider.hbm.xml</value>
<value>entities/MessageQueue.hbm.xml</value>
<value> hibernate/SimpleEntity.hbm.xml</value>
</list> …
Run Code Online (Sandbox Code Playgroud)