MySql -基础学习2- 创建数据库表
CREATE TABLE IF NOT EXISTS `stdent`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学员id', `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', `paw` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码', `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别', `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', `addreess` VARCHAR(100) DEFAULT NULL COMMENT '地址', PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8
一.注意点:
- 创建好一个数据库表以后,里面的字段都需要用英文的()括起来
- 表的名称和字段尽量都用 ` ` 括起来,此符号在左边tab键的上方不是英文半角
- auto_increment 自增
- 数据字段的所有字符串都用英文半角 ' ' 括起来
- 所有语句的后面都需要加上 , (英文的) ,最后一个可以不用加
- primary key 主键,一般一个表只有一个主键
格式:
create table 【if not exists 】 表名(
`字段名` 字段类型(列类型) 【属性】 【索引】 【注释】
.....
)【表的类型】 【字符集设置】
ENGINE=INNODB DEFAULT CHARSET=utf8
常用命令:
show create database school --查看创建数据库的语句
show create table student --查看student数据表的定义语句
desc student --显示表的结构
二.关于数据库的引擎
InnoDB 默认使用
MyISAM 早期使用的
MYISAM | INNODB | |
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 |
较大, 约为MYISAM2倍 |
- MYSIAM:节约空间,速度快
- INNODB:安全性高(关键),事务的处理,多表用户操作
三.在物理空间存在的位置
所有的数据库文件都在data目录下;
数据库本质的保存都是以文件存储的,只是这个文件有特定的格式
- 在INNODB,在数据库的表中只有一个 *. frm ,以及上一级目录下的 ibdata1 文件
- MYISAM 对应文件
- *.frm 表的定义结构
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
四.设置数据库的字符集编码
chaeset=utf8
不设置的话,会是mysql的默认字符集编码~(不支持中文)
MySQL的默认编码是Latin1,不支持中文
改变方式:
1.创建表的时候就可以在 最后自己改变编码为:chaeset=utf8(推荐使用)
2.在my.ini(MySQL的核心配置文件)中配置默认编码
五.修改和删除数据表(表操作)
1.修改表:
-- 修改表名 ALTER TABLE student RENAME AS student1 -- 添加表的字段 ALTER TABLE student1 ADD age1 INT(4) -- 修改表的字段 -> 修改约束 ALTER TABLE student1 MODIFY age1 VARCHAR(12) -- 修改字段名 ALTER TABLE student1 CHANGE age1 age INT(4) -- 删除表的字段 ALTER TABLE student1 DROP age
公式:
- alter table 旧表名 rename as 新表名
- alter table 表名 add 字段名 列属性[ ]
- alter table 表名 moddify 字段名 被修改的约束
- alter table 表名 change 旧表名 新表名 列属性[ ]
- alter table 表名 drop 待删除字段
2.删除表:
-- 删除表 DROP TABLE IF EXISTS student1
公式:
drop table if exists 待删除表名
所有创建和删除操作都尽量加上判断(if exists),以免报错
六.外键(物理外键)
CREATE TABLE IF NOT EXISTS `grade`( `gradeid` INT(10) NOT NULL COMMENT '年纪id', `gradename` VARCHAR(50) NOT NULL COMMENT '年纪', PRIMARY KEY(`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8 CREATE TABLE IF NOT EXISTS `stdent`( `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学员id', `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名', `paw` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码', `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别', `birthday` DATETIME DEFAULT NULL COMMENT '出生日期', `addreess` VARCHAR(100) DEFAULT NULL COMMENT '地址', `gradeid` INT(10) NOT NULL COMMENT '学生年纪', PRIMARY KEY(`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8
ALTER TABLE `stdent` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`grade`) REFERENCES `grade`(`gradeid`);
以上的操作都是物理外键,是数据库级别的,不建议使用
想要删除一张表由于外键的原因,会导致删除不了,发生混乱
理想的数据库表,只用来存数据,只有行和列
如果想要实现数据表的连接,我们后期会使用程序(java)去实现
导出数据库(控制面板):mysqldump -uroot qlogin>C:\\qlogin.sql -p