我正在尝试向列添加唯一键,并且收到了一个自我解释错误
MariaDB [dnd]> ALTER TABLE ability
-> ADD UNIQUE INDEX UK_ability_shortname (shortname);
ERROR 1062 (23000): Duplicate entry '' for key 'UK_ability_shortname'
Run Code Online (Sandbox Code Playgroud)
但问题是我看不到任何重复项
MariaDB [INFORMATION_SCHEMA]> select * from INNODB_SYS_INDEXES WHERE NAME LIKE 'UK_%';
+----------+---------------------------------+----------+------+----------+---------+-------+
| INDEX_ID | NAME | TABLE_ID | TYPE | N_FIELDS | PAGE_NO | SPACE |
+----------+---------------------------------+----------+------+----------+---------+-------+
| 1733 | UK_food_food | 563 | 2 | 1 | 4 | 558 |
| 1737 | UK_type_type | 565 | 2 | 1 | 4 | 560 |
| …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用c ++的应用程序,我希望能够访问MySql(或其他一些关系)数据库.我希望能够访问人员配置文件的数据库,以及更新和更改字段.是否有某种库可供使用?我真的不知道从哪里开始.
只需阅读21.3.6.1 basic_string :: find - 并且没有提到pos参数在字符串本身的范围内.
21.3.6.1 basic_string :: find
size_type find(const basic_string&str,size_type pos = 0)const;
1效果:如果可能,确定最低位置xpos,以便以下两个条件获得:
- pos <= xpos和xpos + str.size()<= size();
- at(xpos + I)== str.at(I)表示str控制的字符串的所有元素.
2返回:如果函数可以为xpos确定这样的值,则返回xpos.否则,返回npos.
我正确读到这个?
以下查询对两个表进行操作:dev_Profile和dev_User.
SELECT
dev_Profile.ID AS pid,
Name AS username,
st1.online
FROM
dev_Profile
LEFT JOIN (
SELECT
dev_User.ID,
lastActivityTime /* DATETIME */
FROM
dev_User)
AS st1 ON st1.ID = dev_Profile.UserID;
Run Code Online (Sandbox Code Playgroud)
每个表中大约有11K行,此查询需要大约6秒才能完成.我还没有很多数据库经验.我认为创建一个索引dev_Profile.UserID可以做到这一点,因为dev_Profile.ID已经有一个索引(它是PK)并且dev_Profile.UserID没有索引,但这根本没有帮助.
编辑:此查询的EXPLAIN输出:
+----+-------------+-------------+------+---------------+------+---------+------+-------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+------+---------------+------+---------+------+-------+-------+
| 1 | PRIMARY | dev_Profile | ALL | NULL | NULL | NULL | NULL | …Run Code Online (Sandbox Code Playgroud)