当前位置: 澳门新濠3559 > 数据库 > 正文

2.建表的时候创建索引,字符串类型的话

时间:2019-12-09 01:06来源:数据库
insert into firewall values('192.168.10.1',80,'deny'); Mysql之表的操作与索引操作,mysql索引 表的操作: 1.表的创造: create table if not exists table_name(字段定义卡塔尔(قطر‎;例子: create table if not exists

澳门新濠3559 1

> insert into firewall values('192.168.10.1',80,'deny');

Mysql之表的操作与索引操作,mysql索引

表的操作: 1.表的创造: create table if not exists table_name(字段定义卡塔尔(قطر‎; 例子: create table if not exists user(id int auto_increment, uname varchar(20卡塔尔(英语:State of Qatar), address varchar(200卡塔尔(قطر‎, updateTime datetime, primary key(id卡塔尔卡塔尔; // 设置主键 2.表(show tables;卡塔尔定义查看: show create table table_name; DESC table_name; show full columns from table_name; 3.表的换代: (1卡塔尔 表的重命名:alter table old_user_name rename to new_user_name; rename table old_user_name to new_user_name ; (2) 增加列:alter table table_name add column column_nname(修饰卡塔尔(قطر‎; 在表的率先个地点扩充字段,在言辞最后加上FI兰德兰德酷路泽ST,在表的钦点字段之后加上,在终极加上AFTE逍客属性名; 例子:alter table user add column age int not null default 0 after uname;//在uname列后扩大age列,何况不为空,默以为0. (3卡塔尔 删除列:alter table table_name drop (column) column_name; (4卡塔尔国.字段更正:alter table table_name change cloumn old_column_name new_cloumn_name 属性名 数据类型; 例子:alter table user change column adddress address varchar(1024卡塔尔(英语:State of Qatar) not null default 'beijing';// 将adddress重新命名字为address,范围为1024,不为空,暗中同意值为beijing (5卡塔尔(英语:State of Qatar).表的去除:drop table table_name; (6):复制表:create table new_table_name like old_table_name ; 4.操作表的羁绊: (1卡塔尔(قطر‎.非空约束(not null卡塔尔(英语:State of Qatar); 直接跟在字段后,比方:name varchar(20卡塔尔(قطر‎ not null; (2卡塔尔国.设置字段暗中同意值(default 私下认可值卡塔尔(英语:State of Qatar); 直接跟在字段后,举个例子:name varchar(20卡塔尔default 'name'; (3卡塔尔.设置唯黄金时代限制(unique卡塔尔; 唯风姿罗曼蒂克约束指的是不能够加多重复值 ;间接跟在字段后,譬如:name varchar(20卡塔尔国 unique; (4卡塔尔(英语:State of Qatar).设置主键约束(primary key卡塔尔国; 单字段主键:constraint pk_name primary key(name卡塔尔;直接跟在字段后,比方:id int primary key; 多字段主键:constraint pk_name1_name2 primary key(name1, name2卡塔尔;那么些讲话放在创造表的末尾就可以. (5卡塔尔(英语:State of Qatar).设置值自动增添(auto_increment卡塔尔(英语:State of Qatar);直接跟在字段后,比方:id int auto_increment; (6卡塔尔(英语:State of Qatar).设置外键限制(foreign key卡塔尔国: 语法:constraint 外键限定名 foreign key(属性名1卡塔尔 references 表名(属性名2卡塔尔;设置外键只好放在外键存在的表中,放在建表的最终一句,设置之后 不可能插入父表中不设有的值. 语法例子:constraint fk_deptno foreign key(deptno) references t_dept(deptno卡塔尔国; 上面6此中除了外间限定和多字段主键节制只好放在成立表的最后一句,别的都应该献身创造表时的字段之后,多少个限制原则平素紧随其后.比方:name varchar(20卡塔尔国 not null default 'name';//设置name不为空暗中同意值为name.   索引的操作: 1.索引的始建 (1卡塔尔(قطر‎.普通索引: create index index_name on table_name(属性名); 例子: create index idx_name on users(username); 查询时:通过explain select * from users where username = "条件";能够看看type为rel,而管见所及查询是ALL,约等于全然扫描,减弱效能,构建目录能够增长查找功效. (2卡塔尔(英语:State of Qatar).独一索引(值独一不能再度卡塔尔: create unnqiue index index_unique_name on table_name(属性名); 例子:create unique index idx_unique_name on users(username卡塔尔国; // 无法加上姓名相通的记录. (3卡塔尔.主键索引(一定是独一索引,但独一索引不必然是主键索引卡塔尔(قطر‎: alter table table_name add primary key(属性名卡塔尔国; (4卡塔尔(قطر‎.复合索引: alter table table_name add index index_name(属性名1,属性名2....卡塔尔(英语:State of Qatar); 复合索引唯有在复合查找中才起成效,也等于说多规格查询时起效果. (5卡塔尔.全文索引(innodb不援助全文索引卡塔尔(英语:State of Qatar): create fulltext index index_name on table_name(属性名卡塔尔; 2.索引的查阅: show create table table_name; show index from table_name; 3.索引的删减: drop index index_name on table_name; 索引是无法直接更新的,唯有经过先删除再加多来模仿更新.通过mysql workbench中的索引操作能够详细看看实施的口舌,来加深了然.

表的操作:1.表的始建:create table if not exists table_name(字段定义卡塔尔;例子:create table if not exists user(id int auto...

4.使用explain检查测试索引是还是不是被用到了

 

澳门新濠3559 2

 

 

> select * from t2;

1.索引(Index)是扶助MySQL高效获取数据的数据布局,能够知晓为“排好序的快速搜索数据布局”,在数码之外,数据库系统还维护着满意一定查找算法的数据结构,这几个数据构造以某种方式引用(指向)数据,那样就足以在这里些数据布局上贯彻高档搜索算法

| a | b | c                   | d |

 

陈设记录

澳门新濠3559 3

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

3.在mass_id和user_email_id上创建了平时索引

为三个字段增多索引

select_type:SIMPLE(普通的select卡塔尔,PPAJEROIMAKugaY(有子查询卡塔尔,UNION(有联手查询卡塔尔
table:输骑行所用的表
type:连接类型 从最棒到最差的连接类型为const、eq_reg、ref、range、indexhe和all
possible_keys:显示可能利用在这里张表中的目录
key: 实际运用的目录
key_len:使用的目录的长短。在不损失准确性的动静下,长度越短越好

> insert into t2 set id=3,name="Hebe",dep="MIS";

1.show status like 'Handler_read%';查看索引的运用意况
Handler_read_first 全索引围观
Handler_read_key 数值越高越好,高效的利用了目录
Handler_read_next 越小越好
Handler_read_rnd 未有选用索引恐怕使用太多排序
Handler_read_prev 代表读取索引的上列,平日爆发在OLacrosseDEEscort BY … DESC。
Handler_read_rnd_next 实行数据文件扫描,越小越好

安装unique属性的三种方法:

5.查看索引的利用情状总计

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

 

 

2.建表的时候成立索引,创造群发已发送邮件表:
create table mass_mail_send(
  id int auto_increment primary key,
  sender varchar(125) not null default '',
  mass_id int not null default 0,
  subject varchar(255) not null default '',
  location varchar(255) not null default '',
  send_time int not null default 0,
  user_email_id int not null default 0,
  index (mass_id),
  index (user_email_id)
)engine=innodb charset utf8;

mysql> insert into addr values(1,"Anna","addr...",4334543); 

 

ERROR 1025 (HY000): Error on rename of './db1/addr' to './db1/#sql2-5258-7' (errno: 152)

 

mysql> insert into user values();

mysql> select * from t3;

为了加速找出速度,缩小查询时间,  MySQL允许大家为二个表的特定字段设置索引

foreign key...references...

|    3 | Hebe | MIS  | 

| id | name |

目录的欠缺:它占领一定的磁盘空间,并且它影响INSERT,UPDATE和DELETE实施的时刻

结合主键

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

  1.  从表中除去外键

> create table pri(id tinyint not null unique,name char(10));   // not null unique

删除索引

约束:

show create table 表名;

mysql> select * from t6;

 

default

on delete cascade子句

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

mysql> insert into addr values(2,"Lucy","addr...",8774366); 

|    1 | Anna |   70 |   80 | 

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

 

 

> create table sales2(name char(4),price float(4,2),date date,index name_index(name),index (price));

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

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

|  1 | Nana  | addr... | 6668787 | 

> select * from score;

> drop table addr;

Query OK, 0 rows affected (0.00 sec)

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

 

> insert into score values(1,"Nana",50),(2,"Hebe",70);

去除score表中Hebe的笔录,addr表中Hebe的记录自动删除

|    1 | Nana |   50 | 

索引

> create table t11(id int,name char(10),unique(id));

> delete from score where name="Hebe";

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

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

MySQL的表只好有三个auto_increment 字段,并且以此字段必须被定义为键。

> create table user(name char(10),email varchar(20) unique);

| 192.168.10.2 |   80 | deny   | 

alter table 表名 drop foreign key 外键名;

 

|  2 | Nana | 

| 0 |   | 2009-12-28 15:42:17 | y |     

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

> create table t10(name char(10),email varchar(20) unique); 

> create table addr (id int primary key,aname char(10),addr char(255),tel int,index (aname),foreign key (aname) references score (name) on delete cascade) type=innodb;

 

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


mysql> insert into score values(1,"Anna",70,80),(1,"John",80,90),(3,"Lisa",50,60);

 

| id   | name | math | phy  |

若是创制三个外键,MySQL只同意向addr.aname字段输入那一个也存在于score.name字段的值

> create table score (id int,name char(10) primary key,math int) type=innodb;

| id | aname | addr    | tel     |

| NULL | NULL         | 

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

mysql> select * from firewall;

> insert into user values("Nana","[email protected]澳门新濠3559,");

> insert into user values("Anna","[email protected]");

> create index id_index on xueke (id);

> alter table user drop index email;

试验结果 Mysql会报错:    

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

字符串类型的话,增多的是空

primary key

> create table addr (id int primary key,aname char(10) not null,addr char(255),tel int,index (aname),foreign key (aname) references score (name)) type=innodb;

主键

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

mysql> select * from score;

设置主键的两种办法:

mysql> insert into user values();

设若数据类型是时间戳类型,加多的默许值是现阶段光阴

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

unique字段null是同意的

 

在此种意况下,允许host也许port重复,但不可能而且重复

> create table sales3(name char(4),price float(4,2),date date,index (name,price));

 

 

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

 

> insert into t2 set id=2,name="Anna";

建表

外键

|  2 | Hebe  | addr... | 8989666 | 

 

有not null 来修饰的话,往表里加多暗中认可值的时候:


数值类型的话,加多的是0

|    2 | Anna | HR   | 

 

 

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

 

mysql> select * from user;

去除却键:

> insert into t2 set id=1,name="Lili";

 

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

| Anna | [email protected] | 

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

| id   | name | math |

unique

> create table pri(id tinyint,name char(10),primary key(id));

> insert into t3(name) values("Nana");

cascade删除富含与已去除键值有参照他事他说加以考察关系的保有记录

> select * from addr;

| host         | port | access |

mysql> select * from addr;

翻看索引

 

> select * from score;

> alter table addr drop foreign key aname;

 

> drop index id_index on xueke;

> insert into firewall values('192.168.10.2',80,'deny');

mysql> insert into t6 values(卡塔尔;  // 加多私下认可值(就是values前边为空,什么都不写)

ERROR 1062 (23000): Duplicate entry '192.168.10.2-80' for key 1

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

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

| id | aname | addr    | tel     |


default修饰符为字段内定叁个默许值

> insert into t3(name) values("Anna");

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

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

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

ERROR 1062 (23000): Duplicate entry '[email protected]' for key 1

 

mysql> create table t6(a int not null,b char(10) not null,c timestamp not null,d enum('y','n') not null);

|  1 | Nana  | addr... | 6668787 | 

> create table sales(name char(4),price float(4,2),date date,index name_index(name卡塔尔(英语:State of Qatar)卡塔尔(英语:State of Qatar);    // 给字段name增添索引,索引的名号是name_index; 若无定义索引名称,则运用字段名称做为索引的名称

 

加多索引

> create table score (id int,name char(10) primary key,math int,phy int) type=innodb;

 

auto_increment修饰符只适用于INT字段,证明MySQL应该自行为该字段生成贰个数(每回在前三个值得底蕴上加1)。

确立外键:

> show index from sales; 

 

  www.2cto.com  

例子:

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

> insert into firewall values('192.168.10.2',80,'deny');

> create table t3 (id int not null auto_increment primary key,name varchar(10) not null);

例子:

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

MUL

 

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

|    1 | John |   80 |   90 | 

> insert into firewall values('192.168.10.1',21,'deny');

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

UNI

 

> create table pri(id tinyint primary key,name char(10));

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

> insert into addr values(1,"Nana","addr...",6668787),(2,"Hebe","addr...",8989666);

| 192.168.10.1 |   80 | deny   | 

 


 

 

|    2 | Hebe |   70 | 


  www.2cto.com  

> select * from addr;

 

| id   | name | math |

|  1 | Anna | 

删除unique

auto_increment

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

  1. 关联合中学的全数表必须是InnoDB表

  2. 参照的表和字段(必需是primary key,不然会出MySQL - errno:150的错误)是存在 的

  3. 构成外键的字段被索引

not null

| id   | name | dep  |

Mysql修饰符

枚举类型,增加的是首先个优先定义的值

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

表明比方:

 

|    1 | Lili | HR   | 

| NULL | NULL         | 

| id | aname | addr    | tel     |

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

语法:

| name | email        |

采纳create index命令向已存在的表增添索引

|    3 | Lisa |   50 |   60 | 

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db1/addr`, CONSTRAINT `addr_ibfk_1` FOREIGN KEY (`aname`) REFERENCES `score` (`name`))

|  1 | Anna  | addr... | 4334543 | 

  www.2cto.com  

|    1 | Nana |   50 | 

> create table t2(id int,name varchar(10),dep varchar(10) default "HR");

  1.  删除有外键的表

4. 在外键关系中,字段的数据类型必须相符,那对于大小和标识都必得协作的莫西干发型类型及其关键

表示记录不可能再一次

not null 有not null 来修饰的话,往表里增添暗中认可值的时候: 数值类型的话,加多的是0 字符串类型的话,增加的是空 假设数量类型...

> create table firewall(host varchar(20),port smallint(4),access enum('deny','allow'),primary key(host,port));

| 192.168.10.1 |   21 | deny   | 

编辑:数据库 本文来源:2.建表的时候创建索引,字符串类型的话

关键词: