数据库 创建数据库 1 2 3 4 5 6 7 8 create database [数据库名] character set [字符编码];create database study1; create database study2 character set gbk;
查看数据库 1 2 3 4 5 # 显示当前所有的数据库 show databases; # 查看study2数据库的定义信息: show create database study2;
修改数据库 1 2 3 4 5 alter database [数据库名] character set [字符编码];alter database study2 character set utf8;
删除数据库 1 2 # 删除study2数据库 drop database study2;
查看当前使用的数据库
切换数据库 1 2 # 切换至study2数据库 use study2;
数据库表 创建表 创建表语法
1 create table 表名 字段1 字段类型,字段2 字段类型,...字段n 字段类型
常用的字段数据类型: int:整型 double:小数类型,例如double5,2 表示最多5位,其中必须有2位小数,即最大值为999.99; decimal $m,d$:小数类型,m是长度,d是小数的位数 char:固定长度字符串类型; char$ 10 $ 如果不足10位则会自动补足10位:’abc ‘ varchar:可变长度字符串类型;varchar$ 10 $ 如果不足10位不会补足:’abc’,性能不如char高 text:字符串类型;适用于大文本内容,可以存储文章评论等内容。 blob:字节类型,可以存储图片和视频等内容,会降低数据库性能,通常不用。 date:日期类型,格式为:yyyy-MM-dd; time:时间类型,格式为:hh:mm:ss timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 以世界协调时$ UTC $格式保存的, 在存储时会对当前时区进行转换, 在查询检索 时再把UTC时间转换为当前时区 datetime:日期时间类型 yyyy-MM-dd hh:mm:ss 按实际输入的存储,与时区无关
1 create table employee(id int ,name varchar (20 ),sex char (2 ),birthday date ,job varchar (50 ),salary double (7 ,2 ));
查看数据库中所有的表
查看表的结构 1 2 3 4 5 desc [表名];DESC employee;
修改表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ALTER TABLE employee ADD address varchar(100); ALTER TABLE employee MODIFY job varchar(30); ALTER TABLE employee DROP address; RENAME TABLE employee TO user; ALTER TABLE user CHARACTER SET gbk; ALTER TABLE user CHANGE name username varchar(20);
查看表格的创建细节 1 2 SHOW CREATE TABLE user ;
删除表
创建外键 1 2 3 4 5 6 7 8 9 10 create table student( stuId int (11 ) auto_increment primary key , stuName varchar (50 ), gradeId int (4 ), phone varchar (4 ), phone varchar (20 ), address varchar (2000 ), brithday date , constraint `s_g_key` foreign key (gradeId) references grade (GradeId) )
修改表增加外键(外键作用就是利用外部数据约束本表内容) 1 2 constraint 外键名 foreign key 本表字段 references 来源表(来源字段)alter table 表名 add constraint 外键名 foreign key 本表字段 references 来源表(来源字段)
删除表的外键 1 2 alter table 表名 drop foreign key 外键名;alter table subject drop foreign key sub_g_key;
创建索引 在mysql中可以在创建表(CREATE TABLE)的同时创建索引;也可以在创建表后创建索引,使用CREATE INDEX语句或ALTER TABLE 语句。
1、使用CREATE INDEX语句 可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。
1 CREATE INDEX [<索引名>] ON <表名> (<列名> [<长度>] [ ASC | DESC ])
语法说明如下:
<索引名>:指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。
<表名>:指定要创建索引的表名。
<列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。
<长度>:可选项。指定使用列前的 length 个字符来创建索引。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限 255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000 个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。
ASC|DESC:可选项。ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC。
2、使用 CREATE TABLE 语句 索引可以在创建表(CREATE TABLE)的同时创建,语法格式:
1、创建主键索引
1 CONSTRAINT PRIMARY KEY [索引类型] (<列名>,…)
在使用 CREATE TABLE 语句定义列选项的时候,可以通过直接在某个列定义后面添加 PRIMARY KEY 的方式创建主键。而当主键是由多个列组成的多列索引时,则不能使用这种方法,只能用在语句的最后加上一个 PRIMARY KRY(<列名>,…) 子句的方式来实现。
2、创建一般索引
1 KEY | INDEX [<索引名>] [<索引类型>] (<列名>,…)
3、创建唯一性索引
1 UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)
4、创建外键索引
示例1: 创建一个表 tb_stu_info,在该表的 height 字段创建一般索引。
1 2 3 4 5 6 7 8 9 mysql> CREATE TABLE tb_stu_info -> ( -> id INT NOT NULL, -> name CHAR(45) DEFAULT NULL, -> dept_id INT DEFAULT NULL, -> age INT DEFAULT NULL, -> height INT DEFAULT NULL, -> INDEX(height) -> );
三、使用 ALTER TABLE 语句 在使用 ALTER TABLE 语句修改表的同时,可以向已有的表添加索引。具体的做法是在 ALTER TABLE 语句中添加以下语法成分的某一项或几项。
1、创建主键索引
1 ADD PRIMARY KEY [<索引类型>] (<列名>,…)
2、创建一般索引
1 ADD INDEX [<索引名>] [<索引类型>] (<列名>,…)
3、创建唯一性索引
1 ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,…)
4、创建外键索引
1 ADD FOREIGN KEY [<索引名>] (<列名>,…)
示例1: 创建一个表 tb_stu_info3后,在该表的 id 字段上使用 UNIQUE 关键字创建唯一索引。
1 2 3 4 5 6 7 8 9 10 mysql> CREATE TABLE tb_stu_info3 -> ( -> id INT NOT NULL, -> name CHAR(45) DEFAULT NULL, -> dept_id INT DEFAULT NULL, -> age INT DEFAULT NULL, -> height INT DEFAULT NULL, -> ); Query OK,0 rows affected (0.40 sec) mysql>ALTER TABLE tb_stu_info3 ADD UNIQUE (id) ;
显示索引信息 以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。
示例:
1 2 3 4 5 6 7 8 9 10 11 12 mysql> SHOW CREATE TABLE tb_stu_info\G *************************** 1. row *************************** Table: tb_stu_infoCreate Table : CREATE TABLE `tb_stu_info` ( `id` int (11 ) NOT NULL , `name` char (45 ) DEFAULT NULL , `dept_id` int (11 ) DEFAULT NULL , `age` int (11 ) DEFAULT NULL , `height` int (11 ) DEFAULT NULL , KEY `height` (`height` ) ) ENGINE =InnoDB DEFAULT CHARSET =gb23121 row in set (0.01 sec)