MySQL概述
SQL语言
MySQL(Structured Query Language)结构化查询语言,它是一门语言,操纵数据库,它有如下的一些部分:
- DDL(数据定义语言):create、drop和alert,对结构的操作。
- DCL(数据控制语言):revoke和grant,权限的操作(了解)
- DML(数据操纵语言):insert、update和delete。对数据的操纵
- DQL(数据查询语言):select。对数据的查询。
名词解释
- DB:数据库
- DBMS:数据库管理系统,对数据库管理的软件,如:MySQL、Oracle、SQL Server…
- DBA:数据库管理员
- 列:域,属性、对对象的描述
- 行:对象,一笔记录
- 表:表格,集合
数据库相关命令
创建数据库
create database 数据库名称;
删除数据库
drop database 数据库名称;
使用数据库
use 数据库名称;
表相关命令
创建表语句
create table 表名
(
列名 数据类型 [约束] [注释],
列名 数据类型 [约束] [注释],
.....
列名 数据类型 [约束] [注释]
);
#例如
create table students
(
stuid int primary key comment '学号', #primary key:主键,代表唯一
stuname varchar(20) not null comment '姓名',#varhcar(20)代表最多20个字符
stusex char(1) check(stusex='男' or stusex='女') comment '性别',
stubrithday date ,#date:年月日
stuphone varchar(11) unique comment '手机号',#unique:唯一
stuaddress varchar(255) default('陕西省西安市') comment '住址'
);
约束
对这一列的数据更新时有特定条件的情况
约束名 | 说明 | 备注 |
---|---|---|
primary key | 主键约束 | 一个表只有一个主键约束 当前列唯一,非空 |
not null | 非空约束 | |
unique | 唯一约束 | 列值不能重复 |
default | 默认值约束 | 当不录入值,使用默认值 |
check | 检查约束 | 录入的值必须符合要求 |
数据类型
日期型
类型名 | 说明 | 备注 |
---|---|---|
datetime | 时间日期 | yyyy-MM-dd hh:mm:ss |
date | 日期 | yyyy-MM-dd |
time | 时间 | hh:mm:ss |
数值型
类型名 | 说明 | 备注 |
---|---|---|
int | 普通整型 | |
float | 单精度浮点型 | |
decimal(m,d) | 数值型 | m:有效数字 d:小数点后几位 |
字符型
类型名 | 说明 | 备注 |
---|---|---|
char(最多存放长度) | 定长字符串 | 如果不够,使用空格补齐 |
varchar(最多存放长度) | 变长字符串 | |
longtext | 最长字符串 | 可变长度,最多2的32次方-1个字符 |
空型
删除表
drop table 表名;
录入数据
单行录入
insert into 表名[(列字段列表)] values(值列表);
##插入时的注意事项:
#1.插入时不能只插入半行或者部分列信息,如果未赋值自动填充null
insert into students(stuid,stuphone) values(6,'22223333');#×
insert into students(stuid,stuname) values(8,'部分列');#√
#2.列字段列表可以省略,那么值列表要按照物理顺序依次赋值,而且不能省略部分列
insert into students values (6,'李四','男','2011-1-1','18099998888','陕西省宝鸡市');
#3.主键一般是自动增长的 : auto_increment,
create table students2
(
stuid int primary key auto_increment,
stuname varchar(6) not null,
stusex char(1)
);
insert into students2 values(null,'aaa','男');
#4.如果表中有默认值,赋值时可以使用关键字default赋值
insert into students values(7,'李四','男','2011-1-1','18099996666',default);
多行录入
#插入多行数据
insert into students2
select null,'bb','男' union
select null,'cc','男' union
select null,'dd','女' union
select null,'ee','男' ;
#重复行数据不会录入
insert into students2
select null,'bb2','男' union
select null,'bb2','男' union
select null,'ee','女' union
select null,'ff','男' ;
表复制(面试考点)
insert into 表名 select 列表 from 表;#新表要求存在,只是数据的复制
create table 新表名 as select 列表 from 旧表名; #新表不能存在,复制的是数据和结构
修改表中的数据
update 表名 set 列=值,列=值,...列=值 [where 条件];
删除表中的数据
delete from 表名 [where 条件];
truncate table 表名;
##drop、delete和truncate之间的区别?
#1.drop是删除结构,而delete和truncate删除的是数据;
#2.delete可以部分删除,也可以全表删除,而truncate只能删除全表;
#3.delete删除时写日志,有事务,可恢复,删除慢,而truncate不写日志,没有事务,不可恢复,删除快。
数据的完整性
录入到表中的数据应该是完整的,完整 = 准确 + 可靠
- 域完整性:列完整性,需要保证这一列中录入的数据符合要求,通过check约束。
- 实体完整性:行的完整性,需要保证行不能重复,通过主键约束。
- 引用完整性:使用另一张表中数据时,需要保证这个数据在另一张表中存在,通过外键约束。
- 自定义完整性:行业规则和规范。
数据库的事务
一般指要做的或所做的事情,在计算机中是一段程序的执行单元。事务一般由事务开始和事务结束之间执行的全体操作组成。
事务的特性(ACID):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。