本文转载于我的个人博客数据库表语法及数据管理
遵循 CC 4.0 BY-SA 版权协议
MySQL day3
# 创建数据库表(重点)
-- 目标:创建一个school数据库
-- 创建学生表(列、字段) 使用SQL 创建
-- 学号int 登陆密码varchar(20) 姓名,性别varchar(2),出生日期(datatime),家庭住址,email
-- 注意点,只用英文(),表的名称 和 字段 尽量使用`` 括起来
-- AUTO_INCREMENT 自增
-- 字符串使用 单括号括起来!
-- 所有的语句后面加 ,(英文的),最后一个不用加
-- PRIMARY KEY 主键 ,一般一个表只有一个唯一的主键
create table if not exists `student` (
`id` int(4) not null auto_increment comment '学号',
`name` varchar(30) 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
格式
create table [if not exists]表名(
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
......
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释]
)[表类型][字符集设置][注释]
常用命令
show create table student -- 查看语句
desc student -- 显示表的结构
数据表的类型
-- 关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用
*/
MYISAM | INNODB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约为两倍 |
常规使用操作:
- MYISAM 节约空间,速度较快
- INNODB 安全性高,支持事务处理,多表用户操作
在物理空间存在的位置
所有的数据库文件都存在data目录下,一个文件夹就对应一个数据库
本质还是文件的存储!
MySQL 引擎在物理文件上的区别
- innoDB 在数据库表中只有一个*.frm文件,以及上级目录下的 ibdata1文件
- MYUSAM 对应文件
- *.frm 表结构的定义文件
- *.MDY 数据文件 (data)
- *.MYI 索引文件(index)
设置数据库表的字符集编码
charset=utf8
不设置 会是mysql的默认的字符集编码(不支持中文)
在 my.ini中配置默认的编码
character-set-server=utf8
修改删除表
修改
-- 修改表名
alter table test rename as tttt
-- 怎加表的字段
alter table tttt add age int(11)
-- 修改表的字段(重命名,修改约束)
alter table tttt modify age varchar(11) -- 修改约束
ALTER TABLE tttt change age age1 int(11) -- 字段重命名
-- 删除表的字段
alter table tttt drop age1
删除表
-- 删除表
drop table if exists tttt
所有的创建和删除操作均加上存在判断
MySQL 的数据管理
外键(了解)
方式一、在创建表的时候,增加约束 (麻烦,比较复杂)
CREATE TABLE `grade` (
`grade1d` INT(10) NOT NULL COMMENT '年纪名字',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名字',
PRIMARY KEY (`grade1d`)
) ENGINE=INNODB DEFAULT CHARSET=utf8
-- 学生表的 gradeid 字段 要去引用年级表的grade id
-- 定义外键key
-- 给这个外键添加约束(执行引用)references 引用
CREATE TABLE IF NOT EXISTS `student` (
`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
`grade1d` INT(10) NOT NULL COMMENT '年纪名字',
`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭地址',
`email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY(`id`)
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
删除有外键关系的表,要先删除引用的表(从表),再删除被引用的表(主表)
方式二、在创建表成功后,增加约束
-- 创建表的时候没有外键关系的时候
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);
以上操作均为数据库层级的关系,不建议使用(避免数据库过多造成困扰)
最佳方法:
- 数据库就是单纯的表,只是用来存数据,只有行(数据)和列(字段)
- 我们想使用多张表的数据,想使用外键(程序去实现)