MySQL(day 2)
1. 代码
show create database 数据库名;--查看创建数据库语句
show create table 表名;--查看创建数据表语句
DESC 表名; --显示表的结构
2. 数据库引擎
MYISAM(早期使用) | INNODB(默认使用) | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持(表锁) | 支持(行锁) |
外键约束 | 支持 | 不支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约2倍 |
常规使用操作:
- MYISAM 节约空间,速度较快;
- INNODB 安全性高,事物的处理,多表多用户操作;
在物理空间存在的位置
所有的数据库文件都存在data目录下,本质还是文件的存储;一个文件夹对应一个数据库;
MYSQL 引擎在物理文件上的区别
- INNODB 在数据库表中只有一个*.frm 文件,以及上级目录下的 iddata1文件;
- MYISAM对应文件
- *.frm 表结构的定义文件
- *.MYD 数据文件(data)
- *.MYI 索引文件(index)
设置数据表的字符集编码
CHARSET=utf8
注:不设置的话会是MYSQL 默认的字符集编码(不支持中文);
MYSQL的默认编码是Latin1,不支持中文,因此建议建表是加上‘CHARSET=utf8’语句
3.修改表
ALTER TABLE 旧表名 RENAME AS 新表名 --修改表名
ALTER TABLE 表名 ADD 字段名 列属性 --修改表的字段
ALTER TABLE 表名 MODIFY 字段名(age) 列属性(VARCHAR(11)) --修改表的字段之修改约束;
ALTER TABLE 表名 change 字段名(age) 新字段名(age1) 列属性(VARCHAR(11)变为int(1)) --修改表的字段之字段重命名;
/*MODIFY 与 CHANGE的区别:change>modify;*/
ALTER TABLE 表名 drop 字段名(age) --删除表的字段;
注:所有的创建和删除加上判断(IF EXISTS),以免报错
4.外键(了解)
方式一:创建表时
- 定义外键key;
- 给外键添加约束(执行引用)references 引用;
create tables 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'性别',
'brithday' datetime default 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 `drade`(`gradeid`)
)engine=innodb default charset=utf8 --主表
create tables if not exists 'grade'(
'gradeid' int(4) not null auto_increment comment'年级id',
'gradename' varchar(30) not null comment'年级名称',
primary key('gradeid')
)engine=innodb default charset=utf8 --从表
注:删除有外键关系的表的时候,必须要先删除引用别人的表(从表),在删除被引用的表(主表);
方式二:创建表成功后添加外键约束
/*创建表的时候没有外键关系*/
ALTER TABLE `表` ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 那个表(哪个字段)
以上操作都是物理外键,属于数据库级别;
最佳实践:
- 使用多张表数据/外键,利用程序实现;
5.DML语言(数据操作语言)
5.1添加(insert)
insert into 表名 ([字段名1,字段2,字段3])values('值1','值2','值3',···)
/* insert into `student`(`name`,`pwd`,`sex`)VALUES(`张三`,`aaaa`,`男`)
或者 insert into `student` (`name`,`pwd`,`sex`) VALUES(`张三`,`aaaa`,`男`),(`李四`,`bbbb`,`女`)
*/
insert into 表名 ([字段名1,字段2,字段3])values('值1'),('值2')··· --插入多个字段
/*insert into `grade`(`gradename`) value(`大一`,`大二`) */
插入语句时,数据与字段一一对应!
注:字段与字段之间使用英文逗号隔开;
字段可以省略的,但是后面的值必须要一一对应,不能少;
可以同时插入多条数据,VALUES后面的值,需要使用隔开即可;
5.2修改
update
修改谁
setname
=WHILE Id=1;
UPDATE `student` SET `name`=`XX` WHERE id=1;
UPDATE `student` SET `name`=`XXX`; --不指定条件的情况下,会改动所有表!
UPDATE `student` SET `name`=`XXX`,`email`=`XXX` WHERE id=1; --修改多个属性,用逗号隔开;
/*提炼语法:UPDATE 表名 set colnum_name=value,[colnum_name = value,...] WHERE [条件] */
条件:WHERE 子句 运算符
操作符 | 含义 |
---|---|
= | |
<>或!= | 不等于 |
>/</>=/<= | |
BETWEEN…AND… | 在某个范围 [2,5] |
AND | 和 |
OR | 或 |
UPDATE `student` SET `name`=`XX` WHERE `name`=`XXXX` AND sex = `X`; --通过多个条件定位数据
/*语法:UPDATE 表名 set column_name = value,[column_name = value,...] WHERE [条件] */
注:value可以是一个具体的值,也可以是一个变量(例如时间);
UPDATE `student` SET `birthday`= CURRENT_TIME WHERE `name`=`XXXX` AND sex=`X`;
5.3删除
delete 命令
DELete from `student`;--删除数据
DELETE FROM `student` WHERE id=1; --删除制定数据
TRUNCATE 命令
TRUNCATE `student`; --清空student表
作用:完全清空一个数据表,表的结构和索引约束不变;
两个语句的区别:
-
TRUNCATE 重新设置自增列,计数器归零;
-
TRUNCATE 不会影响事务;
-
delete 不会影响自增;# 学习目标: