数据库复习-2

数据库复习-2

SQL语法学习

创建表

--字符串使用用''


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(100) default null comment  '邮箱',
    primary key(`id`)
    
) ENGINE=INNODB DEFAULT CHARSET=utf8

--show create table student查看创表语句
--desc student 显示表结构

数据库引擎

MyISAM和InnoDB(默认使用)的区别

MyISAMInnoDB
事务支持noyes
数据行锁定noyes
外键约束noyes
全文索引yesno
表空间大小较小较大约为MyISAM两倍

常规操作

MyISAM:节约空间 速度快

InnoDB :安全性高 事务的处理 多表多用户

在物理的存储位置

所有数据库文件都在data目录下 一个文件夹就对应一个数据库

本质还是文件存储!

Mysql引擎在物理文件上的区别

​ InnoDB 在数据表中只有一个*.frm文件,以及上级目录下的ibdata1文件

​ MyISAM对应的文件 *.frm --表结构的定义文件

​ *.MYD --数据文件

​ *.MYI --索引文件

设置数据库表的字符集编码

CHARSET=utf8

不设置会出问题,它默认的Latin1是不支持中文

修改和删除表

ALTER TABLE  student RENAME  student1 --修改表名
ALTER TABLE  student1 add age INT(11) --添加表字段
ALTER TABLE  student1 MODIFY age VARCHAR(11) --修改约束
ALTER TABLE  student1 CHANGE age age1 INT(11) --重命名


ALTER TABLE  student1 DROP age1 --删除字段

drop table if exists student1 --删除表

mysql数据管理

外键

最佳实践

数据库就是单纯的表,只用来存数据,其他实现用程序实现

以下操作是物理外键,数据库级别的外键,不建议使用

一、基本概念

1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。

2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。

3、如果需要更好的性能,并且不需要完整性检查,可以选择使用MyISAM表类型,如果想要在MySQL中根据参照完整性来建立表并且希望在此基础上保持良好的性能,最好选择表结构为innoDB类型。

4、外键的使用条件

① 两个表必须是InnoDB表,MyISAM表暂时不支持外键

② 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;

③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

5、外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作

mysql> CREATE TABLE tb_dept1
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(22) NOT NULL,
    -> location VARCHAR(50)
    -> );
Query OK, 0 rows affected (0.37 sec)


mysql> CREATE TABLE tb_emp6
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> CONSTRAINT fk_emp_dept1
    -> FOREIGN KEY(deptId) REFERENCES tb_dept1(id)
    -> );
Query OK, 0 rows affected (0.37 sec)

mysql> DESC tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  | MUL | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (1.33 sec)

DML语言

数据操作语言:insert update delete

添加

mysql> use RUNOOB;
Database changed
mysql> INSERT INTO runoob_tbl 
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 PHP", "菜鸟教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 MySQL", "菜鸟教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');
Query OK, 1 rows affected (0.00 sec)
--数据和字段要一一对应
--主键自增可以省略 如果不写表的字段他就会一一匹配
--字段和字段之间要用逗号隔开

修改

--在 tb_courses_new 表中,更新所有行的 course_grade 字段值为 4
mysql> UPDATE tb_courses_new
    -> SET course_grade=4;
--在 tb_courses 表中,更新 course_id 值为 2 的记录,将 course_grade 字段值改为 3.5,将 course_name 字段值改为“DB”
mysql> UPDATE tb_courses_new
    -> SET course_name='DB',course_grade=3.5
    -> WHERE course_id=2;

删除

--删除 tb_courses_new 表中的全部数据
DELETE FROM tb_courses_new;
--在 tb_courses_new 表中,删除 course_id 为 4 的记录、
mysql> DELETE FROM tb_courses
    -> WHERE course_id=4;

TRUNCATE

完全清空一个数据表数据,表的结构和约束不会变

TRUNCATE   `student`

DELETE和TRUNCATE区别

相同点:都能删除数据,都不会删除表结构

不同:

​ TRUNCATE 重新设置自增列 计数器会归零

​ TRUNCATE不会影响事务

DELETE删除的问题,重启数据库,现象

​ InnoDB 自增会从1开始(存在内存中断电即失)

​ MyISAM 继续上一个增量开始 (存在文件中不会丢失)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值