MySQL Day2.1

目录

2.4创建数据库表(重点)

 2.5数据表的类型

2.6修改删除表

3、MySQL数据管理

3.1外键(了解即可)

3.2DML语言(全部记住)

3.3添加

3.4修改

3.5删除


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*')

 注意事项:

  1. 字段和字段之间使用 英文逗号 隔开
  2. 字段是可以省省略的,但是后面的值必须与表中一一对应
  3. 可以同时插入多条数据,但是 VALUES 后面的值,需要使用英文逗号隔开  VALUES(),(),()……
  4. 所有符号都必须使用英文!!!

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引擎   继续从上一个自增量开始(存在文件中,不会丢失)

点我来首歌放松一下吧!

猜你喜欢

转载自blog.csdn.net/m0_52991090/article/details/121149410