目录
2.4创建数据库表(重点)
注:请使用SQLyog编写
-- 目标:创建一个school数据库
-- 创建学生表(列,字段) 使用SQL创建
-- 学号int 登录密码varchar(20) 姓名 性别varchar(2) 出生日期(datatime) 家庭住址 emile
--
-- 注意:使用英文(),表的名称 和字段 尽量使用 ` ` 括起来
-- AUTO INCREMENT 自增
-- 字符串使用单引号括起来!
-- 所有语句后面加,(英文的),最后一个不用加
-- PRIMARY KEY() 主键,一般一个表只有一个唯一的主键
--格式
CREATE TABLE IF NOT EXISTS `表名`(
`字段名` 列类型 [属性] [索引] [注释]
`字段名` 列类型 [属性] [索引] [注释],
`字段名` 列类型 [属性] [索引] [注释],
………………
`字段名` 列类型 [属性] [索引] [注释]
)[表类型] [字符集设置] [注释]
SHOW CREATE DATABASE stu -- 查看创建数据库的语句
--结果展示
CREATE DATABASE `stu` /*!40100 DEFAULT CHARACTER SET utf8 */
SHOW CREATE TABLE student1 -- 查看student1数据表的定义语句
--结果展示
CREATE TABLE `student1` (
`id` int(10) NOT NULL,
`name` varchar(100) NOT NULL,
`age` int(3) NOT NULL,
`user` varchar(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
DESC student1 -- 显示表的具体结构
2.5数据表的类型
--关于数据库引擎
/*
INNODB 默认使用
MYISAM 早些年使用
*/
MYISAM | INNODB | |
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间大小 | 较小 | 较大,约为MYISAM的两倍 |
- MYISAM 节约空间,速度较快
- INNODB 安全性搞,书屋的处理,多表多用户操作
所有数据库文件都在data目录下
CHARSET=utf8 --设置数据库表的字符集编码
不设置的话,会是mysql默认的编码——Latin1(它不支持中文)
2.6修改删除表
修改:
-- 修改表名 ALTER TABLE 旧表名 RENAME as 新表名
ALTER TABLE student1 RENAME as student
-- 增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE student ADD sex INT(4)
-- 修改表的字段 (重命名 ,修改约束)
-- ALTER TABLE 表名 MODIFY 字段名 列属性
ALTER TABLE student MODIFY sex VARCHAR(4) -- 修改约束 MODIFY
-- ALTER TABLE 表名CHANGE 原字段名 新字段名 列属性
ALTER TABLE student CHANGE sex sex1 INT(2) -- 字段重命名 CHANGE
-- 删除表的字段
-- ALTER TABLE 表明 DROP 字段名
ALTER TABLE student DROP sex1
删除:
--删除表(如果表存在就删除)
DROP TABLE IF EXISTS student
注意:
- 所有的创建和删除操作尽量加上判断,以免报错
- ` ` 字段名,使用这个符号包裹
- 注释 -- 或者 /* */
- 所有符号全部使用英文!
3、MySQL数据管理
3.1外键(了解即可)
方式一:在创建表的时候,增加约束(麻烦,比较复杂)
CREATE TABLE `grade`(
`gradeid` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
--学生表的gradeid 字段 要去引用年级表的gradeid
--定义外键key
--给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student2`(
`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 '性别',
`address` VARCHAR(100) NOT NULL COMMENT '家庭住址',
`email` VARCHAR(50) NOT NULL COMMENT '邮箱',
PRIMARY KEY (`id`),
KEY `KY_gradeid` (`gradeid`), --第一步
CONSTRAINT `KY_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`);
--ALTER TABLE `表明` ADD CONSTRAINT `约束名` FOREIGN KEY(`作为外键的列`) REFERENCES `那个表`(`那个变量`);
以上的操作都是物理外键,数据库级别的外键不建议使用(避免因为数据库过多造成困扰,了解即可)
最佳实践
- 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
- 若像使用多张表的数据,想使用外键,可以用程序去实现
3.2DML语言(全部记住)
- insert
- update
- delete
3.3添加
insert
--插入语句(添加)
INSERT INTO `表名`(`字段名`)VALUES('值')
--在编写插入语句时,一定要数据和字段一一对应
--插入多个字段
INSERT INTO `student1`(`name`,`pwd`,`sex`,`email`,`address`) VALUES('小伟','123','男','58','892'),('小关','123','男','58','195'),('小可','123','女','25','48*')
注意事项:
- 字段和字段之间使用 英文逗号 隔开
- 字段是可以省省略的,但是后面的值必须与表中一一对应
- 可以同时插入多条数据,但是 VALUES 后面的值,需要使用英文逗号隔开 VALUES(),(),()……
- 所有符号都必须使用英文!!!
3.4修改
updata UPDATE `表名` SET `字段名`='修改后的值' WHERE [条件]
-- 修改名字
UPDATE `student1` SET `name`='小顺' WHERE `id`=2;
-- 不指定条件的情况下,会默认修改所有表
UPDATE `student1` SET `name`='小顺' ;
-- 修改多个属性,使用 逗号, 隔开
UPDATE `student1` SET `name`='李华',`pwd`='321' WHERE `sex` = '男';
条件:
操作符 | 含义 |
= | 等于 |
<>或!= | 不等于 |
> | 大于 |
< | 小于 |
AND | 和 |
OR | 或 |
BETWEEN……AND…… | 在什么和什么之间 |
>= | 大于等于 |
<= | 小于等于 |
-- 通过多个条件定位数据
UPDATE `student1` SET `name`='王国',`pwd`='321' WHERE `sex` = '女' AND `pwd` = 123;
注意:
- 字段名尽量带上``
- 条件,。筛选的条件,如果没有指定,则会修改所有的列
- 修改后的值 ,可以是一个具体的值,也可以是一个变量
- 多个设置的属性之间,使用英文逗号隔开 多个条件之间,使用 AND隔开
- 所用符号均用英文
3.5删除
delete命令 delete from 表名 [where 条件]
-- 删除 `student1` 这个表
DELETE FROM `student1` ;
-- 删除指定数据
DELETE FROM `student1` WHERE `id`=1;
TRUNCATE 命令
作用:完全清空一个数据库表,不会改变表的结构和索引约束
-- 清空 student1 表
TRUNCATE `student1`
DELETE和TRUNCATE的区别
相同点:都能删除数据,都不会删除表结构
不同点:
- TRUNCATE 重新设置 自增列计数器会归零
- TRUNCATE 不会影响事物
DELETE FROM `student1` -- 不会影响自增 TRUNCATE TABLE `student1` -- 自增会归零
DELETE 删除的问题
- INNODB引擎 自增列会从1开始(存在内存当中,断电即失)
- MyISAM引擎 继续从上一个自增量开始(存在文件中,不会丢失)