约束
在创建表的同时可以给表的字段添加相应的约束,添加约束的目的是为了保证表中的数据的合法性、有效性、完整性。常见的约束有哪些呢?
非空约束(not null):约束的字段不能为null。
唯一约束(unique):约束的字段不能重复。但可以为null。
主键约束(primary key):约束的字段不能为null,也不能重复。
外键约束(foreign key):数据要是包含在参照表中的数据。
检查约束(check):这个是Oracle数据库有的,mysql目前不支持这个。
create table t_user(
id int primary key,//列级约束
pnumber int unique,//列级约束
username varchar(255) not null,
usercode varchar(255) not null,
unique(username,usercode),//表级约束
password varchar(255) not null
);
not null没有表级约束。
unique(XXX,xxx)代表着XXX与xxx联合起来不能重复。
第一范式:要求任何一张表都应该有主键。
主键作用:唯一标识。
主键的分类
字段数量:单一主键、复合主键(不建议使用,违背三范式)。
主键性质:自然主键(与业务无关联的复合数)、业务主键(主键值和系统的业务挂钩,例如,身份证号码,银行卡号,业务的变化可能会有变动,也不建议使用)。
注意:一张表的主键约束只能有一个。
主键值自增
create table t_user(
id int primary key auto_increment,//自动增加一个数字
username varchar(255)
);
auto_increment自动增加数字。
外键约束
外键约束:foreign key
删除数据时,要先删除子表。
添加数据时,要先添加父表。
创建表时,创建父表。
删除表时,要先删除子表。
create table t_class(
cno int,
cname varchar(255),
primary key(cno)
);
create table t_student(
sno int,
sname varchar(255),
classno int,
foreign key(classno) references t_class(cno)
)
foreign key(字段) references 表名(字段)
外键只是可以为NULL的,外键引用的字段可以不是主键但至少有unique约束。
存储引擎
不同的存储引擎有着不同的存储方式。
一条完整的建表语句:
CREATE TABLE `t_student` (
`no` bigint DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`sex` varchar(255) DEFAULT NULL,
`brith` char(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3
注意:在mysql标识可以使用飘号括起来。
存储引擎只有在mysql中存在。
mysql中常见的存储引擎:
查看当前mysql支持的存储引擎。
show engines\G
通过查看表结构的命令来查看表所使用的引擎。
改变表所用的引擎:
alter table 表名 engine = 引擎名称;
+-----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql> show engines\G;
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 5. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 8. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
9 rows in set (0.00 sec)
三种常用的存储引擎:
1.
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
三个文件表示各表
xxx.frm
xxx.MYD
xxx.MYI
可以转化为压缩,只读表来节省空间
不支持事务。
2.
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
在数据库目录中用.flm格式文件表示。
支持事务。
安全。
mysql服务器崩溃可以自动恢复。
重量级引擎。
3.
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
在数据库目录中以.flm文件存在,不支持事务,数据容易丢失,数据存储在内存中,查询速度最快。