1 1.表的操作
2
3 mysql> show create database scott\G;
4 *************************** 1. row ***************************
5 Database: scott
6 Create Database: CREATE DATABASE `scott` /*!40100 DEFAULT CHARACTER SET utf8 */
7 1 row in set (0.00 sec)
8
9 建表
10 create table <表名> (
11 <字段名1><类型1>,
12 <字段名n><类型n>
13 );
14
15 mysql> create table student(
16 -> id int(4) not null, 学号列, 数字类型 长度为4 不为空值
17 -> name char(20) not null, 名字列 定长字符类型, 长度20, 不为空值
18 -> age tinyint(2) not null default '0', 年龄列,很小的数字类型, 长度为2 不为空值 默认为0
19 -> dept varchar(16) default null 系别列,变长字符类型, 长度16
20 -> );
21 Query OK, 0 rows affected (0.03 sec)
22
23 mysql> show create table student\G;
24 *************************** 1. row ***************************
25 Table: student
26 Create Table: CREATE TABLE `student` (
27 `id` int(4) NOT NULL,
28 `name` char(20) NOT NULL,
29 `age` tinyint(2) NOT NULL DEFAULT '0',
30 `dept` varchar(16) DEFAULT NULL
31 ) ENGINE=InnoDB DEFAULT CHARSET=utf8
32 1 row in set (0.00 sec)
33
34
35 1. int(m)型 正常大小整数类型
36 2. char(m)型 定长字符串类型,当存储时,总是用空格填满右边到指定的长度
37 3. varchar 型 变长字符串类型
38
39 查看表达字段
40 mysql> desc student;
41 字段 类型 是否允许为空 缺省是什么
42 +-------+-------------+------+-----+---------+-------+
43 | Field | Type | Null | Key | Default | Extra |
44 +-------+-------------+------+-----+---------+-------+
45 | id | int(4) | NO | | NULL | |
46 | name | char(20) | NO | | NULL | |
47 | age | tinyint(2) | NO | | 0 | |
48 | dept | varchar(16) | YES | | NULL | |
49 +-------+-------------+------+-----+---------+-------+
50 4 rows in set (0.01 sec)有没有主键或索引
2. 为表的字段创建索引
索引就像书一样,如果在字段上建立了索引,那么以索引为列查询条件时,可以
加快查询速度,这是mysql优化的重要内容之一,
查询数据库,按主键查询是最快的,每个表只能有一个主键列,但是可以有多个普通
索引列,主键列要求列的所有内容必须唯一,而索引列不要求内容必须唯一
CREATE TABLE stud (
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)
);
AUTO_INCREMENT 自动生成id功能
primary key(id) 主键
KEY index_name(name) name 字段普通索引
mysql> desc student;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(4) | NO | | NULL | |
| name | char(20) | NO | | NULL | |
| age | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
4 rows in set (0.01 sec)
mysql> desc stud;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(4) | 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)
添加主键
mysql> alter table student change id id int primary key auto_increment;
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 | | NULL | |
| age | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
删除索引
mysql> alter table stud drop index index_name;
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc stud;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(4) | 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 stud add index index_name(name);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc stud;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(4) | 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)
创建索引
mysql> create index index_dept on student(dept(2));
Query OK, 0 rows affected (0.04 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 | MUL | NULL | |
+-------+-------------+------+-----+---------+----------------+
创建联合索引
mysql> create index index_dept_name on student(name,dept);
Query OK, 0 rows affected (0.02 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 | MUL | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.01 sec)
删除索引
mysql> drop index index_dept_name on student;
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 | | NULL | |
| age | tinyint(2) | NO | | 0 | |
| dept | varchar(16) | YES | MUL | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> drop index index_dept on student;
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)
name前8个字符,dept前10个字符做索引
mysql> create index index_dept_name on student(name(8),dept(10));
Query OK, 0 rows affected (0.03 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)
创建唯一索引(非主键索引) 为了约束表的
mysql> create unique index index_age on student(age);
Query OK, 0 rows affected (0.04 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 | UNI | 0 | |
| dept | varchar(16) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
索引的创建及生效条件
索引占用系统空间,所以不是索引越多越好 更新频繁,读取比较少的表要少建立索引
在那些列上查询索引
select user,host from mysql.user where host=
索引一定要创建在where后的条件上,而不是select后选择数据的列
另外尽量选择在唯一值多的大表上建立索引
索引小结
创建主键索引
mysql> alter table student change id id int primary key auto_increment; # 创建主键
mysql> create index index_dept on student(dept(8)); 创建索引
mysql> alter table student add index index_name(name); 创建索引
删除主键索引
mysql> alter table student drop primary key;
创建普通索引
mysql> alter table student add index_dept(dept(8))
根据列的前n个字符创建索引
mysql> create index index_name on student(name(8));
根据多个列创建联合索引
mysql> create index index_dept_name on student(name(8),dept(10));
删除普通索引
mysql> alter table student drop index index_dept;
mysql> drop index index_dept on student;
创建唯一索引
mysql> create unique index uni_ind_name on student(name)