mysql字符集和索引

MySQL-day07

CREATE TABLE`test_table`(

            `ID`bigint(20) NOT NULL AUTO_INCREMENT COMMENT'主键',

            `DOMAIN_CODE`varchar(20) NOT NULL COMMENT'考试单位编号',

            `EXAM_NAME`varchar(300) NOT NULL COMMENT'考试名称',

            `EXAM_TYPE`int(1) NOT NULL COMMENT'考试类型(正式考试,补考)',

            `TARGET_EXAM_ID`bigint(20) DEFAULT NULL COMMENT'关联正式考试的ID(如果是补考,该处是必填)',

            `EXAM_PICTURE_PATH`varchar(100) DEFAULT NULL COMMENT'图示路径',

            `EXAM_BEGIN_TIME`timestamp NOT NULL DEFAULT NOW() COMMENT'考试开始时间',

            `EXAM_END_TIME`timestamp NOT NULL DEFAULT'0000-00-00 00:00:00'COMMENT'考试结束时间',

            `EXAM_TIME`int(3) NOT NULL COMMENT'考试时长',

            `EXAM_NEED_SCORE`int(5) NOT NULL COMMENT'考试所需积分',

            `EXAM_PAPER_TYPE`int(1) DEFAULT NULL COMMENT'考试试卷类型(0固定、1随机)',

            `EXAM_SCORE`double(6,2) DEFAULT NULL COMMENT'考试总分(关联试卷后回填)',

            `EXAM_PASS_SCORE`double(6,2) NOT NULL COMMENT'考试及格分',

            `EXAM_COMMIT_NUM`int(2) NOT NULL COMMENT'参考最大次数',

            `EXAM_STATUS`int(1) NOT NULL COMMENT'发布状态0未发布,1已发布',

            `EXAM_YEAR`varchar(5) NOT NULL COMMENT'年份',

            `EXAM_PAPER_ID`bigint(20) DEFAULT NULL COMMENT'关联试卷ID',

            `EXAM_DISCRIPTION`varchar(1000) DEFAULT NULL COMMENT'考试备注',

            `OPERATOR_USER_ACCOUNT`varchar(20) NOT NULL COMMENT'修改人',

            `OPERATOR_TIME`timestamp NOT NULL DEFAULT'0000-00-00 00:00:00'COMMENT'修改时间',

            `TARGET_DOMAIN_CODE`varchar(20) DEFAULT NULL COMMENT'发布目标单位编号(发布时回填)',

            `RANK`varchar(100) DEFAULT NULL COMMENT'职务级别(发布时回填)',

            `EXAM_DIPLOMA_ID`bigint(20) DEFAULT NULL COMMENT'关联证书',

            `DIPLOMA_NAME`varchar(200) DEFAULT NULL COMMENT'证书标题(关联证书后回填',

            `DIPLOMA_PICTURE_PATH`varchar(200) DEFAULT NULL COMMENT'证书背景图片保存位置(关联证书后回填)',

            `INDUSTRY_CODES`varchar(1000) DEFAULT NULL,

            `LANGUAGE`int(2) NOT NULL DEFAULT'1'COMMENT'试言(0:全部,1:汉试,2:维试,3:è’试,4:哈试)',

            `EXT1`int(1) NOT NULL DEFAULT'1'COMMENT'成绩计入学分的字段标识(0 是,1否)',

            `EXT2`int(3) DEFAULT NULL COMMENT'成绩所占比例',

            `EXT3`varchar(1) DEFAULT NULL,

            `EXT4`varchar(1) DEFAULT NULL,

            `EXT5`varchar(1) DEFAULT NULL,

            PRIMARY KEY (`ID`),

            KEY`DOMAIN_CODE`(`DOMAIN_CODE`),

            KEY`EXAM_PAPER_ID`(`EXAM_PAPER_ID`)

            )ENGINE=InnoDBAUTO_INCREMENT=365DEFAULTCHARSET=utf8;

3.自连接

#世界上小于100人的人口城市是哪个国家的?

city.countrycode=country.code

#世界上小于100人的城市说的什么语言?

城市名,语言,人口数量

city.name,countrylanguage.language,city.population

NATURAL JOIN

select city.name,countrylanguage.language,city.population

from city natural join countrylanguage

where city.population <100;

#前提条件:两个表中必须有相同的列名字,并且数据一致

4.外连接

#左外连接

select city.name,city.countrycode,country.name

from city left join country

on city.countrycode=country.code

and city.population<100;

mysql> select city.name,city.countrycode,country.name  from city left join country  on city.countrycode=country.code  and city.population<100 limit10;

+----------------+-------------+------+

| name           | countrycode | name |

+----------------+-------------+------+

| Kabul          | AFG         | NULL |

| Qandahar       | AFG         | NULL |

| Herat          | AFG         | NULL |

| Mazar-e-Sharif | AFG         | NULL |

| Amsterdam      | NLD         | NULL |

| Rotterdam      | NLD         | NULL |

| Haag           | NLD         | NULL |

| Utrecht        | NLD         | NULL |

| Eindhoven      | NLD         | NULL |

| Tilburg        | NLD         | NULL |

+----------------+-------------+------+

mysql> select city.name,city.countrycode,country.name  from city right join country  on city.countrycode=country.code  andd city.population<100 limit10;

+------+-------------+----------------------+

| name | countrycode | name                 |

+------+-------------+----------------------+

| NULL | NULL        | Aruba                |

| NULL | NULL        | Afghanistan          |

| NULL | NULL        | Angola               |

| NULL | NULL        | Anguilla             |

| NULL | NULL        | Albania              |

| NULL | NULL        | Andorra              |

| NULL | NULL        | Netherlands Antilles |

| NULL | NULL        | United Arab Emirates |

| NULL | NULL        | Argentina            |

| NULL | NULL        | Armenia              |

+------+-------------+----------------------+

mysql> select city.name,country.code,country.name  from city right join country  on city.countrycode=country.code  and city.population<100 limit10;

+------+------+----------------------+

| name | code | name                 |

+------+------+----------------------+

| NULL | ABW  | Aruba                |

| NULL | AFG  | Afghanistan          |

| NULL | AGO  | Angola               |

| NULL | AIA  | Anguilla             |

| NULL | ALB  | Albania              |

| NULL | AND  | Andorra              |

| NULL | ANT  | Netherlands Antilles |

| NULL | ARE  | United Arab Emirates |

| NULL | ARG  | Argentina            |

| NULL | ARM  | Armenia              |

+------+------+----------------------+

字符集校验规则

1)ci:大小写不敏感2)cs或bin:大小写敏感

统一字符集

工具修改字符集

系统修改字符集

#CentOS6:

[root@db01 ~]# vim /etc/sysconfig/i18n

#CentOS7:

[root@db01 ~]# vim /etc/locale.conf

LANG="en_US.UTF-8"

数据库修改字符集

#库级别的字符集

mysql> create database oldboy charset utf8;

#表级别的字符集

mysql> create table mysql.oldboy(id int)charset utf8;

CREATE TABLE`student5`(

`id`int(11) NOT NULL AUTO_INCREMENT COMMENT'学生学号',

`name`varchar(20) NOT NULL COMMENT'学生姓名',

`age`tinyint(3) unsigned NOT NULL COMMENT'学生年龄',

`gender`enum('f','m') DEFAULT NULL COMMENT'学生性别',

`cometime`datetime DEFAULT CURRENT_TIMESTAMP,

`state`enum('0','1') DEFAULT'1',

PRIMARY KEY (`id`));


#修改表的字符集

  mysql> show create table stu3;

索引管理

索引的类型(算法)

BTREE:B树索引(Btree,B+tree,B*tree)

HASH:HASH索引

FULLTEXT:全文索引

RTREE:R树索引

Btree算法

B+tree算法

1.在叶子节点,添加了相邻节点的指针

2.优化了,范围查询

索引分类

主键索引(聚集索引)

普通索引

联合索引

前缀索引

唯一索引(唯一键)

主键:唯一  、 非空  primary key

唯一键:唯一 、 可以为空 unique key

primary key = unique key + not null

索引创建规则

1.一个字段可以创建一个索引

2.多个字段可以创建一个索引

3.多个字段可以创建多个索引,但是不能是主键

索引操作

#创建主键索引 primary key

mysql> alter table student2 add primary key pri(name);

#创建普通索引 index

mysql> alter table student2 add index idx_name(name);

#创建唯一索引 unique key

mysql> alter table student2 add unique key uni_age(age);

#如何判断,某列是否可以创建唯一索引

distinct()

count()

mysql> select count(name) from student4;

+-------------+

| count(name) |

+-------------+

|9|

+-------------+

1rowinset(0.00 sec)

mysql> select count(distinct(name)) from student4;

+-----------------------+

| count(distinct(name)) |

+-----------------------+

|2|

+-----------------------+

mysql> select count(name) from country;

+-------------+

| count(name) |

+-------------+

|239|

+-------------+

1rowinset(0.00 sec)

mysql> select count(distinct(name)) from country;

+-----------------------+

| count(distinct(name)) |

+-----------------------+

|239|

+-----------------------+

1rowinset(0.00 sec)

mysql> alter table country add unique key uni_name(name);

#查看索引

mysql> show index from student2;

mysql> desc student2;

mysql> show create table student2;

#删除索引

mysql> alter table student2 drop index idx_all;

mysql> alter table student2 drop index uni_age;

前缀索引

给表中数据量大的列,创建前缀索引

#创建前缀索引

mysql> alter table student2 add index idx_name(name(3));

1.避免对大列建索引2.如果有,就使用前缀索引

联合索引

性别

长相

身材

收入

年龄

爱好

...

id  名字  性别  长相  身材 身高 QQ 微信 手机  收入

mysql> create table xiangqin(id int,name varchar(10),gender enum('0','1'),face varchar(10),height int,weight int,salary int,hobby varchar(10),QQ varchar(11));

mysql> alter table xiangqin add index idx_all(gender,salary,face,weight);

联合索引,走索引情况

A:gender    B:salary  C:face  D:weight

全部走索引:

select * from xiangqin where A;

select * from xiangqin where A B;

select * from xiangqin where A B C;

select * from xiangqin where A B C D;

部分走索引:

select * from xiangqin where A  C D;

select * from xiangqin where A B  D;

select * from xiangqin where A  D;

全不走索引

select * from xiangqin where B  C D;

select * from xiangqin where C D;

select * from xiangqin where D;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容