mysqlunionall无法走索引

mysqlunionall无法走索引,第1张

mysqlunionall无法走索引11 27

1. like %%失效。 方案:改为like %,只写后面的%就能走索引。

2. 虽然有索引,但是查询条件没有索引列或者order by 排序没有索引列。 方案:让查询条件有索引列

3. 索引列存在null值的情况。 方案:索引列如果没有值,则给空字符串或者数字的0,总之就是不要设置null

我观察到你的   emp  表的  username  列,  已经是   有  UNI   的  KEY 了

也就是那个  emp  表的  username  是唯一的了。

因此, 理论上

foreign key(username) references emp(username),

这个应该没有问题。

但是那个

foreign key (name) references emp (name)

由于   emp  表的  name  列,   是允许有重复行的。

因此你无法创建外键。

下面就是一个   失败的例子代码, 你可以参考一下

-- 创建测试主表.  无主键.

CREATE TABLE test_main2 (

  id      INT   NOT  NULL,

  value   VARCHAR(10)

)

-- 创建测试子表. 

CREATE TABLE test_sub2 (

  id      INT   NOT  NULL,

  main_id INT,

  value   VARCHAR(10),

  PRIMARY KEY(id)  

)

-- 插入测试主表数据.

INSERT INTO test_main2(id, value) VALUES (1, 'ONE')

INSERT INTO test_main2(id, value) VALUES (2, 'TWO')

-- 插入测试子表数据.

INSERT INTO test_sub2(id, main_id, value) VALUES (1, 1, 'ONEONE')

INSERT INTO test_sub2(id, main_id, value) VALUES (2, 2, 'TWOTWO') mysql> ALTER TABLE test_sub2

    ->    ADD CONSTRAINT main_id_cons2

    ->    FOREIGN KEY (main_id)

    ->    REFERENCES  test_main2(id)

ERROR 1005 (HY000): Can't create table 'test.#sql-608_1' (errno: 150)

默认情况下,无法创建外键

需要创建 unique 约束

mysql> ALTER TABLE test_main2

    ->   CHANGE COLUMN id id INT UNIQUE

Query OK, 2 rows affected (0.17 sec)

Records: 2  Duplicates: 0  Warnings: 0

unique 约束创建完毕后,外键创建成功。

mysql> ALTER TABLE test_sub2

    ->    ADD CONSTRAINT main_id_cons2

    ->    FOREIGN KEY (main_id)

    ->    REFERENCES  test_main2(id)

Query OK, 2 rows affected (0.14 sec)

Records: 2  Duplicates: 0  Warnings: 0

PRI primary key 表示主键,唯一写法: id bigint(20) unsigned primary key not null ,uni UNIQUE 表示唯一 写法 id bigint(20) unsigned UNIQUE default NULL mul 添加了索引 写法: alter table test add index suoyin (col_name1)如果有同时存在,显示顺序 PRI>UNI>MUL


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7366126.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存