MySQL入门

要学习,先开机:mysql -u root -r

你还得学会选择数据库:use database_name;

基础

每一行(Record),称为记录

每一列(Column),称为字段

字段定义了数据类型(整型、浮点型、字符串、日期等),以及是否允许为NULL。注意NULL表示字段数据不存在。一个整型字段如果为NULL不表示它的值为0,同样的,一个字符串型字段为NULL也不表示它的值为空串''

正常,概念不同。另外,字段尽量不要使用NULL,优势:简化查询条件,加快查询速度,也利于应用程序读取数据后无需判断是否为NULL。

主键是记录的唯一标识。主键是必要的。主键有大概有以下几种:

  • 自增整数主键
  • 全局唯一GUID类型:使用一种全局唯一的字符串作为主键,类似8f55d96b-8acc-4636-8cb8-76bf8abc2f57。GUID算法通过网卡MAC地址、时间戳和随机数保证任意计算机在任意时间生成的字符串都是不同的,大部分编程语言都内置了GUID算法,可以自己预算出主键。

联合主键允许多个列联合为主键,某一列可以有相同字段,只要所有字段不全部相同即可。

小结:

主键是关系表中记录的唯一标识。主键的选取非常重要:主键不要带有业务含义,而应该使用BIGINT自增或者GUID类型。主键也不应该允许NULL

可以使用多个列作为联合主键,但联合主键并不常用。

外键是多个表之间的键,可以一对一,一对多,多对多

须知:

外键并不是通过列名实现的,而是通过定义外键约束实现的:

1
2
3
4
ALTER TABLE students
ADD CONSTRAINT fk_class_id
FOREIGN KEY (class_id)
REFERENCES classes (id);

其中,外键约束的名称fk_class_id可以任意,FOREIGN KEY (class_id)指定了class_id作为外键,REFERENCES classes (id)指定了这个外键将关联到classes表的id列(即classes表的主键)。

索引可以优化查询。

添加

添加载体

建立数据库:

create database database_name;

附:配套:use database_name;

建立表:来个例子

create table test1 (
id int not null auto_increment,
name varchar(100) not null,
age bigint not null,
primary key(id) )
default charset=utf8;

添加数据

语法(允许全新添加):

insert into table_name (name1, name2, name3) values (value1,value2,value3);

须知:如果值是字符类的,需要加引号。

查询

查询载体

查询数据库:

show databases;

查询所有表:

show tables;

查看一个表的结构:

desc table_name;

查询数据

查询逻辑

语法结构:

1
2
3
4
5
6
7
8
9
10
11
12
select
······
from
······
where
······
group by
······
having
······
order by
······

查询逻辑:

  1. from 从某张表中查询数据
  2. where 先经过where条件筛选出有价值的数据
  3. groub by 对这些有价值的数据进行分组
  4. having 分组之后可以使用having继续筛选
  5. select select查询出来
  6. order by 最后排序输出

具体细节

我的技术与生活——MySQL | 春风少年郎的博客 (wsygdsgg.github.io)

以下只说一些

1.模糊查询

% 匹配多个字符(以下先代码后解释)

1
select name from name(表名) where name1 like '%o%';

找到名字里含有%o%的

1
select name from name(表名) where name1 like 'o%';

找到名字里以o开头的

1
select name from name(表名) where name1 like '%o';

找到名字里以o结尾的

_ 匹配单个字符(以下先代码后解释)

1
select * from name(表名) where name1 like '_A%';

找到第二个字母是A的

如果前面有n个字符,便在A前面输入n个下划线

转义

1
select * from name(表名) where name1 like '% \ _%';

真实输入中%与\与_之间没有空格,本处为了显示 \ 故做特殊处理

% 和 \ 有特殊含义,为了正常显示下划线,采用转义方法,该处与C语言类似

删除

删除载体

删除数据库:

drop database if exists database_name;

简化:drop database database_name

删除表:

drop table if exists table_name;

删除数据

语法:

delete from table_name where ···;

须知:本句的核心是where,具有很灵活的特性。

改变

改变载体

只有数据表的操作

改表名:

alter table table_name rename to table_new_name;

添加一列:

alter table table_name add column_name type(数据类型);

删除一列:

alter table table_name drop column_name;

修改列名称:

alter table table_name change column_name column_new_name type;

改变数据

语法:

update table_name set name1=value1, name2=value2, name3=value3 where ···;

须知:核心依然在where。