MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL是一种关系型数据库管理系统,关系型数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

快速入门

下载MySQL

MySQL官网

创建与删除数据库

1
2
3
CREATE DATABASE 数据库名 DEFAULT CHARACTER SET 字符编码;    -- 创建数据库

DROP DATABASE 数据库名; -- 删除数据库

查看数据库:

1
2
show databases; -- 查看数据库

查看数据库编码

1
2
3
4
5
select
schema_name,default_character_set_name
frominformation_schema.schemata
whereschema_name = 'test';

选择数据库

1
2
USE 数据库名;   -- 选择数据库

字符类型

MySQL数据类型 含义
char(n) 固定长度,昀多255个字符
tinytext 可变长度,昀多255个字符
varchar(n) 可变长度,昀多65535个字符
text 可变长度,昀多65535个字符
mediumtext 可变长度,昀多2的24次方-1个字符
longtext 可变长度,昀多2的32次方-1个字符

char和varchar:

1.char长度固定,即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定长。
2.varchar可变长度,可以设置昀大长度;适合用在长度可变的属性。
3.text不设置长度,当不知道属性的昀大长度时,适合用text。
按照查询速度:char昀快,varchar次之,text昀慢。

字符串型使用建议:

1.经常变化的字段用varchar
2.知道固定长度的用char
3.尽量用varchar
4.超过255字符的只能用varchar或者text
5.能用varchar的地方不用text

创建表、删除表、修改表名与查看已创建的表

1
2
3
4
5
6
7
8
9
10
11
-- 创建一个employees表包含雇员ID,雇员名字,雇员薪水
create table employees(employee_id
int,employee_name
varchar(10),salary
float(8,2));

show tables; -- 查看已创建的表

alter table employees rename emp; -- 修改表名为emp

drop table employees; -- 删除employees表

修改列名、类型、删除列和增加列

1
2
3
4
5
6
7
8
9
10
11
12
-- 将emp表中的employee_name修改为name。
alter table emp change column employee_name name varchar(20);

--将emp表中的name的长度指定为40
alter table emp modify name varchar(40);

--在emp表中添加佣金列,列名为commission_pct。
alter table emp add column commission_pct float(4,2);

--删除emp表中的commission_pct。
alter table emp drop column commission_pct;

MySQL中的约束

约束概述

数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。

1.主键约束(Primary Key) PK
主键约束是使用昀频繁的约束。在设计数据表时,一般情况下,都会要求表中设置一个主键。主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号是唯一的。
2.外键约束(Foreign Key) FK
外键约束经常和主键约束一起使用,用来确保数据的一致性。
3.唯一性约束(Unique)
唯一约束与主键约束有一个相似的地方,就是它们都能够确保列的唯一性。与主键约束不同的是,唯一约束在一个表中可以有多个,并且设置唯一约束的列是允许有空值的。
4.非空约束(Not Null)
非空约束用来约束表中的字段不能为空。
5.检查约束(Check)
检查约束也叫用户自定义约束,是用来检查数据表中,字段值是否有效的一个手段,但目前MySQL数据库不支持检查约束。

添加主键约束(Primary Key)

1.单一主键
使用一个列作为主键列,当该列的值有重复时,则违反唯一约束。
2.联合主键
使用多个列作为主键列,当多个列的值都相同时,则违反唯一约束。

修改表添加主键约束

1
2
3
--将emp表中的employee_id修改为主键。
alter table emp add primary key(employee_id);

主键自增长

MySQL中的自动增长类型要求:

1.一个表中只能有一个列为自动增长。
2.自动增长的列的类型必须是整数类型。
3.自动增长只能添加到具备主键约束与唯一性约束的列上。
4.删除主键约束或唯一性约束,如果该列拥有自动增长能力,则需要先去掉自动增长然后在删除约束。

删除主键

1
2
3
4
--删除emp表中的employee_id主键约束。
alter table emp modify employee_id int --去掉自动增长

alter table emp drop primary key; --删除主键

添加外键约束(Foreign Key)

修改表添加外键约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--修改departments表,向department_id列添加主键约束与自动递增。
alter table departments add primary
key(department_id);
alter table departments modify
department_id int auto_increment;


--修改emp表,添加dept_id列。
alter table emp add columndept_idint;

--向emp表中的dept_id列添加外键约束。
alter table emp add constraint emp_fk
foreign key(dept_id) references
departments(department_id);

删除外键约束

1
2
--删除dept_id的外键约束。
alter table emp drop foreign key emp_fk;

添加唯一性约束(Unique)

修改表添加唯一性约束

1
2
3
--向emp表中的name添加唯一约束。
alter table emp add constraint emp_uk
unique(name);

删除唯一性约束

1
2
--删除name的唯一约束。
alter table emp drop keyemp_uk;

添加非空约束(Not Null)

修改表添加非空约束

1
2
--向emp表中的salary添加非空约束。
alter table emp modify salary float(8,2) not Null;

删除非空约束

1
2
3
--删除emp表中salary的非空约束。
alter table emp modify salary float(8,2)
Null;

创建表时添加约束

1
2
3
4
5
6
7
8
--查询表中的约束信息:
SHOW KEYS FROM 表名;


--创建depts表包含department_id该列为主键且自动增长,department_name列不允许重复,location_id列不允含有空值。
create table depts(department_id int primary
key auto_increment,department_name
varchar(30) unique,location_id int not null);

MySQL中DML操作

添加数据(INSERT)

1
2
3
4
5
6
7
8
--向departments表中添加一条数据,部门名称为market,工作地点ID为1。
insert into
departments(department_name,location_id) --选择插入
values("market",1);

--如果主键是自动增长,需要使用default或者null或者0占位。
insert into departments
values(0,"teaching",4);

默认值处理(DEFAULT)

在MySQL中可以使用DEFAULT为列设定一个默认值。如果在插入数据时并未指定该列的值,那么MySQL会将默认值添加到该列中。

创建表时指定列的默认值

1
2
3
4
5
6
CREATE TABLE 表名(列名类型default默认值,......);

--创建emp3表,该表包含emp_id主键且自动增长,包含name,包含address该列默认值为”未知”。
create table emp3(emp_id int primary key
auto_increment,name varchar(10),address
varchar(50) default 'Unknown');

修改表添加新列并指定默认值

1
2
3
4
5
ALTER TABLE 表名 ADD COLUMN 列名 类型 DEFAULT 默认值;

--修改emp3表,添加job_id该列默认值为0。
alter table emp3 add column job_idint
default 0;

插入数据时的默认值处理

如果在插入数据时并未指定该列的值,那么MySQL会将默认值添加到该列中。如果是完全项插入需要使用default来占位。

1
2
3
4
--向emp3表中添加数据,要求address列与job_id列使用默认值作为该列的值。
insert into emp3(name) values("admin");
insert into emp3
values(default,"oldlu",default,default);

更新数据(UPDATE)

注意:更新语句中一定要给定更新条件,否则表中的所有数据都会被更新。

1
2
3
4
5
6
UPDATE 表名 SET 列名=值,列名=WHERE 条件;


--更新emp3表中的id为1的数据,添加address为BeiJing。
update emp3 set address = "BeiJing" where
emp_id = 1;

删除数据(DELETE)

DELETE删除数据

注意:在DELETE语句中,如果没有给定删除条件则会删除表中的所有数据。

1
2
3
4
DELETE FROM 表名 WHERE 条件;

--删除emp3表中emp_id为1的雇员信息。
delete from emp3 where emp_id = 1;

TRUNCATE清空表

1
2
3
4
TRUNCATE TABLE 表名;

--删除emp3表中的所有数据。
truncate table emp3;

清空表时DELETE与TRUNCATE区别

1.truncate是整体删除(速度较快),delete是逐条删除(速度较慢);
2.truncate不写服务器log,delete写服务器log,也就是truncate效率比delete高的原因;
3.truncate是会重置自增值,相当于自增列会被置为初始值,又重新从1开始记录,而不是接着原来的值。而delete删除以后,自增值仍然会继续累加。

MySQL查询数据

SELECT基本查询

SELECT语句的功能

SELECT语句从数据库中返回信息。使用一个SELECT语句,可以做下面的事:
1.列选择:能够使用SELECT语句的列选择功能选择表中的列,这些列是想要用查询返回的。当查询时,能够返回列中的数据。
2.行选择:能够使用SELECT语句的行选择功能选择表中的行,这些行是想要用查询返回的。能够使用不同的标准限制看见的行。
3.连接:能够使用SELECT语句的连接功能来集合数据,这些数据被存储在不同的表中,在它们之间可以创建连接,查询出我们所关心的数据。

SELECT基本语法

1
2
SELECT      * | {[DISTINCT] column | expression [alias], ... }
FROM table;

基本SELECT语句

在昀简单的形式中,SELECT语句必须包含下面的内容:
1.一个SELECT子句,指定被显示的列
2.一个FROM子句,指定表,该表包含SELECT子句中的字段列表

在语法中:

语句 含义
SELECT 是一个或多个字段的列表
* 选择所有的列
DISTINCT 禁止重复
column expression
alias 给所选择的列不同的标题
FROM table 指定包含列的表

查询中的列选择

选择所有列

用跟在SELECT关键字后面的星号(*),你能够显示表中数据的所有列。

1
2
3
4
SELECT * FROM departments;

--查询departments表中的所有数据。
select * from departments;

选择指定列

能够用SELECT语句来显示表的指定列,指定列名之间用逗号分隔。

1
2
3
4
5
6
7
SELECT * FROM departments;

--查询departments表中的所有数据。
select department_id, location_id from departments;

--查询departments表中所有部门名称。
select department_name from departments;