MYSQL基础笔记


title: MYSQL基础笔记
copyright: true
top: 0
date: 2018-05-14 18:29:00
tags: [MYSQL教程,Mysql基础]
categories: PHP与Mysql
permalink:
password:
keywords: [MYSQL教程,Mysql基础]
description: Mysql数据库基础的增删改查。

世界上最恐怖的并不是死亡 ,而是永恒的孤独。

创建名为test的数据库

create database test;

创建名为msg的表

CREATE TABLE IF NOT EXISTS msg(
id int primary key auto_increment,
name VARCHAR(10),
age int(3)
)charset=utf8;

IF NOT EXISTS如果数据库里面没有msg这个表就创建这个msg的表(防止重复创建表会报错),里面有三个字段ID,name,age。

id  你自己起的字段名字。
int  数据类型,整型。
primary key 定义这个字段为主键。
auto_increment 定义这个字段为自动增长,即如果INSERT时不赋值,则自动加1
varchar  字符串,后面的括号是允许存储的长度
int  数字类型
charset  设置编码

如果要使用索引的话就这么写,索引(排好序的快速查找数据结构)。

CREATE TABLE IF NOT EXISTS msg(
id int primary key auto_increment,
name VARCHAR(10),
age int(3)
INDEX `name` (`name`) USING BTREE,
UNIQUE INDEX `age` (`age`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
ROW_FORMAT=DYNAMIC
;

这里主键是id,索引的值是name,类型是InnoDB。INDEX设置该字段为索引,UNIQUE INDEX设置字段值唯一,并且设置该字段为索引。关于索引可以参考这篇文章MySQL高级-索引

ROW_FORMAT=DYNAMIC

增加数据

INSERT into msg (id,name,age) VALUES(1,'langzi',18);

因为id在创建表的时候设定是自增长,所以也可以这么添加

INSERT into msg (name,age) VALUES('langzi',18);

可以一次性插入多个数据,但是注意一定要与表的格式相匹配。

insert into msg VALUES (2,'lanzia',20),(3,'zhao',18),(4,'lany',20);

如果想插入数据避免插入重复的数值,使用虚拟表dual

INSERT into msg(name,age) SELECT 'langzi',18 from dual where 'langzi' not in (select name from msg);

这一行代码的意思就是如果表msg的name中没有langzi这个值就把langzi,18这两个数值插入进去。

删除数据

删除id=3的那一条数据,当然可以把id=3改成name=‘langzi’,这样就是删除name='langzi’的那一行数据。

DELETE FROM msg where id = '3';

更新数据

更新id=4的那条数据,比如说把name改成oo。

UPDATE msg set name='oo' where id=4;

可以修改where的条件,记住修改匹配的是整个表符合条件的。

查找数据

查询表的多有行所有列

select * from msg;

查询一行

select * from msgr where id=2;

查询多行

select * from msg where id>=2;

查询某几行的某几列,* 代表所有列

select name,age from user where id>=2;
select name from user where id=2;

模糊查询

SELECT * from msg WHERE name LIKE '%lang%';

使用%号的部分就是模糊匹配的地方,上面这条语句的意思就查找name中只要有lang的值的数据。

联合查询

union联合查询,两条语句一起执行,如果第一条出错还是会执行第二条,常用在注入的时候使用,让第一条异常,然后使自己构造的语句执行并且回显。

SELECT name from msg where id=1 union select age from msg where id=2;

这条语句是查询msg表中id=1的name值与id=2的age的值。

排序

order by这个关键词在注入的时候猜测表中有几个字段很常见,其实它的作用是按照一定的规则排序,比如按照升序降序排列,比如 select * from msg order by id asc;也可以order by 1或者2,3都可以,因为一开始表中只有三个字段,如果order by 1 或2,3都是正常的,如果order by 4就会报错,因为表中没有4个字段,这样就可以用来判断表的字段数。

SELECT * from msg ORDER BY 3;

添加命令

有些时候想要在原基础上添加新的表,使用alter命令.

比如:

alter table table_name drop index index_name ;

删除索引

删除索引可以使用ALTER TABLE或DROP INDEX语句来实现。DROP INDEX可以在ALTER TABLE内部作为一条语句处理,其格式如下:

drop index index_name on table_name ;

添加索引

添加普通索引

alter table table_name add index(table_name_column);

添加唯一索引

alter table table_name add unique(tanle_name_column);

全文索引是FULLTEXT,只针对BLOB和TEXT类型的字段。

修改数据库引擎

ALTER TABLE table_name ENGINE=InnoDB;

修改编码

alter table table_name convert to character set utf8mb4 collate utf8mb4_bin

你可能感兴趣的:(原创作品)