一、创建表

先来个例子:

-- 创建一个学生表
-- 学号int 密码varchar(20) 姓名、性别varchar(2) 出生日期datatime 家庭住址varchar(100) emailvarchar(50)
-- 编码格式为utf-8
CREATE TABLE IF NOT EXISTS `student` (
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
	`name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
	`sex` VARCHAR(2) NOT NULL DEFAULT '未知' COMMENT '性别',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
	PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

字段

用途

AUTO_INCREMENT

自增

DEFAULT

默认值

COMMENT

注释

NOT NULL

非空

PRIMARY KEY

主键

ENGINE

引擎

CHARSET

编码

总结一下格式:

create table [if not exists] `表名`(
	`字段名` 类型 [属性] [索引] [注释] ,
	`字段名` 类型 [属性] [索引] [注释] ,
		······
	`字段名` 类型 [属性] [索引] [注释]
)[表类型] [字符集] [注释]
查看创建语句

反向偷懒~

-- 查看创建某个数据库时的语句
show create database 数据库名;
-- 查看创建某个表时的语句
show create table 表名;
显示表的结构
desc 表名;

二、数据库的引擎和字符集

1、引擎

默认是 INNODB ,早些年用 MYISAM。

MYISAM

INNODB

事务支持

不支持

支持

数据行锁定

不支持(只有表锁)

支持

外键

不支持

支持

全文索引

支持

不支持

表空间的大小

较小

较大(约为MYISAM两倍)

MYISAM 节约空间 速度较快

INNODB 安全性高 支持事务 支持多表多用户操作

数据库物理位置

所有的文件都存在data目录下,本质还是文件的存储。
一个文件夹对应一个数据库

不同引擎在物理文件上的区别:

  • INNODB 在数据库表中只有一个 *.frm 文件,以及上级目录下的 ibdata1 文件
  • MYISAM 中
  • *.rfm 文件是表结构的定义文件
  • *.MYD 文件是数据文件
  • *.MYI 文件是索引文件

2、字符集

charset=utf8;

不设置,默认是 Latin1(不知道是啥,反正不支持中文)。

在 my.ini 中可以配置默认编码

character-set-server=utf8

三、修改删除表

alter 修改

1、重命名

-- ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE student RENAME AS student1;

2、增加字段

-- ALTER TABLE 表名 ADD 新字段 类型
ALTER TABLE student1 ADD age INT(3);

3、修改字段类型

-- ALTER TABLE 表名 MODIFY 字段 新类型
ALTER TABLE student1 MODIFY age varcahr(3);
-- ALTER TABLE 表名 CHANGE 字段 新字段 [新类型]
ALTER TABLE student1 CHANGE age age1 INT(3);

4、删除字段

-- ALTER TABLE 表名 DROP 字段名;
ALTER TABLE student1 DROP age1;

5、删除表

-- DROP TABLE [IF EXISTS] 表名;
DROP TABLE IF EXISTS student1;

四、MySQL数据管理

1、外键(了解)

关联外部表

CONSTRAINT 键名 FOREIGN KEY(`字段名`) REFERENCES `外联表名`(`外联表字段名`)

被关联的表不能直接删除,需要先删除关联它的表。

建表时没有外键约束,添加语句:

ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

2、DML(数据库管理语言)

插入(增)

insert

-- insert into 表名 ([字段1,字段2,字段3······]) values('值1','值2','值3'······)
INSERT INTO grade (`gradename`) VALUES ('大四');

自增的可以不用对应上去,会自增填入。但是如果不用字段名和值对应的方式,直接填值,就会按默认顺序对应,此时即使是自增也必须手动填写。

一一对应的在一个括号内,不对应的在多个括号内

INSERT INTO grade (`gradename`) VALUES ('大三'),('大二'),('大一');

这样会插入三条记录。

修改(改)

update

-- update 表名 set 字段=新值 [条件]
-- update 表名 set 字段1=新值1,字段2=新值2······ [条件]
UPDATE `student` SET `name`='张三' WHERE id=1;

条件:where子句
字段 运算符 值 -> id = 1 本质是会返回一个布尔值,进行判断修改

运算符

含义

范围

=

等于

<> 或 !=

不等于

>

大于

<

小于

>=

大于等于

<=

小于等于

BETWEEN n1 AND n2

在某个区间

[n1, n2]

c1 AND c2

同时成立

c1=true, c2=true

c1 OR c2

成立其一

c1 或者 c2=true

删除(删)

delete

-- delete from 表名 [条件]
DELETE FROM `student` WHERE id=1;
-- TRUNCATE 数据库名 : 完全删除一个数据库!
TRUNCATE `student`;

delete 和 truncate 的相同点:

  • 都能删除数据
  • 都不会删除表结构(最上面的表头)

delete 和 truncate 的不同点:

  • truncate 会使自增计数器归零
  • delete不影响自增计数器
  • truncate 不会影响事务

innodb 和 myisam 的区别(了解):
重启数据库,innodb会更新自增量,因为存在内存当中,而myisam还会从上次的自增位置开始自增,因为存在文件中

查询(查)

后面详细讲