一、存储引擎

1.什么是存储引擎?

库就是文件夹,表就是文件,文件都会有文件的格式,存储引擎就是文件格式.

存储引擎就是文件的类型(格式),文本文件有TXT类型、图片有JPG类型、视频有MP4格式.

mysql中最常用的是InnoDB存储引擎(格式)

2.使用存储引擎

1 # 创建表是指定存储引擎
2 create table t1(
3 id int,
4 name char
5 )engine=innodb;
6
7 # 查看表达存储引擎
8 show create table t1;

二、数据类型

1.数字

1.1整型:tinyinit, int, bigint

存储年龄,等级,ID,各种号码等

1.2小数(浮点型):float, double, decimal

存储薪资,身高,体重,体质参数等

2.字符串

2.1char(10)

简单粗暴,浪费空间,存取速度快

2.2varchare

精准,节省空间,存取速度慢

2.3sql对字符串的优化

创建表时,定长(比如性别)的类型往前放,变长(比如地址)的往后放

超过255个字符,就把文件路径存放到数据库中,比如图片,视频等找一个文件服务器,数据库中只存路径或URL.

3.时间类型:datetime

date, time, datetime, temestamp, year

now()

4.枚举类型与集合类型

enum单选

set多选

三、库

1 # 1. 新增库
2 create database db10 charset utf8;
3
4 # 2. 删除库
5 drop database db10;
6
7 # 3. 修改数据库
8 alter database db10 charset utf8;
9
10 # 4. 查看数据库
11 show databases;
12 show create database db10;
13 select database(); # 查看当前已经选择的数据库
14
15 # 5. 选择数据库
16 use db10;

四、表

1.增删改查
1 # 1. 创建表
2 create table t1(
3 id int,
4 name varchar(50),
5 sex enum('male', 'female'),
6 age int(3)
7 );
8
9 # 2. 删除表
10 drop table t1;
11
12 # 3. 修改表
13 # 3.1 修改存储引擎
14 alter table t1
15 engine = innodb;
16 # 3.2 添加字段
17 alter table t1
18 add name varchar(20) not null,
19 add age int(3) not null default 22;
20 alter table student10
21 add stu_num varchar(10) not null after name; //添加name字段之后
22 alter table student10
23 add sex enum('male', 'female') default 'male' first; //添加到最前面
24 # 3.3 删除字段
25 alter table student10
26 drop sex;
27 # 3.4 修改字段类型
28 alter table student10
29 modify age int(3);
30 alter table student10
31 modify id int(11) not null primary key auto_increment; //修改为主键
32 # 3.5 增加约束(针对已有的主键增加auto_increment)
33 alter table student10
34 modify id int(11) not null primary key auto_increment;
35 alter table student10
36 modify id int(11) not null auto_increment;
37 # 3.6 对已经存在的表增加复合主键
38 alter table service2
39 add primary key (host_ip, port);
40 # 3.7 增加主键
41 alter table student1
42 modify name varchar(10) not null primary key ;
43 # 3.8 增加主键和自动增长
44 alter table student1
45 modify id int not null primary key auto_increment;
46 # 3.9 删除主键
47 alter table student10
48 modify id int(10) not null ; //删除自增约束
49 alter table student10
50 drop primary key ; //删除主键
51
52 # 4. 查看表结构
53 describe t1;
54 desc t1; //简写形式
55 show create table t1\G; //查看表详细结构,可加\G
56
57 # 5. 复制表
58 create table new_service
59 select * from service; //复制表结构+记录(key不会复制:主键,外键,和索引)
60 create table new_service
61 select * from service where 1=2; //只复制表结构,因为条件为假,查不到任何记录.

2.完整性约束条件

约束性条件和数据类型的宽度一样,都是可选参数

作用:用于保证数据的完整性和一致性

主要分为:

primary key (pk)  标识该字段为该表的主键,可以唯一的标识记录

foreign key (fk) 标识该字段为该表的外键

not null  标识该字段不能为空

unique key (uk)  标识该字段的值是唯一的

auto_increment  标识该字段的值自动增长(数据类型,而且为主键)

default  为该字段设置默认值

unsigned 无符号

zerofill  使用0填充

说明:

1.是否允许为空,默认null,可设置为not null,字段不允许为空,必须赋值

2.字段是否有默认值,缺省的默认值是null,如果插入记录时不给字段赋值,此字段使用默认值

sex enmu('male', 'female') not null default 'male'

age int usigned not null default 20 必须为正值(无符号),不允许为空,默认20

3.是否是KEY

主键 primary key

外键 foreign key

索引 (index, unique...)

3.完整性约束条件操作实例

3.1unique设置唯一约束

1 # 方法一:
2 create table t2(
3 id int,
4 name varchar(20) unique,
5 comment varchar(100)
6 );
7 # 方法二:
8 create table t3(
9 id int,
10 name varchar(20),
11 comment varchar(100),
12 constraint uk_name unique (name)
13 );
1 # 联合唯一
2 create table service(
3 id int primary key auto_increment,
4 name varchar(20),
5 host varchar(15) not null,
6 port int not null ,
7 unique (host, port)
8 );

3.2primary key字段的值不为空且唯一

一个表中可以:

单列做主键,not null + unique 或 primary key

多列做主键(符合主键),

但一个表内只能有一个主键primary key

1 # 多列主键
2 create table t4(
3 ip varchar(15),
4 port char(5),
5 service_name varchar(10) not null,
6 primary key (ip, port)
7 );
3.3auto_increment自增长字段
1 create table student(
2 id int primary key auto_increment,
3 name varchar(20),
4 sex enum('male', 'female') default 'male'
5 );
3.4foreign key关联其它表

先建父表,再建关联子表,删除父表记录,子表中对应的记录跟着删.

表之间的关系:一对一,多对一,多对多

五、记录

1.增

2.删

3.改

4.查