数据库表语法及数据管理

本文转载于我的个人博客数据库表语法及数据管理
遵循 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 早些年使用
*/
MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间大小较小较大,约为两倍

常规使用操作:

  • 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`);

以上操作均为数据库层级的关系,不建议使用(避免数据库过多造成困扰)

最佳方法:

  • 数据库就是单纯的表,只是用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键(程序去实现)

同步学习资源:MySQL狂神说
欢迎关注我的个人博客:Sakura

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值