创建表

数据类型   int(×××,整数) not null,char(字符) tinyint(最小的×××) varchar (变长的字符类型)

create table xiaohu(

id int(4) not null,

name char(20) not null,

age tinyint(2) not null default '0',(不可以为空,但可以给0)

dept varchar(16) default null (可以为空)

mysql> create table student(

    -> id  int(4) not null,

    -> name char(20) not null,

    -> age tinyint(20) not null default '0',

    -> dept varchar(16) default null

    -> );

Query OK, 0 rows affected (0.01 sec)




查看见过表的语句:

show  create table 表名\G;


mysql> show create table student\G;

*************************** 1. row ***************************

       Table: student

Create Table: CREATE TABLE `student` (

  `id` int(4) NOT NULL,

  `name` char(20) NOT NULL,

  `age` tinyint(20) NOT NULL DEFAULT '0',

  `dept` varchar(16) DEFAULT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8

1 row in set (0.00 sec)



查看表结构

desc  加表名

mysql> desc student;

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

| Field | Type        | Null | Key | Default | Extra |

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

| id    | int(4)      | NO   |     | NULL    |       |

| name  | char(20)    | NO   |     | NULL    |       |

| age   | tinyint(20) | NO   |     | 0       |       |

| dept  | varchar(16) | YES  |     | NULL    |       |

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

4 rows in set (0.01 sec)



创建索引  提升查询速度

索引分类:

主键索引   主键列所有内容必须唯一  比如学号,准考证号

mysql> create table student(id int(4) not null AUTO_INCREMENT,递增 name char(20) not null, age tinyint(2) not null default '0', dept varchar(16) default null, primary key(id),主键索引  key index_name (name)普通索引 );

Query OK, 0 rows affected (0.01 sec)




如果在创建表的时候忘记加索引怎么办?

可以添加  语法

mysql> alter table student change id id  int primary key auto_increment;

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0


mysql> desc student

    -> ;

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

| Field | Type        | Null | Key | Default | Extra          |

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

| id    | int(11)     | NO   | PRI | NULL    | auto_increment |

| name  | char(20)    | NO   |     | NULL    |                |

| age   | tinyint(2)  | NO   |     | 0       |                |

| dept  | varchar(16) | YES  |     | NULL    |                |

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

4 rows in set (0.00 sec)


普通索引:

mysql> alter table student add index index_name(name);  改表 表的名字 添加 索引  索引名字(在哪个列上添加)

Query OK, 0 rows affected (0.01 sec)

Records: 0  Duplicates: 0  Warnings: 0

mysql> desc student;

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

| Field | Type        | Null | Key | Default | Extra          |

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

| id    | int(11)     | NO   | PRI | NULL    | auto_increment |

| name  | char(20)    | NO   | MUL | NULL    |                |

| age   | tinyint(2)  | NO   |     | 0       |                |

| dept  | varchar(16) | YES  |     | NULL    |                |

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

4 rows in set (0.00 sec)



指定前N个字符创建索引

mysql> create index index_dept  on  student(dept(8));  创建 索引 索引名  在 表(第几个列(前几个字符))

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0


查看索引 详细

mysql> show index from student\G;

*************************** 1. row ***************************

       Table: student

  Non_unique: 0

    Key_name: PRIMARY

Seq_in_index: 1

 Column_name: id

   Collation: A

 Cardinality: 0

    Sub_part: NULL

      Packed: NULL

        Null: 

  Index_type: BTREE

     Comment: 

*************************** 2. row ***************************

       Table: student

  Non_unique: 1

    Key_name: index_name

Seq_in_index: 1

 Column_name: name

   Collation: A

 Cardinality: NULL

    Sub_part: NULL

      Packed: NULL

        Null: 

  Index_type: BTREE

     Comment: 

*************************** 3. row ***************************

       Table: student

  Non_unique: 1

    Key_name: index_x

Seq_in_index: 1

 Column_name: age

   Collation: A

 Cardinality: NULL

    Sub_part: NULL

      Packed: NULL

        Null: 

  Index_type: BTREE

     Comment: 

*************************** 4. row ***************************

       Table: student

  Non_unique: 1

    Key_name: index_dept

Seq_in_index: 1

 Column_name: dept

   Collation: A

 Cardinality: NULL

    Sub_part: 8

      Packed: NULL

        Null: YES

  Index_type: BTREE

     Comment: 

4 rows in set (0.00 sec)



联合索引语法

create index index_name_dept on student(name,dept); 


       Table: student

  Non_unique: 1

    Key_name: ind_name_dept

Seq_in_index: 2

 Column_name: dept

   Collation: A

 Cardinality: NULL

    Sub_part: NULL

      Packed: NULL

        Null: YES

  Index_type: BTREE

     Comment: 

6 rows in set (0.00 sec)



mysql> drop index ind_name_dept on student; 删除索引 索引名 在 哪个表

Query OK, 0 rows affected (0.00 sec)

Records: 0  Duplicates: 0  Warnings: 0



创建联合索引前几个字符创建索引

create index ind_name_dept on student(name(8),dept(10));



到底给那些数据创建索引呢?

索引占空间,更新数据库还需要维护索引数据 写频繁读取好的语句少建立索引 十到几百行的小表不用创建索引

尽量在唯一值多的大表上建立索引



运维就是开个慢查询的语句开个监控